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