1 #include "studiox_includes.h"
2
3
scroll_wheel_service_provider()4 scroll_wheel_service_provider::scroll_wheel_service_provider()
5 {
6 }
7
GetVarDeclaration()8 CString scroll_wheel_service_provider::GetVarDeclaration()
9 {
10 return CString("GX_SCROLL_WHEEL_MEMBERS_DECLARE");
11 }
12
DeclarePropertiesStruct()13 CString scroll_wheel_service_provider::DeclarePropertiesStruct()
14 {
15 CString out(""
16 "typedef struct\n"
17 "{\n"
18 " int total_rows;\n"
19 " int selected_row;\n"
20 " GX_VALUE row_height;\n"
21 " GX_UBYTE start_alpha;\n"
22 " GX_UBYTE end_alpha;\n"
23 " GX_RESOURCE_ID wallpaper_id;\n"
24 " GX_RESOURCE_ID selected_background;\n"
25 "} GX_SCROLL_WHEEL_PROPERTIES;\n\n");
26 return out;
27 }
28
WriteExtendedProperties(screen_generator * gen,CString & prefix,widget_info * info)29 CString scroll_wheel_service_provider::WriteExtendedProperties(screen_generator *gen, CString &prefix, widget_info *info)
30 {
31 CString out;
32 CString propname = prefix + info->app_name;
33
34 out.Format(_T("GX_SCROLL_WHEEL_PROPERTIES %s_properties =\n")
35 _T("{\n")
36 _T(" %d, /* total rows */\n")
37 _T(" %d, /* selected row */\n")
38 _T(" %d, /* row height */\n")
39 _T(" %d, /* start alpha */\n")
40 _T(" %d, /* end alpha */\n")
41 _T(" %s, /* wallpaper id */\n")
42 _T(" %s /* selected background */\n};\n"),
43 propname,
44 info->ewi.scroll_wheel.total_rows,
45 info->ewi.scroll_wheel.selected_row,
46 info->ewi.scroll_wheel.row_height,
47 info->ewi.scroll_wheel.start_alpha,
48 info->ewi.scroll_wheel.end_alpha,
49 gen->GetPixelmapIdName(info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX]),
50 gen->GetPixelmapIdName(info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX]));
51
52 return out;
53 }
54
55
GetCreateFromDefFunctionName()56 CString scroll_wheel_service_provider::GetCreateFromDefFunctionName()
57 {
58 return CString("gx_studio_scroll_wheel_create");
59 }
60
GetCreateFromDefFunction(int version)61 CString scroll_wheel_service_provider::GetCreateFromDefFunction(int version)
62 {
63 CString out;
64 MakeCreatePreamble("scroll_wheel", version, out);
65
66 out += "{\n"
67 " UINT status;\n"
68 " GX_SCROLL_WHEEL *wheel = (GX_SCROLL_WHEEL *) control_block;\n"
69 " GX_SCROLL_WHEEL_PROPERTIES *props = (GX_SCROLL_WHEEL_PROPERTIES *) info->properties;\n"
70 " status = gx_scroll_wheel_create(wheel, info->widget_name, parent, props->total_rows, \n"
71 " info->style, info->widget_id, &info->size);\n"
72 " if (status == GX_SUCCESS)\n"
73 " {\n"
74 " if (props->wallpaper_id)\n"
75 " {\n"
76 " gx_window_wallpaper_set((GX_WINDOW *) wheel, props->wallpaper_id, info->style & GX_STYLE_TILE_WALLPAPER);\n"
77 " }\n"
78 " if(props->selected_background)\n"
79 " {\n"
80 " gx_scroll_wheel_selected_background_set(wheel, props->selected_background);\n"
81 " }\n"
82 " gx_scroll_wheel_selected_set(wheel, props->selected_row);\n"
83 " gx_scroll_wheel_gradient_alpha_set(wheel, props->start_alpha, props->end_alpha);\n"
84 " gx_scroll_wheel_row_height_set(wheel, props->row_height);\n"
85 " }\n"
86 " return status;\n"
87 "}\n";
88 return out;
89 }
90
91
CreateNewInstance(GX_WIDGET * parent)92 widget_info *scroll_wheel_service_provider::CreateNewInstance(GX_WIDGET *parent)
93 {
94 int parent_size;
95
96 GX_RECTANGLE size = parent->gx_widget_size;
97 gx_utility_rectangle_define(&size, 0, 0, 79, 23);
98 parent_size = (parent->gx_widget_size.gx_rectangle_right -
99 parent->gx_widget_size.gx_rectangle_left) / 2;
100 size.gx_rectangle_right = size.gx_rectangle_left + parent_size;
101
102 parent_size = (parent->gx_widget_size.gx_rectangle_bottom -
103 parent->gx_widget_size.gx_rectangle_top) / 2;
104 size.gx_rectangle_bottom = size.gx_rectangle_top + parent_size;
105
106 gx_utility_rectangle_center(&size, &parent->gx_widget_size);
107
108 GX_SCROLL_WHEEL *wheel = new GX_SCROLL_WHEEL;
109 gx_scroll_wheel_create(wheel, "scroll_wheel", parent, GX_NULL,
110 GX_STYLE_ENABLED | GX_STYLE_BORDER_THIN | GX_STYLE_TEXT_CENTER, 0, &size);
111
112 widget_info *info = InitWidgetInfo((GX_WIDGET *)wheel);
113 info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX] = 0;
114 info->ewi.scroll_wheel.start_alpha = wheel->gx_scroll_wheel_gradient.gx_gradient_alpha_start;
115 info->ewi.scroll_wheel.end_alpha = wheel->gx_scroll_wheel_gradient.gx_gradient_alpha_end;
116 info->ewi.scroll_wheel.row_height = wheel->gx_scroll_wheel_row_height;
117 info->ewi.scroll_wheel.selected_row = wheel->gx_scroll_wheel_selected_row;
118 info->ewi.scroll_wheel.total_rows = 0;
119
120 return info;
121 }
122
GenerateFromInfo(GX_WIDGET * parent,widget_info * info)123 GX_WIDGET *scroll_wheel_service_provider::GenerateFromInfo(GX_WIDGET *parent, widget_info *info)
124 {
125 GX_SCROLL_WHEEL *wheel = new GX_SCROLL_WHEEL;
126
127 // Create scroll wheel widget.
128 gx_scroll_wheel_create(wheel, (CHAR *)info->app_name.GetString(), parent,
129 info->ewi.scroll_wheel.total_rows, info->style, 0, &info->size);
130
131 // Set fill color.
132 gx_widget_fill_color_set(wheel,
133 info->color_id[NORMAL_FILL_COLOR_INDEX],
134 info->color_id[SELECTED_FILL_COLOR_INDEX],
135 info->color_id[DISABLED_FILL_COLOR_INDEX]);
136
137 // Set wallpaper.
138 if (info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX] > 0)
139 {
140 BOOL tile = FALSE;
141
142 if (info->style & GX_STYLE_TILE_WALLPAPER)
143 {
144 tile = TRUE;
145 }
146 gx_window_wallpaper_set((GX_WINDOW *)wheel, info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX], tile);
147 }
148
149 // Set selected row background.
150 if (info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX] > 0)
151 {
152 gx_scroll_wheel_selected_background_set((GX_SCROLL_WHEEL *)wheel, info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX]);
153 }
154
155 // Set scroll wheel properties.
156 gx_scroll_wheel_gradient_alpha_set(wheel, info->ewi.scroll_wheel.start_alpha, info->ewi.scroll_wheel.end_alpha);
157 gx_scroll_wheel_row_height_set(wheel, info->ewi.scroll_wheel.row_height);
158 gx_scroll_wheel_selected_set(wheel, info->ewi.scroll_wheel.selected_row);
159
160 return (GX_WIDGET *)wheel;
161 }
162
SaveToProject(xml_writer & writer,studiox_project * project,int display,widget_info * info)163 void scroll_wheel_service_provider::SaveToProject(xml_writer &writer, studiox_project *project, int display, widget_info *info)
164 {
165 window_service_provider::SaveToProject(writer, project, display, info);
166
167 scroll_wheel_info *wheel_info = &info->ewi.scroll_wheel;
168
169 WritePixelmapId(writer, project, display, "selected_background", info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX]);
170 writer.WriteInt("start_alpha", wheel_info->start_alpha);
171 writer.WriteInt("end_alpha", wheel_info->end_alpha);
172 writer.WriteInt("row_height", wheel_info->row_height);
173 writer.WriteInt("selected_row", wheel_info->selected_row);
174 writer.WriteInt("total_rows", wheel_info->total_rows);
175 }
176
ReadFromProject(xml_reader & reader,studiox_project * project,int display,widget_info * info,ULONG valid_styles)177 void scroll_wheel_service_provider::ReadFromProject(xml_reader &reader, studiox_project *project, int display, widget_info *info, ULONG valid_styles)
178 {
179 valid_styles |= GX_STYLE_WRAP;
180 window_service_provider::ReadFromProject(reader, project, display, info, valid_styles);
181
182 scroll_wheel_info *wheel_info = &info->ewi.scroll_wheel;
183
184 info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX] = ReadPixelmapId(reader, project, display, "selected_background");
185 reader.ReadInt("start_alpha", wheel_info->start_alpha);
186 reader.ReadInt("end_alpha", wheel_info->end_alpha);
187 reader.ReadInt("row_height", wheel_info->row_height);
188 reader.ReadInt("selected_row", wheel_info->selected_row);
189 reader.ReadInt("total_rows", info->ewi.scroll_wheel.total_rows);
190 }
191
192
AssignScrollWheelInfo(widget_info * info,scroll_wheel_info * wheel_info)193 void scroll_wheel_service_provider::AssignScrollWheelInfo(widget_info *info, scroll_wheel_info *wheel_info)
194 {
195 GX_SCROLL_WHEEL *wheel = (GX_SCROLL_WHEEL *) (info->widget);
196
197 info->ewi.scroll_wheel = *wheel_info;
198
199 if (wheel)
200 {
201 gx_scroll_wheel_gradient_alpha_set(wheel, wheel_info->start_alpha, wheel_info->end_alpha);
202 gx_scroll_wheel_row_height_set(wheel, wheel_info->row_height);
203 }
204
205 if (wheel_info->total_rows > 0)
206 {
207 if (wheel)
208 {
209 gx_scroll_wheel_total_rows_set(wheel, wheel_info->total_rows);
210 }
211 }
212 else
213 {
214 if (info->basetype == GX_TYPE_NUMERIC_SCROLL_WHEEL)
215 {
216 if (wheel)
217 {
218 GX_NUMERIC_SCROLL_WHEEL *nw = (GX_NUMERIC_SCROLL_WHEEL *) wheel;
219 gx_numeric_scroll_wheel_range_set(nw, nw->gx_numeric_scroll_wheel_start_val, nw->gx_numeric_scroll_wheel_end_val);
220 }
221 }
222 }
223
224 if (wheel)
225 {
226 gx_scroll_wheel_selected_set(wheel, wheel_info->selected_row);
227 }
228 }
229
AssignPixelmap(widget_info * info,int index,GX_RESOURCE_ID pixmap_id)230 void scroll_wheel_service_provider::AssignPixelmap(widget_info* info, int index, GX_RESOURCE_ID pixmap_id)
231 {
232 GX_WIDGET* widget = info->widget;
233
234 switch (index)
235 {
236 case SCROLL_WHEEL_PIXELMAP_INDEX:
237 if (widget)
238 {
239 gx_scroll_wheel_selected_background_set((GX_SCROLL_WHEEL*)widget, pixmap_id);
240 }
241
242 info->pixelmap_id[SCROLL_WHEEL_PIXELMAP_INDEX] = pixmap_id;
243 break;
244
245 default:
246 window_service_provider::AssignPixelmap(info, index, pixmap_id);
247 }
248 }
249