1
2 #include "studiox_includes.h"
3
4 #ifdef _DEBUG
5 #define new DEBUG_NEW
6 #endif
7
vertical_list_service_provider()8 vertical_list_service_provider::vertical_list_service_provider()
9 {
10 }
11
GetVarDeclaration()12 CString vertical_list_service_provider::GetVarDeclaration()
13 {
14 return CString("GX_VERTICAL_LIST_MEMBERS_DECLARE");
15 }
16
DeclarePropertiesStruct()17 CString vertical_list_service_provider::DeclarePropertiesStruct()
18 {
19 CString out(""
20 "typedef struct\n"
21 "{\n"
22 " GX_RESOURCE_ID wallpaper_id;\n"
23 " VOID (*callback)(GX_VERTICAL_LIST *, GX_WIDGET *, INT);\n"
24 " int total_rows;\n"
25 "} GX_VERTICAL_LIST_PROPERTIES;\n\n");
26 return out;
27 }
28
WriteExtendedProperties(screen_generator * gen,CString & prefix,widget_info * info)29 CString vertical_list_service_provider::WriteExtendedProperties(screen_generator *gen, CString &prefix, widget_info *info)
30 {
31 CString out;
32 CString propname = prefix + info->app_name;
33 CString callback;
34
35 if (info->callback_func.IsEmpty())
36 {
37 callback = "GX_NULL";
38 }
39 else
40 {
41 callback = info->callback_func;
42 }
43 out.Format(_T("GX_VERTICAL_LIST_PROPERTIES %s_properties =\n")
44 _T("{\n")
45 _T(" %s, /* wallpaper id */\n")
46 _T(" %s, /* callback function */\n")
47 _T(" %d /* total rows */\n};\n"),
48 propname,
49 gen->GetPixelmapIdName(info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX]),
50 callback,
51 info->ewi.vlist.total_rows);
52
53 return out;
54 }
55
56
GetCreateFromDefFunctionName()57 CString vertical_list_service_provider::GetCreateFromDefFunctionName()
58 {
59 return CString("gx_studio_vertical_list_create");
60 }
61
GetCreateFromDefFunction(int version)62 CString vertical_list_service_provider::GetCreateFromDefFunction(int version)
63 {
64 CString out;
65 MakeCreatePreamble("vertical_list", version, out);
66
67 out += "{\n"
68 " UINT status;\n"
69 " GX_VERTICAL_LIST *list = (GX_VERTICAL_LIST *) control_block;\n"
70 " GX_VERTICAL_LIST_PROPERTIES *props = (GX_VERTICAL_LIST_PROPERTIES *) info->properties;\n"
71 " status = gx_vertical_list_create(list, info->widget_name, parent, props->total_rows,\n"
72 " props->callback, info->style, info->widget_id, &info->size);\n"
73 " if (status == GX_SUCCESS)\n"
74 " {\n"
75 " if (props->wallpaper_id)\n"
76 " {\n"
77 " gx_window_wallpaper_set((GX_WINDOW *) list, props->wallpaper_id, info->style & GX_STYLE_TILE_WALLPAPER);\n"
78 " }\n"
79 " }\n"
80 " return status;\n"
81 "}\n";
82 return out;
83 }
84
85
CreateNewInstance(GX_WIDGET * parent)86 widget_info *vertical_list_service_provider::CreateNewInstance(GX_WIDGET *parent)
87 {
88 int parent_size;
89
90 GX_RECTANGLE size = parent->gx_widget_size;
91 gx_utility_rectangle_define(&size, 0, 0, 79, 23);
92 parent_size = (parent->gx_widget_size.gx_rectangle_right -
93 parent->gx_widget_size.gx_rectangle_left) / 2;
94 size.gx_rectangle_right = size.gx_rectangle_left + parent_size;
95
96 parent_size = (parent->gx_widget_size.gx_rectangle_bottom -
97 parent->gx_widget_size.gx_rectangle_top) / 2;
98 size.gx_rectangle_bottom = size.gx_rectangle_top + parent_size;
99
100 gx_utility_rectangle_center(&size, &parent->gx_widget_size);
101
102 GX_VERTICAL_LIST *list = new GX_VERTICAL_LIST;
103 gx_vertical_list_create(list, "vertical_list", parent,
104 10, NULL, GX_STYLE_ENABLED | GX_STYLE_BORDER_THIN, 0, &size);
105 widget_info *info = InitWidgetInfo((GX_WIDGET *) list);
106 info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX] = 0;
107 info->callback_func = CString("callback_name");
108 info->ewi.vlist.total_rows = 10;
109
110 return info;
111 }
112
GenerateFromInfo(GX_WIDGET * parent,widget_info * info)113 GX_WIDGET *vertical_list_service_provider::GenerateFromInfo(GX_WIDGET *parent, widget_info *info)
114 {
115 GX_VERTICAL_LIST *list = new GX_VERTICAL_LIST;
116 gx_vertical_list_create(list,
117 (CHAR *) info->app_name.GetString(),
118 parent,
119 info->ewi.vlist.total_rows, NULL,
120 info->style,
121 0,
122 &info->size);
123
124 gx_widget_fill_color_set(list,
125 info->color_id[NORMAL_FILL_COLOR_INDEX],
126 info->color_id[SELECTED_FILL_COLOR_INDEX],
127 info->color_id[DISABLED_FILL_COLOR_INDEX]);
128
129 if (info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX] > 0)
130 {
131 BOOL tile = FALSE;
132
133 if (info->style & GX_STYLE_TILE_WALLPAPER)
134 {
135 tile = TRUE;
136 }
137 gx_window_wallpaper_set((GX_WINDOW *) list, info->pixelmap_id[WALLPAPER_PIXELMAP_INDEX], tile);
138 }
139 return ((GX_WIDGET *) list);
140 }
141
SaveToProject(xml_writer & writer,studiox_project * project,int display,widget_info * info)142 void vertical_list_service_provider::SaveToProject(xml_writer &writer, studiox_project *project, int display, widget_info *info)
143 {
144 window_service_provider::SaveToProject(writer, project, display, info);
145 writer.WriteInt("seperation", info->ewi.vlist.seperation);
146 writer.WriteInt("total_rows", info->ewi.vlist.total_rows);
147 writer.WriteString("callback", info->callback_func);
148 }
149
ReadFromProject(xml_reader & reader,studiox_project * project,int display,widget_info * info,ULONG valid_styles)150 void vertical_list_service_provider::ReadFromProject(xml_reader &reader, studiox_project *project, int display, widget_info *info, ULONG valid_styles)
151 {
152 valid_styles |= GX_STYLE_CENTER_SELECTED|GX_STYLE_WRAP|GX_STYLE_FLICKABLE|GX_STYLE_REPEAT_SELECT;
153
154 window_service_provider::ReadFromProject(reader, project, display, info, valid_styles);
155 reader.ReadInt("seperation", info->ewi.vlist.seperation, 0);
156 reader.ReadInt("total_rows", info->ewi.vlist.total_rows, 10);
157 reader.ReadString("callback", info->callback_func);
158 }
159
160
161