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