90 current->container->Add(button, false); |
90 current->container->Add(button, false); |
91 |
91 |
92 return widget; |
92 return widget; |
93 } |
93 } |
94 |
94 |
|
95 |
|
96 static void togglebutton_register_checked_observers(ToggleButton button, UiObject* obj, UiVar* var) { |
|
97 button.Checked([button, obj, var](IInspectable const& sender, RoutedEventArgs) { |
|
98 UiInteger* i = (UiInteger*)var->value; |
|
99 UiEvent evt = ui_create_int_event(obj, i->get(i)); |
|
100 ui_notify_evt(i->observers, &evt); |
|
101 }); |
|
102 } |
|
103 |
|
104 static void togglebutton_register_unchecked_observers(ToggleButton button, UiObject* obj, UiVar* var) { |
|
105 button.Unchecked([button, obj, var](IInspectable const& sender, RoutedEventArgs) { |
|
106 UiInteger* i = (UiInteger*)var->value; |
|
107 UiEvent evt = ui_create_int_event(obj, i->get(i)); |
|
108 ui_notify_evt(i->observers, &evt); |
|
109 }); |
|
110 } |
|
111 |
|
112 static void togglebutton_register_callback(ToggleButton button, UiObject *obj, UiToggleArgs& args) { |
|
113 ui_callback callback = args.onchange; |
|
114 void* cbdata = args.onchangedata; |
|
115 if (callback) { |
|
116 button.Checked([button, obj, callback, cbdata](IInspectable const& sender, RoutedEventArgs) { |
|
117 UiEvent evt = ui_create_int_event(obj, true); |
|
118 callback(&evt, cbdata); |
|
119 }); |
|
120 button.Unchecked([button, obj, callback, cbdata](IInspectable const& sender, RoutedEventArgs) { |
|
121 UiEvent evt = ui_create_int_event(obj, false); |
|
122 callback(&evt, cbdata); |
|
123 }); |
|
124 } |
|
125 } |
|
126 |
95 static UIWIDGET create_togglebutton(UiObject *obj, ToggleButton button, UiToggleArgs args) { |
127 static UIWIDGET create_togglebutton(UiObject *obj, ToggleButton button, UiToggleArgs args) { |
96 UiObject* current = uic_current_obj(obj); |
128 UiObject* current = uic_current_obj(obj); |
97 |
129 |
98 // set label |
130 // set label |
99 set_button_label(button, args.label, args.stockid); |
131 set_button_label(button, args.label, args.stockid); |
|
132 togglebutton_register_callback(button, obj, args); |
100 |
133 |
101 // create toolkit wrapper object and register destructor |
134 // create toolkit wrapper object and register destructor |
102 UIElement elm = button; |
135 UIElement elm = button; |
103 UiWidget* widget = new UiWidget(elm); |
136 UiWidget* widget = new UiWidget(elm); |
104 ui_context_add_widget_destructor(current->ctx, widget); |
137 ui_context_add_widget_destructor(current->ctx, widget); |
114 if (var) { |
147 if (var) { |
115 UiInteger* value = (UiInteger*)var->value; |
148 UiInteger* value = (UiInteger*)var->value; |
116 value->obj = widget; |
149 value->obj = widget; |
117 value->get = ui_toggle_button_get; |
150 value->get = ui_toggle_button_get; |
118 value->set = ui_toggle_button_set; |
151 value->set = ui_toggle_button_set; |
|
152 |
|
153 // listener for notifying observers |
|
154 togglebutton_register_checked_observers(button, obj, var); |
|
155 togglebutton_register_unchecked_observers(button, obj, var); |
119 } |
156 } |
120 |
157 |
121 // add button to current container |
158 // add button to current container |
122 UI_APPLY_LAYOUT1(current, args); |
159 UI_APPLY_LAYOUT1(current, args); |
123 |
160 |
141 |
178 |
142 UiObject* current = uic_current_obj(obj); |
179 UiObject* current = uic_current_obj(obj); |
143 |
180 |
144 // set label |
181 // set label |
145 set_button_label(button, args.label, args.stockid); |
182 set_button_label(button, args.label, args.stockid); |
|
183 togglebutton_register_callback(button, obj, args); |
146 |
184 |
147 // create toolkit wrapper object and register destructor |
185 // create toolkit wrapper object and register destructor |
148 UIElement elm = button; |
186 UIElement elm = button; |
149 UiWidget* widget = new UiWidget(elm); |
187 UiWidget* widget = new UiWidget(elm); |
150 ui_context_add_widget_destructor(current->ctx, widget); |
188 ui_context_add_widget_destructor(current->ctx, widget); |
179 button.GroupName(groupName); |
217 button.GroupName(groupName); |
180 |
218 |
181 value->obj = radioButtons; |
219 value->obj = radioButtons; |
182 value->get = ui_radio_button_get; |
220 value->get = ui_radio_button_get; |
183 value->set = ui_radio_button_set; |
221 value->set = ui_radio_button_set; |
|
222 |
|
223 // listener for notifying observers (only checked, not unchecked) |
|
224 togglebutton_register_checked_observers(button, obj, var); |
184 } |
225 } |
185 |
226 |
186 // add button to current container |
227 // add button to current container |
187 UI_APPLY_LAYOUT1(current, args); |
228 UI_APPLY_LAYOUT1(current, args); |
188 |
229 |