1 
2 #include "studiox_includes.h"
3 
4 #ifdef _DEBUG
5 #define new DEBUG_NEW
6 #endif
7 
text_scroll_wheel_service_provider()8 text_scroll_wheel_service_provider::text_scroll_wheel_service_provider()
9 {
10 }
11 
GetVarDeclaration()12 CString text_scroll_wheel_service_provider::GetVarDeclaration()
13 {
14     return CString("GX_TEXT_SCROLL_WHEEL_MEMBERS_DECLARE");
15 }
16 
DeclarePropertiesStructContent()17 CString text_scroll_wheel_service_provider::DeclarePropertiesStructContent()
18 {
19     CString out;
20 
21     if (project_lib_version() > 50401)
22     {
23         out =
24             "    int                 total_rows;\n"
25             "    int                 selected_row;\n"
26             "    GX_VALUE            row_height;\n"
27             "    GX_UBYTE            start_alpha;\n"
28             "    GX_UBYTE            end_alpha;\n"
29             "    GX_RESOURCE_ID      normal_font;\n"
30             "    GX_RESOURCE_ID      selected_font;\n"
31             "    GX_RESOURCE_ID      normal_text_color;\n"
32             "    GX_RESOURCE_ID      selected_text_color;\n"
33             "    GX_RESOURCE_ID      disabled_text_color;\n"
34             "    GX_RESOURCE_ID      wallpaper_id;\n"
35             "    GX_RESOURCE_ID      selected_background;";
36     }
37     else
38     {
39         out =
40             "    int                 total_rows;\n"
41             "    int                 selected_row;\n"
42             "    GX_VALUE            row_height;\n"
43             "    GX_UBYTE            start_alpha;\n"
44             "    GX_UBYTE            end_alpha;\n"
45             "    GX_RESOURCE_ID      normal_font;\n"
46             "    GX_RESOURCE_ID      selected_font;\n"
47             "    GX_RESOURCE_ID      normal_text_color;\n"
48             "    GX_RESOURCE_ID      selected_text_color;\n"
49             "    GX_RESOURCE_ID      wallpaper_id;\n"
50             "    GX_RESOURCE_ID      selected_background;";
51     }
52 
53     return out;
54 }
55 
DeclarePropertiesStruct()56 CString text_scroll_wheel_service_provider::DeclarePropertiesStruct()
57 {
58     CString out;
59     out.Format(_T("typedef struct\n")
60         _T("{\n")
61         _T("%s\n")
62         _T("} GX_TEXT_SCROLL_WHEEL_PROPERTIES;\n\n"),
63         DeclarePropertiesStructContent());
64     return out;
65 }
66 
WriteExtendedPropertiesContent(screen_generator * gen,widget_info * info,BOOL add_last_comma)67 CString text_scroll_wheel_service_provider::WriteExtendedPropertiesContent(screen_generator *gen, widget_info *info, BOOL add_last_comma)
68 {
69     CString out;
70     CString last_delimiter;
71 
72     if (add_last_comma)
73     {
74         last_delimiter = ",";
75     }
76     else
77     {
78         last_delimiter = " ";
79     }
80 
81     if (project_lib_version() > 50401)
82     {
83         out.Format(
84             _T("    %d, /* total rows */\n")
85             _T("    %d, /* selected row */\n")
86             _T("    %d, /* row height */\n")
87             _T("    %d, /* start alpha */\n")
88             _T("    %d, /* end alpha */\n")
89             _T("    %s, /* normal font id */\n")
90             _T("    %s, /* selected font id */\n")
91             _T("    %s, /* normal text color id */\n")
92             _T("    %s, /* selected text color id */\n")
93             _T("    %s, /* disabled text color id */\n")
94             _T("    %s, /* wallpaper id */\n")
95             _T("    %s%s /* selected background */"),
96             info->ewi.scroll_wheel.total_rows,
97             info->ewi.scroll_wheel.selected_row,
98             info->ewi.scroll_wheel.row_height,
99             info->ewi.scroll_wheel.start_alpha,
100             info->ewi.scroll_wheel.end_alpha,
101             gen->GetFontIdName(info->font_id[NORMAL_FONT_INDEX]),
102             gen->GetFontIdName(info->font_id[SELECTED_FONT_INDEX]),
103             gen->GetColorIdName(info->color_id[NORMAL_TEXT_COLOR_INDEX]),
104             gen->GetColorIdName(info->color_id[SELECTED_TEXT_COLOR_INDEX]),
105             gen->GetColorIdName(info->color_id[DISABLED_TEXT_COLOR_INDEX]),
106             gen->GetPixelmapIdName(info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX]),
107             gen->GetPixelmapIdName(info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX]), last_delimiter);
108     }
109     else
110     {
111         out.Format(
112             _T("    %d, /* total rows */\n")
113             _T("    %d, /* selected row */\n")
114             _T("    %d, /* row height */\n")
115             _T("    %d, /* start alpha */\n")
116             _T("    %d, /* end alpha */\n")
117             _T("    %s, /* normal font id */\n")
118             _T("    %s, /* selected font id */\n")
119             _T("    %s, /* normal text color id */\n")
120             _T("    %s, /* selected text color id */\n")
121             _T("    %s, /* wallpaper id */\n")
122             _T("    %s%s /* selected background */"),
123             info->ewi.scroll_wheel.total_rows,
124             info->ewi.scroll_wheel.selected_row,
125             info->ewi.scroll_wheel.row_height,
126             info->ewi.scroll_wheel.start_alpha,
127             info->ewi.scroll_wheel.end_alpha,
128             gen->GetFontIdName(info->font_id[NORMAL_FONT_INDEX]),
129             gen->GetFontIdName(info->font_id[SELECTED_FONT_INDEX]),
130             gen->GetColorIdName(info->color_id[NORMAL_TEXT_COLOR_INDEX]),
131             gen->GetColorIdName(info->color_id[SELECTED_TEXT_COLOR_INDEX]),
132             gen->GetPixelmapIdName(info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX]),
133             gen->GetPixelmapIdName(info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX]), last_delimiter);
134     }
135 
136     return out;
137 }
138 
WriteExtendedProperties(screen_generator * gen,CString & prefix,widget_info * info)139 CString text_scroll_wheel_service_provider::WriteExtendedProperties(screen_generator *gen, CString &prefix, widget_info *info)
140 {
141     CString out;
142     CString propname = prefix + info->app_name;
143 
144     out.Format(_T("GX_TEXT_SCROLL_WHEEL_PROPERTIES %s_properties =\n")
145         _T("{\n")
146         _T("%s\n")
147         _T("};\n"),
148         propname,
149         WriteExtendedPropertiesContent(gen, info, TRUE));
150 
151     return out;
152 }
153 
154 
GetCreateFromDefFunctionName()155 CString text_scroll_wheel_service_provider::GetCreateFromDefFunctionName()
156 {
157     return CString("gx_studio_text_scroll_wheel_create");
158 }
159 
GetCreateFromDefFunction(int version)160 CString text_scroll_wheel_service_provider::GetCreateFromDefFunction(int version)
161 {
162     CString out;
163     MakeCreatePreamble("text_scroll_wheel", version, out);
164 
165     out += "{\n"
166         "    UINT status;\n"
167         "    GX_TEXT_SCROLL_WHEEL *wheel = (GX_TEXT_SCROLL_WHEEL *) control_block;\n"
168         "    GX_TEXT_SCROLL_WHEEL_PROPERTIES *props = (GX_TEXT_SCROLL_WHEEL_PROPERTIES *) info->properties;\n"
169         "    status = gx_text_scroll_wheel_create(wheel, info->widget_name, parent, props->total_rows, props->string_list, props->callback, \n"
170         "                                    info->style, info->widget_id, &info->size);\n"
171         "    if (status == GX_SUCCESS)\n"
172         "    {\n"
173         "        if (props->wallpaper_id)\n"
174         "        {\n"
175         "            gx_window_wallpaper_set((GX_WINDOW *) wheel, props->wallpaper_id, info->style & GX_STYLE_TILE_WALLPAPER);\n"
176         "        }\n"
177         "        if(props->selected_background)\n"
178         "        {\n"
179         "            gx_scroll_wheel_selected_background_set((GX_SCROLL_WHEEL *)wheel, props->selected_background);\n"
180         "        }\n"
181         "        gx_scroll_wheel_selected_set((GX_SCROLL_WHEEL *)wheel, props->selected_row);\n"
182         "        gx_scroll_wheel_gradient_alpha_set((GX_SCROLL_WHEEL *)wheel, props->start_alpha, props->end_alpha);\n"
183         "        gx_scroll_wheel_row_height_set((GX_SCROLL_WHEEL *)wheel, props->row_height);\n"
184         "        gx_text_scroll_wheel_font_set(wheel, props->normal_font, props->selected_font);\n";
185 
186         if (project_lib_version() > 50401)
187         {
188             out += "#if defined(GUIX_5_4_0_COMPATIBILITY)\n"
189             "        gx_text_scroll_wheel_text_color_set(wheel, props->normal_text_color, props->selected_text_color);\n"
190             "#else\n"
191             "        gx_text_scroll_wheel_text_color_set(wheel, props->normal_text_color, props->selected_text_color, props->disabled_text_color);\n"
192             "#endif\n";
193         }
194         else
195         {
196             out += "        gx_text_scroll_wheel_text_color_set(wheel, props->normal_text_color, props->selected_text_color);\n";
197         }
198 
199     out += "    }\n"
200         "    return status;\n"
201         "}\n";
202     return out;
203 }
204 
205 
CreateNewInstance(GX_WIDGET * parent)206 widget_info *text_scroll_wheel_service_provider::CreateNewInstance(GX_WIDGET *parent)
207 {
208     int parent_size;
209 
210     GX_RECTANGLE size = parent->gx_widget_size;
211     gx_utility_rectangle_define(&size, 0, 0, 79, 23);
212     parent_size = (parent->gx_widget_size.gx_rectangle_right -
213                    parent->gx_widget_size.gx_rectangle_left) / 2;
214     size.gx_rectangle_right = size.gx_rectangle_left + parent_size;
215 
216     parent_size = (parent->gx_widget_size.gx_rectangle_bottom -
217                    parent->gx_widget_size.gx_rectangle_top) / 2;
218     size.gx_rectangle_bottom = size.gx_rectangle_top + parent_size;
219 
220     gx_utility_rectangle_center(&size, &parent->gx_widget_size);
221 
222     GX_TEXT_SCROLL_WHEEL *wheel = new GX_TEXT_SCROLL_WHEEL;
223     gx_text_scroll_wheel_create(wheel, "text_scroll_wheel", parent, 0,
224         GX_STYLE_ENABLED | GX_STYLE_BORDER_THIN | GX_STYLE_TEXT_CENTER, 0, &size);
225 
226     widget_info *info = InitWidgetInfo((GX_WIDGET *) wheel);
227     info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX] = 0;
228     info->ewi.scroll_wheel.start_alpha = wheel->gx_scroll_wheel_gradient.gx_gradient_alpha_start;
229     info->ewi.scroll_wheel.end_alpha = wheel->gx_scroll_wheel_gradient.gx_gradient_alpha_end;
230     info->ewi.scroll_wheel.row_height = wheel->gx_scroll_wheel_row_height;
231     info->ewi.scroll_wheel.selected_row = wheel->gx_scroll_wheel_selected_row;
232     info->ewi.scroll_wheel.total_rows = 0;
233     info->color_id[NORMAL_TEXT_COLOR_INDEX] = wheel->gx_text_scroll_wheel_normal_text_color;
234     info->color_id[SELECTED_TEXT_COLOR_INDEX] = wheel->gx_text_scroll_wheel_selected_text_color;
235     info->color_id[DISABLED_TEXT_COLOR_INDEX] = wheel->gx_text_scroll_wheel_disabled_text_color;
236     info->font_id[NORMAL_FONT_INDEX] = wheel->gx_text_scroll_wheel_normal_font;
237     info->font_id[SELECTED_FONT_INDEX] = wheel->gx_text_scroll_wheel_selected_font;
238 
239     return info;
240 }
241 
GenerateFromInfo(GX_WIDGET * parent,widget_info * info)242 GX_WIDGET *text_scroll_wheel_service_provider::GenerateFromInfo(GX_WIDGET *parent, widget_info *info)
243 {
244     GX_TEXT_SCROLL_WHEEL *wheel = new GX_TEXT_SCROLL_WHEEL;
245 
246     // Create scroll wheel widget.
247     gx_text_scroll_wheel_create(wheel,
248         (CHAR *)info->app_name.GetString(),
249         parent,
250         info->ewi.scroll_wheel.total_rows,
251         info->style,
252         0,
253         &info->size);
254 
255     // Set fill color.
256     gx_widget_fill_color_set(wheel,
257         info->color_id[NORMAL_FILL_COLOR_INDEX],
258         info->color_id[SELECTED_FILL_COLOR_INDEX],
259         info->color_id[DISABLED_FILL_COLOR_INDEX]);
260 
261     // Set wallpaper.
262     if (info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX] > 0)
263     {
264         BOOL tile = FALSE;
265 
266         if (info->style & GX_STYLE_TILE_WALLPAPER)
267         {
268             tile = TRUE;
269         }
270         gx_window_wallpaper_set((GX_WINDOW *)wheel, info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX], tile);
271     }
272 
273     // Set selected row background.
274     if (info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX] > 0)
275     {
276         gx_scroll_wheel_selected_background_set((GX_SCROLL_WHEEL *)wheel, info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX]);
277     }
278 
279     // Set scroll wheel properties.
280     gx_text_scroll_wheel_font_set(wheel, info->font_id[0], info->font_id[1]);
281     gx_text_scroll_wheel_text_color_set(wheel, info->color_id[NORMAL_TEXT_COLOR_INDEX], info->color_id[SELECTED_TEXT_COLOR_INDEX],
282         info->color_id[DISABLED_TEXT_COLOR_INDEX]);
283     gx_scroll_wheel_gradient_alpha_set(wheel, info->ewi.scroll_wheel.start_alpha, info->ewi.scroll_wheel.end_alpha);
284     gx_scroll_wheel_row_height_set(wheel, info->ewi.scroll_wheel.row_height);
285     gx_scroll_wheel_selected_set(wheel, info->ewi.scroll_wheel.selected_row);
286 
287     return (GX_WIDGET *)wheel;
288 }
289 
SaveToProject(xml_writer & writer,studiox_project * project,int display,widget_info * info)290 void text_scroll_wheel_service_provider::SaveToProject(xml_writer &writer, studiox_project *project, int display, widget_info *info)
291 {
292     scroll_wheel_service_provider::SaveToProject(writer, project, display, info);
293 
294     WriteColorId(writer, project, display, "normal_text_color", info->color_id[NORMAL_TEXT_COLOR_INDEX]);
295     WriteColorId(writer, project, display, "selected_text_color", info->color_id[SELECTED_TEXT_COLOR_INDEX]);
296     WriteColorId(writer, project, display, "disabled_text_color", info->color_id[DISABLED_TEXT_COLOR_INDEX]);
297     WriteFontId(writer, project, display, "normal_font_id", info->font_id[NORMAL_FONT_INDEX]);
298     WriteFontId(writer, project, display, "selected_font_id", info->font_id[SELECTED_FONT_INDEX]);
299     writer.WriteString("callback", info->callback_func);
300 }
301 
ReadFromProject(xml_reader & reader,studiox_project * project,int display,widget_info * info,ULONG valid_styles)302 void text_scroll_wheel_service_provider::ReadFromProject(xml_reader &reader, studiox_project *project, int display, widget_info *info, ULONG valid_styles)
303 {
304     valid_styles |= GX_STYLE_TEXT_SCROLL_WHEEL_ROUND;
305     valid_styles |= GX_STYLE_TEXT_ALIGNMENT_MASK|GX_STYLE_TEXT_COPY;
306 
307     scroll_wheel_service_provider::ReadFromProject(reader, project, display, info, valid_styles);
308 
309     if (project->mDisplays[display].colorformat <= GX_COLOR_FORMAT_8BIT_PALETTE)
310     {
311         // Remove round style
312         info->style &= (~GX_STYLE_TEXT_SCROLL_WHEEL_ROUND);
313     }
314 
315     info->color_id[NORMAL_TEXT_COLOR_INDEX] = ReadColorId(reader, project, display, "normal_text_color");
316     info->color_id[SELECTED_TEXT_COLOR_INDEX] = ReadColorId(reader, project, display, "selected_text_color");
317 
318     if (project->mHeader.project_version > 54)
319     {
320         info->color_id[DISABLED_TEXT_COLOR_INDEX] = ReadColorId(reader, project, display, "disabled_text_color");
321     }
322     else
323     {
324         info->color_id[DISABLED_TEXT_COLOR_INDEX] = info->color_id[NORMAL_TEXT_COLOR_INDEX];
325     }
326 
327     info->font_id[NORMAL_FONT_INDEX] = ReadFontId(reader, project, display, "normal_font_id");
328     info->font_id[SELECTED_FONT_INDEX] = ReadFontId(reader, project, display, "selected_font_id");
329     reader.ReadString("callback", info->callback_func);
330 }
331 
AssignColor(widget_info * info,int index,GX_RESOURCE_ID color_id)332 void text_scroll_wheel_service_provider::AssignColor(widget_info *info, int index, GX_RESOURCE_ID color_id)
333 {
334     GX_TEXT_SCROLL_WHEEL *wheel = (GX_TEXT_SCROLL_WHEEL *) (info->widget);
335 
336     switch (index)
337     {
338     case NORMAL_TEXT_COLOR_INDEX:
339         if (wheel)
340         {
341             gx_text_scroll_wheel_text_color_set(wheel, color_id, wheel->gx_text_scroll_wheel_selected_text_color,
342                 wheel->gx_text_scroll_wheel_disabled_text_color);
343         }
344 
345         info->color_id[NORMAL_TEXT_COLOR_INDEX] = color_id;
346         break;
347 
348     case SELECTED_TEXT_COLOR_INDEX:
349         if (wheel)
350         {
351             gx_text_scroll_wheel_text_color_set(wheel, wheel->gx_text_scroll_wheel_normal_text_color, color_id,
352                 wheel->gx_text_scroll_wheel_disabled_text_color);
353         }
354 
355         info->color_id[SELECTED_TEXT_COLOR_INDEX] = color_id;
356         break;
357 
358     case DISABLED_TEXT_COLOR_INDEX:
359         if (wheel)
360         {
361             gx_text_scroll_wheel_text_color_set(wheel, wheel->gx_text_scroll_wheel_normal_text_color,
362                 wheel->gx_text_scroll_wheel_selected_text_color, color_id);
363         }
364 
365         info->color_id[DISABLED_TEXT_COLOR_INDEX] = color_id;
366         break;
367 
368     default:
369         widget_service_provider::AssignColor(info, index, color_id);
370     }
371 }
372 
373 
AssignFont(widget_info * info,int index,GX_RESOURCE_ID font_id)374 void text_scroll_wheel_service_provider::AssignFont(widget_info *info, int index, GX_RESOURCE_ID font_id)
375 {
376     GX_TEXT_SCROLL_WHEEL *wheel = (GX_TEXT_SCROLL_WHEEL *)(info->widget);
377 
378     switch (index)
379     {
380     case NORMAL_FONT_INDEX:
381         if (wheel)
382         {
383             gx_text_scroll_wheel_font_set(wheel, font_id, wheel->gx_text_scroll_wheel_selected_font);
384         }
385 
386         info->font_id[NORMAL_FONT_INDEX] = font_id;
387         break;
388 
389     case SELECTED_FONT_INDEX:
390         if (wheel)
391         {
392             gx_text_scroll_wheel_font_set(wheel, wheel->gx_text_scroll_wheel_normal_font, font_id);
393         }
394 
395         info->font_id[SELECTED_FONT_INDEX] = font_id;
396         break;
397     }
398 }