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 }