ui/winui/button.cpp

branch
newapi
changeset 187
24ce2c326d85
parent 186
5db4979bf482
child 188
fbbae6738252
equal deleted inserted replaced
186:5db4979bf482 187:24ce2c326d85
38 using namespace winrt; 38 using namespace winrt;
39 using namespace Microsoft::UI::Xaml; 39 using namespace Microsoft::UI::Xaml;
40 using namespace Microsoft::UI::Xaml::Controls; 40 using namespace Microsoft::UI::Xaml::Controls;
41 using namespace Windows::UI::Xaml::Interop; 41 using namespace Windows::UI::Xaml::Interop;
42 using namespace winrt::Windows::Foundation; 42 using namespace winrt::Windows::Foundation;
43 using namespace winrt::Microsoft::UI::Xaml::Controls::Primitives;
44
45
46
47 static void set_button_label(ButtonBase button, const char* label, const char* stockid) {
48 if (label) {
49 wchar_t* wlabel = str2wstr(label, nullptr);
50 button.Content(box_value(wlabel));
51 free(wlabel);
52 }
53 // TODO: stockid
54 }
55
43 56
44 UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) { 57 UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) {
45 UiObject* current = uic_current_obj(obj); 58 UiObject* current = uic_current_obj(obj);
46 59
47 // create button with label 60 // create button with label
48 Button button = Button(); 61 Button button = Button();
49 if (args.label) { 62 set_button_label(button, args.label, args.stockid);
50 wchar_t* wlabel = str2wstr(args.label, nullptr);
51 button.Content(box_value(wlabel));
52 free(wlabel);
53 }
54 63
55 // create toolkit wrapper object and register destructor 64 // create toolkit wrapper object and register destructor
56 UIElement elm = button; 65 UIElement elm = button;
57 UiWidget* widget = new UiWidget(elm); 66 UiWidget* widget = new UiWidget(elm);
58 ui_context_add_widget_destructor(current->ctx, widget); 67 ui_context_add_widget_destructor(current->ctx, widget);
75 }); 84 });
76 } 85 }
77 86
78 // add button to current container 87 // add button to current container
79 UI_APPLY_LAYOUT1(current, args); 88 UI_APPLY_LAYOUT1(current, args);
89
80 current->container->Add(button, false); 90 current->container->Add(button, false);
81 91
82 return widget; 92 return widget;
83 } 93 }
84 94
95 static UIWIDGET create_togglebutton(UiObject *obj, ToggleButton button, UiToggleArgs args) {
96 UiObject* current = uic_current_obj(obj);
97
98 // set label
99 set_button_label(button, args.label, args.stockid);
100
101 // create toolkit wrapper object and register destructor
102 UIElement elm = button;
103 UiWidget* widget = new UiWidget(elm);
104 ui_context_add_widget_destructor(current->ctx, widget);
105
106 // bind variable
107 UiVar* var = nullptr;
108 if (args.value) {
109 var = uic_create_value_var(current->ctx, args.value);
110 }
111 else if (args.varname) {
112 var = uic_create_var(obj->ctx, args.varname, UI_VAR_INTEGER);
113 }
114 if (var) {
115 UiInteger* value = (UiInteger*)var->value;
116 value->obj = widget;
117 value->get = ui_toggle_button_get;
118 value->set = ui_toggle_button_set;
119 }
120
121 // add button to current container
122 UI_APPLY_LAYOUT1(current, args);
123
124 current->container->Add(button, false);
125
126 return widget;
127 }
128
129 UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) {
130 ToggleButton button = ToggleButton();
131 return create_togglebutton(obj, button, args);
132 }
133
85 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { 134 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) {
86 return nullptr; 135 CheckBox button = CheckBox();
136 return create_togglebutton(obj, button, args);
87 } 137 }
88 138
89 UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs) { 139 UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs) {
90 return nullptr; 140 return nullptr;
91 } 141 }
142
143
144 int64_t ui_toggle_button_get(UiInteger* integer) {
145 UiWidget* widget = (UiWidget*)integer->obj;
146 ToggleButton toggleButton = widget->uielement.as<ToggleButton>();
147 int val = toggleButton.IsChecked().GetBoolean();
148 integer->value = val;
149 return val;
150 }
151
152 void ui_toggle_button_set(UiInteger* integer, int64_t value) {
153 UiWidget* widget = (UiWidget*)integer->obj;
154 ToggleButton toggleButton = widget->uielement.as<ToggleButton>();
155 toggleButton.IsChecked((bool)value);
156 integer->value = value;
157 }

mercurial