ui/winui/button.cpp

branch
newapi
changeset 189
4daddc326877
parent 188
fbbae6738252
child 191
6113ed66d258
--- a/ui/winui/button.cpp	Sun Oct 01 14:40:43 2023 +0200
+++ b/ui/winui/button.cpp	Sun Oct 01 16:39:03 2023 +0200
@@ -92,11 +92,44 @@
 	return widget;
 }
 
+
+static void togglebutton_register_checked_observers(ToggleButton button, UiObject* obj, UiVar* var) {
+	button.Checked([button, obj, var](IInspectable const& sender, RoutedEventArgs) {
+		UiInteger* i = (UiInteger*)var->value;
+		UiEvent evt = ui_create_int_event(obj, i->get(i));
+		ui_notify_evt(i->observers, &evt);
+		});
+}
+
+static void togglebutton_register_unchecked_observers(ToggleButton button, UiObject* obj, UiVar* var) {
+	button.Unchecked([button, obj, var](IInspectable const& sender, RoutedEventArgs) {
+		UiInteger* i = (UiInteger*)var->value;
+		UiEvent evt = ui_create_int_event(obj, i->get(i));
+		ui_notify_evt(i->observers, &evt);
+		});
+}
+
+static void togglebutton_register_callback(ToggleButton button, UiObject *obj, UiToggleArgs& args) {
+	ui_callback callback = args.onchange;
+	void* cbdata = args.onchangedata;
+	if (callback) {
+		button.Checked([button, obj, callback, cbdata](IInspectable const& sender, RoutedEventArgs) {
+			UiEvent evt = ui_create_int_event(obj, true);
+			callback(&evt, cbdata);
+			});
+		button.Unchecked([button, obj, callback, cbdata](IInspectable const& sender, RoutedEventArgs) {
+			UiEvent evt = ui_create_int_event(obj, false);
+			callback(&evt, cbdata);
+			});
+	}
+}
+
 static UIWIDGET create_togglebutton(UiObject *obj, ToggleButton button, UiToggleArgs args) {
 	UiObject* current = uic_current_obj(obj);
 
 	// set label
 	set_button_label(button, args.label, args.stockid);
+	togglebutton_register_callback(button, obj, args);
 
 	// create toolkit wrapper object and register destructor
 	UIElement elm = button;
@@ -116,6 +149,10 @@
 		value->obj = widget;
 		value->get = ui_toggle_button_get;
 		value->set = ui_toggle_button_set;
+
+		// listener for notifying observers
+		togglebutton_register_checked_observers(button, obj, var);
+		togglebutton_register_unchecked_observers(button, obj, var);
 	}
 
 	// add button to current container
@@ -143,6 +180,7 @@
 
 	// set label
 	set_button_label(button, args.label, args.stockid);
+	togglebutton_register_callback(button, obj, args);
 
 	// create toolkit wrapper object and register destructor
 	UIElement elm = button;
@@ -181,6 +219,9 @@
 		value->obj = radioButtons;
 		value->get = ui_radio_button_get;
 		value->set = ui_radio_button_set;
+
+		// listener for notifying observers (only checked, not unchecked)
+		togglebutton_register_checked_observers(button, obj, var);
 	}
 
 	// add button to current container

mercurial