mirror of
https://github.com/azure-rtos/guix.git
synced 2025-02-04 07:13:17 +08:00
247 lines
10 KiB
C++
247 lines
10 KiB
C++
|
|
||
|
#include "studiox_includes.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#endif
|
||
|
|
||
|
pixelmap_slider_service_provider::pixelmap_slider_service_provider()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
CString pixelmap_slider_service_provider::DeclarePropertiesStruct()
|
||
|
{
|
||
|
CString out(""
|
||
|
"typedef struct\n"
|
||
|
"{\n"
|
||
|
" int min_val;\n"
|
||
|
" int max_val;\n"
|
||
|
" int current_val;\n"
|
||
|
" int increment;\n"
|
||
|
" GX_VALUE min_travel;\n"
|
||
|
" GX_VALUE max_travel;\n"
|
||
|
" GX_VALUE needle_width;\n"
|
||
|
" GX_VALUE needle_height;\n"
|
||
|
" GX_VALUE needle_inset;\n"
|
||
|
" GX_VALUE needle_hotspot;\n"
|
||
|
" GX_RESOURCE_ID lower_pixelmap;\n"
|
||
|
" GX_RESOURCE_ID upper_pixelmap;\n"
|
||
|
" GX_RESOURCE_ID needle_pixelmap;\n"
|
||
|
"} GX_PIXELMAP_SLIDER_PROPERTIES;\n\n");
|
||
|
return out;
|
||
|
}
|
||
|
|
||
|
CString pixelmap_slider_service_provider::WriteExtendedProperties(screen_generator *gen, CString &prefix, widget_info *info)
|
||
|
{
|
||
|
CString out;
|
||
|
CString propname = prefix + info->app_name;
|
||
|
out.Format(_T("GX_PIXELMAP_SLIDER_PROPERTIES %s_properties =\n")
|
||
|
_T("{\n")
|
||
|
_T(" %d, /* minimum value */\n")
|
||
|
_T(" %d, /* maximum value */\n")
|
||
|
_T(" %d, /* current value */\n")
|
||
|
_T(" %d, /* increment */\n")
|
||
|
_T(" %d, /* minimum travel */\n")
|
||
|
_T(" %d, /* maximum travel */\n")
|
||
|
_T(" %d, /* needle width */\n")
|
||
|
_T(" %d, /* needle height */\n")
|
||
|
_T(" %d, /* needle inset */\n")
|
||
|
_T(" %d, /* needle hotspot */\n")
|
||
|
_T(" %s, /* lower pixelmap id */\n")
|
||
|
_T(" %s, /* upper pixelmap id */\n")
|
||
|
_T(" %s /* needle pixelmap id */\n};\n"),
|
||
|
propname,
|
||
|
info->ewi.slider.gx_slider_info_min_val,
|
||
|
info->ewi.slider.gx_slider_info_max_val,
|
||
|
info->ewi.slider.gx_slider_info_current_val,
|
||
|
info->ewi.slider.gx_slider_info_increment,
|
||
|
info->ewi.slider.gx_slider_info_min_travel,
|
||
|
info->ewi.slider.gx_slider_info_max_travel,
|
||
|
info->ewi.slider.gx_slider_info_needle_width,
|
||
|
info->ewi.slider.gx_slider_info_needle_height,
|
||
|
info->ewi.slider.gx_slider_info_needle_inset,
|
||
|
info->ewi.slider.gx_slider_info_needle_hotspot_offset,
|
||
|
gen->GetPixelmapIdName(info->pixelmap_id[LOWER_PIXELMAP_INDEX]),
|
||
|
gen->GetPixelmapIdName(info->pixelmap_id[UPPER_PIXELMAP_INDEX]),
|
||
|
gen->GetPixelmapIdName(info->pixelmap_id[NEEDLE_PIXELMAP_INDEX]));
|
||
|
return out;
|
||
|
}
|
||
|
|
||
|
CString pixelmap_slider_service_provider::GetCreateFromDefFunctionName()
|
||
|
{
|
||
|
return CString("gx_studio_pixelmap_slider_create");
|
||
|
}
|
||
|
|
||
|
CString pixelmap_slider_service_provider::GetCreateFromDefFunction(int version)
|
||
|
{
|
||
|
CString out;
|
||
|
MakeCreatePreamble("pixelmap_slider", version, out);
|
||
|
|
||
|
out += "{\n"
|
||
|
" UINT status;\n"
|
||
|
" GX_PIXELMAP_SLIDER *slider = (GX_PIXELMAP_SLIDER *) control_block;\n"
|
||
|
" GX_PIXELMAP_SLIDER_PROPERTIES *props = (GX_PIXELMAP_SLIDER_PROPERTIES *) info->properties;\n"
|
||
|
" GX_PIXELMAP_SLIDER_INFO pixelmap_info;\n"
|
||
|
" GX_SLIDER_INFO slider_info;\n"
|
||
|
" slider_info.gx_slider_info_min_val = props->min_val;\n"
|
||
|
" slider_info.gx_slider_info_max_val = props->max_val;\n"
|
||
|
" slider_info.gx_slider_info_current_val = props->current_val;\n"
|
||
|
" slider_info.gx_slider_info_increment = props->increment;\n"
|
||
|
" slider_info.gx_slider_info_min_travel = props->min_travel;\n"
|
||
|
" slider_info.gx_slider_info_max_travel = props->max_travel;\n"
|
||
|
" slider_info.gx_slider_info_needle_width = props->needle_width;\n"
|
||
|
" slider_info.gx_slider_info_needle_height = props->needle_height;\n"
|
||
|
" slider_info.gx_slider_info_needle_inset = props->needle_inset;\n"
|
||
|
" slider_info.gx_slider_info_needle_hotspot_offset = props->needle_hotspot;\n"
|
||
|
" pixelmap_info.gx_pixelmap_slider_info_lower_background_pixelmap = props->lower_pixelmap;\n"
|
||
|
" pixelmap_info.gx_pixelmap_slider_info_upper_background_pixelmap = props->upper_pixelmap;\n"
|
||
|
" pixelmap_info.gx_pixelmap_slider_info_needle_pixelmap = props->needle_pixelmap;\n"
|
||
|
" status = gx_pixelmap_slider_create(slider,\n"
|
||
|
" info->widget_name,\n"
|
||
|
" parent,\n"
|
||
|
" &slider_info,\n"
|
||
|
" &pixelmap_info,\n"
|
||
|
" info->style,\n"
|
||
|
" info->widget_id,\n"
|
||
|
" &info->size);\n"
|
||
|
" return status;\n"
|
||
|
"}\n";
|
||
|
return out;
|
||
|
}
|
||
|
|
||
|
widget_info *pixelmap_slider_service_provider::CreateNewInstance(GX_WIDGET *parent)
|
||
|
{
|
||
|
GX_RECTANGLE size;
|
||
|
gx_utility_rectangle_define(&size, 0, 0, 79, 23);
|
||
|
gx_utility_rectangle_center(&size, &parent->gx_widget_size);
|
||
|
|
||
|
GX_PIXELMAP_SLIDER *slider = new GX_PIXELMAP_SLIDER;
|
||
|
GX_PIXELMAP_SLIDER_INFO pixelmap_info;
|
||
|
GX_SLIDER_INFO slider_info;
|
||
|
|
||
|
slider_info.gx_slider_info_min_val = 0;
|
||
|
slider_info.gx_slider_info_max_val = 100;
|
||
|
slider_info.gx_slider_info_current_val = 50;
|
||
|
slider_info.gx_slider_info_increment = 10;
|
||
|
slider_info.gx_slider_info_min_travel = 0;
|
||
|
slider_info.gx_slider_info_max_travel = 0;
|
||
|
slider_info.gx_slider_info_needle_width = 5;
|
||
|
slider_info.gx_slider_info_needle_height = 10;
|
||
|
slider_info.gx_slider_info_needle_inset = 5;
|
||
|
slider_info.gx_slider_info_needle_hotspot_offset = 2;
|
||
|
|
||
|
pixelmap_info.gx_pixelmap_slider_info_lower_background_pixelmap = 0;
|
||
|
pixelmap_info.gx_pixelmap_slider_info_upper_background_pixelmap = 0;
|
||
|
pixelmap_info.gx_pixelmap_slider_info_needle_pixelmap = 0;
|
||
|
|
||
|
gx_pixelmap_slider_create(slider,
|
||
|
"pixelmap_slider",
|
||
|
parent,
|
||
|
&slider_info,
|
||
|
&pixelmap_info,
|
||
|
GX_STYLE_BORDER_RAISED|GX_STYLE_ENABLED, 0,
|
||
|
&size);
|
||
|
|
||
|
widget_info *info = InitWidgetInfo((GX_WIDGET *) slider);
|
||
|
|
||
|
info->ewi.slider = slider_info;
|
||
|
return info;
|
||
|
}
|
||
|
|
||
|
GX_WIDGET *pixelmap_slider_service_provider::GenerateFromInfo(GX_WIDGET *parent, widget_info *info)
|
||
|
{
|
||
|
GX_PIXELMAP_SLIDER *slider = new GX_PIXELMAP_SLIDER;
|
||
|
GX_PIXELMAP_SLIDER_INFO pixelmap_info;
|
||
|
|
||
|
pixelmap_info.gx_pixelmap_slider_info_lower_background_pixelmap = info->pixelmap_id[LOWER_PIXELMAP_INDEX];
|
||
|
pixelmap_info.gx_pixelmap_slider_info_upper_background_pixelmap = info->pixelmap_id[UPPER_PIXELMAP_INDEX];
|
||
|
pixelmap_info.gx_pixelmap_slider_info_needle_pixelmap = info->pixelmap_id[NEEDLE_PIXELMAP_INDEX];
|
||
|
|
||
|
gx_pixelmap_slider_create(slider,
|
||
|
(CHAR *) info->app_name.GetString(),
|
||
|
parent,
|
||
|
&info->ewi.slider,
|
||
|
&pixelmap_info,
|
||
|
info->style, 0,
|
||
|
&info->size);
|
||
|
gx_widget_fill_color_set((GX_WIDGET *) slider,
|
||
|
info->color_id[NORMAL_FILL_COLOR_INDEX], info->color_id[SELECTED_FILL_COLOR_INDEX], info->color_id[DISABLED_FILL_COLOR_INDEX]);
|
||
|
|
||
|
return ((GX_WIDGET *) slider);
|
||
|
}
|
||
|
|
||
|
void pixelmap_slider_service_provider::SaveToProject(xml_writer &writer, studiox_project *project, int display, widget_info *info)
|
||
|
{
|
||
|
slider_service_provider::SaveToProject(writer, project, display, info);
|
||
|
WritePixelmapId(writer, project, display, "lower_pixmap", info->pixelmap_id[LOWER_PIXELMAP_INDEX]);
|
||
|
WritePixelmapId(writer, project, display, "upper_pixmap", info->pixelmap_id[UPPER_PIXELMAP_INDEX]);
|
||
|
WritePixelmapId(writer, project, display, "needle_pixmap", info->pixelmap_id[NEEDLE_PIXELMAP_INDEX]);
|
||
|
}
|
||
|
|
||
|
void pixelmap_slider_service_provider::ReadFromProject(xml_reader &reader, studiox_project *project, int display, widget_info *info, ULONG valid_styles)
|
||
|
{
|
||
|
valid_styles |= GX_PIXELMAP_HALIGN_MASK|GX_PIXELMAP_VALIGN_MASK|GX_STYLE_TILE_BACKGROUND;
|
||
|
slider_service_provider::ReadFromProject(reader, project, display, info, valid_styles);
|
||
|
info->pixelmap_id[LOWER_PIXELMAP_INDEX] = ReadPixelmapId(reader, project, display, "lower_pixmap");
|
||
|
info->pixelmap_id[UPPER_PIXELMAP_INDEX] = ReadPixelmapId(reader, project, display, "upper_pixmap");
|
||
|
info->pixelmap_id[NEEDLE_PIXELMAP_INDEX] = ReadPixelmapId(reader, project, display, "needle_pixmap");
|
||
|
}
|
||
|
|
||
|
void pixelmap_slider_service_provider::AssignPixelmap(widget_info *info,
|
||
|
int index, GX_RESOURCE_ID pixmap_id)
|
||
|
{
|
||
|
GX_PIXELMAP_SLIDER_INFO slider_info;
|
||
|
GX_PIXELMAP_SLIDER *slider = (GX_PIXELMAP_SLIDER *) (info->widget);
|
||
|
|
||
|
switch(index)
|
||
|
{
|
||
|
case LOWER_PIXELMAP_INDEX:
|
||
|
info->pixelmap_id[LOWER_PIXELMAP_INDEX] = pixmap_id;
|
||
|
|
||
|
if (slider)
|
||
|
{
|
||
|
slider_info.gx_pixelmap_slider_info_lower_background_pixelmap = pixmap_id;
|
||
|
slider_info.gx_pixelmap_slider_info_needle_pixelmap = info->pixelmap_id[NEEDLE_PIXELMAP_INDEX];
|
||
|
slider_info.gx_pixelmap_slider_info_upper_background_pixelmap = info->pixelmap_id[UPPER_PIXELMAP_INDEX];
|
||
|
gx_pixelmap_slider_pixelmap_set(slider, &slider_info);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case UPPER_PIXELMAP_INDEX:
|
||
|
info->pixelmap_id[UPPER_PIXELMAP_INDEX] = pixmap_id;
|
||
|
|
||
|
if (slider)
|
||
|
{
|
||
|
slider_info.gx_pixelmap_slider_info_upper_background_pixelmap = pixmap_id;
|
||
|
slider_info.gx_pixelmap_slider_info_needle_pixelmap = info->pixelmap_id[NEEDLE_PIXELMAP_INDEX];
|
||
|
slider_info.gx_pixelmap_slider_info_lower_background_pixelmap = info->pixelmap_id[LOWER_PIXELMAP_INDEX];
|
||
|
gx_pixelmap_slider_pixelmap_set(slider, &slider_info);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case NEEDLE_PIXELMAP_INDEX:
|
||
|
info->pixelmap_id[NEEDLE_PIXELMAP_INDEX] = pixmap_id;
|
||
|
|
||
|
if (slider)
|
||
|
{
|
||
|
slider_info.gx_pixelmap_slider_info_needle_pixelmap = pixmap_id;
|
||
|
slider_info.gx_pixelmap_slider_info_lower_background_pixelmap = info->pixelmap_id[LOWER_PIXELMAP_INDEX];
|
||
|
slider_info.gx_pixelmap_slider_info_upper_background_pixelmap = info->pixelmap_id[UPPER_PIXELMAP_INDEX];
|
||
|
gx_pixelmap_slider_pixelmap_set(slider, &slider_info);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void pixelmap_slider_service_provider::Autosize(widget_info *info)
|
||
|
{
|
||
|
if (info->style & GX_STYLE_SLIDER_VERTICAL)
|
||
|
{
|
||
|
CheckResizeToPixelmap(info, RESIZE_MODE_WIDTH);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CheckResizeToPixelmap(info, RESIZE_MODE_HEIGHT);
|
||
|
}
|
||
|
}
|