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 } |