]> uap-core.de Git - note.git/commitdiff
add toolbar main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sun, 26 Apr 2026 11:13:45 +0000 (13:13 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sun, 26 Apr 2026 11:13:45 +0000 (13:13 +0200)
application/src/main.rs
ui-rs/src/ui/mod.rs
ui/common/args.c
ui/common/args.h
ui/gtk/button.c
ui/gtk/button.h
ui/gtk/headerbar.c
ui/gtk/toolbar.c
ui/gtk/toolbar.h
ui/gtk/toolkit.h

index eb9801fcbda0b86ec6c66aa438cbf5e9408efdd3..7eed863a18f3fc49b30dffa5c68bc8de2413767c 100644 (file)
@@ -48,6 +48,18 @@ impl Application<MainWindow> for App {
         //    menu.item("Open").create();
         //});
 
+        create_toolbar(app);
+
         create_window(app);
     }
 }
+
+fn create_toolbar(app: &AppContext<MainWindow>) {
+    app.toolbar_item("go_back").icon("go-previous").action("go_back").create();
+    app.toolbar_item("go_forward").icon("go-next").action("go_forward").create();
+    app.toolbar_item("new_note").icon("document-new").action("new_note").create();
+
+    app.toolbar_add_default("go_back", ToolbarItemPosition::Left);
+    app.toolbar_add_default("go_forward", ToolbarItemPosition::Left);
+    app.toolbar_add_default("new_note", ToolbarItemPosition::Left);
+}
\ No newline at end of file
index d912af013114f069e14f89a4764b341520ddf176..39035ff681fd9e04862fc3330b01b3aa34364265 100644 (file)
@@ -47,3 +47,5 @@ pub use window::*;
 pub use button::*;
 pub use text::*;
 pub use list::*;
+pub use toolbar::*;
+pub use menu::*;
index 07cbb2b95a20898ed97c750137f834dd3788e152..54ce54c53c194799e288f5e45bd4254c84081384 100644 (file)
@@ -328,6 +328,10 @@ void ui_toolbar_item_args_set_tooltip(UiToolbarItemArgs *args, const char *toolt
     args->tooltip = strdup(tooltip);
 }
 
+void ui_toolbar_item_args_set_action(UiToolbarItemArgs *args, const char *action) {
+    args->action = strdup(action);
+}
+
 void ui_toolbar_item_args_set_onclick(UiToolbarItemArgs *args, ui_callback callback) {
     args->onclick = callback;
 }
@@ -345,6 +349,7 @@ void ui_toolbar_item_args_free(UiToolbarItemArgs *args) {
     free((void*)args->label);
     free((void*)args->icon);
     free((void*)args->tooltip);
+    free((void*)args->action);
     free((void*)args->states);
     free(args);
 }
@@ -373,6 +378,10 @@ void ui_toolbar_toggleitem_args_set_varname(UiToolbarToggleItemArgs *args, const
     args->varname = strdup(varname);
 }
 
+void ui_toolbar_toggleitem_args_set_action(UiToolbarToggleItemArgs *args, const char *action) {
+    args->action = strdup(action);
+}
+
 void ui_toolbar_toggleitem_args_set_onchange(UiToolbarToggleItemArgs *args, ui_callback callback) {
     args->onchange = callback;
 }
@@ -392,6 +401,7 @@ void ui_toolbar_toggleitem_args_free(UiToolbarToggleItemArgs *args) {
     free((void*)args->icon);
     free((void*)args->tooltip);
     free((void*)args->varname);
+    free((void*)args->action);
     free((void*)args->states);
     free(args);
 }
index f7c73a8b5dd86a0a2a4740e46768854d1e3eca09..726dca17af6ad40897b9f0df51c94fb9284567a8 100644 (file)
@@ -109,6 +109,7 @@ UIEXPORT UiToolbarItemArgs* ui_toolbar_item_args_new(void);
 UIEXPORT void ui_toolbar_item_args_set_label(UiToolbarItemArgs *args, const char *label);
 UIEXPORT void ui_toolbar_item_args_set_icon(UiToolbarItemArgs *args, const char *icon);
 UIEXPORT void ui_toolbar_item_args_set_tooltip(UiToolbarItemArgs *args, const char *tooltip);
+UIEXPORT void ui_toolbar_item_args_set_action(UiToolbarItemArgs *args, const char *action);
 UIEXPORT void ui_toolbar_item_args_set_onclick(UiToolbarItemArgs *args, ui_callback callback);
 UIEXPORT void ui_toolbar_item_args_set_onclickdata(UiToolbarItemArgs *args, void *onclickdata);
 UIEXPORT void ui_toolbar_item_args_set_states(UiToolbarItemArgs *args, int *states, int numstates);
@@ -119,6 +120,7 @@ UIEXPORT void ui_toolbar_toggleitem_args_set_label(UiToolbarToggleItemArgs *args
 UIEXPORT void ui_toolbar_toggleitem_args_set_icon(UiToolbarToggleItemArgs *args, const char *icon);
 UIEXPORT void ui_toolbar_toggleitem_args_set_tooltip(UiToolbarToggleItemArgs *args, const char *tooltip);
 UIEXPORT void ui_toolbar_toggleitem_args_set_varname(UiToolbarToggleItemArgs *args, const char *varname);
+UIEXPORT void ui_toolbar_toggleitem_args_set_action(UiToolbarToggleItemArgs *args, const char *action);
 UIEXPORT void ui_toolbar_toggleitem_args_set_onchange(UiToolbarToggleItemArgs *args, ui_callback callback);
 UIEXPORT void ui_toolbar_toggleitem_args_set_onchangedata(UiToolbarToggleItemArgs *args, void *onchangedata);
 UIEXPORT void ui_toolbar_toggleitem_args_set_states(UiToolbarToggleItemArgs *args, int *states, int numstates);
index 00ad370fb5810b6671f0929ea1fa40d66b99f23f..e72f7a7badfd8e10abaf5aaaa7057d4e484d81b5 100644 (file)
@@ -188,7 +188,14 @@ static void ui_toggled_callback(GtkToggleButton *widget, UiEventData *event) {
     e.eventdatatype = 0;
     e.intval = gtk_toggle_button_get_active(widget);
     e.set = ui_get_setop();
-    event->callback(&e, event->userdata);    
+    
+    if(event->callback) {
+        event->callback(&e, event->userdata);    
+    }
+    
+    if(event->action) {
+        uic_action_callback(&e, event->action);
+    }
 }
 
 static void ui_togglebutton_enable_state_callback(GtkToggleButton *widget, UiEventData *event) {
@@ -209,6 +216,7 @@ void ui_setup_togglebutton(
         UiInteger *value,
         ui_callback onchange,
         void *onchangedata,
+        const char *action,
         int enable_state)
 {
     if(label) {
@@ -219,6 +227,14 @@ void ui_setup_togglebutton(
         gtk_widget_set_tooltip_text(togglebutton, tooltip);
     }
     
+   if(action) {
+        uic_bind_action(obj->ctx, action, togglebutton, (ui_enablefunc)ui_set_enabled);
+        UiAction *ui_action = uic_resolve_action(obj->ctx, action);
+        if(!ui_action) {
+            ui_set_enabled(togglebutton, FALSE);
+        }
+    }
+    
     ui_bind_togglebutton(
             obj,
             togglebutton,
@@ -229,6 +245,7 @@ void ui_setup_togglebutton(
             (ui_toggled_func)ui_toggled_callback,
             onchange,
             onchangedata,
+            action,
             (ui_toggled_func)ui_togglebutton_enable_state_callback,
             enable_state
             );
@@ -244,6 +261,7 @@ void ui_bind_togglebutton(
         void (*toggled_callback)(void*, void*),
         ui_callback onchange,
         void *onchangedata,
+        const char *action,
         void (*enable_state_func)(void*, void*),
         int enable_state)
 {
@@ -280,6 +298,7 @@ void ui_bind_togglebutton(
         event->obj = obj;
         event->userdata = onchangedata;
         event->callback = onchange;
+        event->action = action ? strdup(action) : NULL,
         event->value = 0;
         event->customdata = NULL;
         event->customint = 0;
@@ -292,10 +311,10 @@ void ui_bind_togglebutton(
         g_signal_connect(
                 widget,
                 "destroy",
-                G_CALLBACK(ui_destroy_userdata),
+                G_CALLBACK(ui_destroy_eventdata),
                 event);
     }
-    
+     
     if(enable_state > 0) {
         UiEventData *event = malloc(sizeof(UiEventData));
         event->obj = obj;
@@ -329,6 +348,7 @@ static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleAr
             args->value,
             args->onchange,
             args->onchangedata,
+            args->action,
             args->enable_state);
     ui_set_name_and_style(widget, args->name, args->style_class);
     ui_set_widget_states(obj->ctx, widget, args->states);
@@ -391,6 +411,7 @@ UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
             (ui_toggled_func)ui_checkbox_callback,
             args->onchange,
             args->onchangedata,
+            args->action,
             (ui_toggled_func)ui_checkbox_enable_state,
             args->enable_state);
     
index 9197b8f54cf7a055da4e06a1bb10d369edf4e34c..1c4355b411bf20617028d9a41efa282140aa41ee 100644 (file)
@@ -72,6 +72,7 @@ void ui_setup_togglebutton(
         UiInteger *value,
         ui_callback onchange,
         void *onchangedata,
+        const char *action,
         int enable_state);
 
 void ui_bind_togglebutton(
@@ -84,6 +85,7 @@ void ui_bind_togglebutton(
         void (*toggled_callback)(void*, void*),
         ui_callback onchange,
         void *onchangedata,
+        const char *action,
         void (*enable_state_func)(void*, void*),
         int enable_state);
     
index 97e57e6192d6b145b3698706186d3adf279f20e2..d2554a0c56434e4f09e02d323bbd72c2952cc080 100644 (file)
@@ -181,7 +181,7 @@ void ui_add_headerbar_toggleitem(
     ui_set_widget_states(obj->ctx, button, item->args.states);
     ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states);
     WIDGET_ADD_CSS_CLASS(button, "flat");
-    ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.tooltip, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, 0);
+    ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.tooltip, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, item->args.action, 0);
     headerbar_add(headerbar, box, button, pos);
 }
 
index 33efbcd274eb1cbf575094b90985dfe84b2e7a13..1f6cc19f680161ab2405220bdef55889236e2514 100644 (file)
@@ -140,13 +140,14 @@ void add_toolitem_widget(GtkToolbar *tb, UiToolbarItem *item, UiObject *obj) {
     
     ui_set_widget_nstates(obj->ctx, GTK_WIDGET(button), item->args.states, item->nstates);
     
-    if(item->args.onclick) {
+    if(item->args.onclick || item->args.action) {
         UiEventData *event = cxMalloc(
                 obj->ctx->allocator,
                 sizeof(UiEventData));
         event->obj = obj;
         event->callback = item->args.onclick;
         event->userdata = item->args.onclickdata;
+        event->action = item->args.action ? ui_strdup(obj->ctx, item->args.action) : NULL;
         event->customdata = NULL;
         event->customint = 0;
         event->value = 0;
@@ -202,6 +203,7 @@ void add_toolitem_toggle_widget(GtkToolbar *tb, UiToolbarToggleItem *item, UiObj
     event->obj = obj;
     event->callback = item->args.onchange;
     event->userdata = item->args.onchangedata;
+    event->action = item->args.action ? ui_strdup(obj->ctx, item->args.action) : NULL;;
     event->var = var;
 
     g_signal_connect(
@@ -239,6 +241,10 @@ void ui_tool_button_toggled(GtkToggleToolButton *widget, UiVarEventData *event)
     if(i) {
         ui_notify_evt(i->observers, &e);
     }
+    
+    if(event->action) {
+        uic_action_callback(&e, event->action);
+    }
 }
 
 int64_t ui_tool_toggle_button_get(UiInteger *integer) {
index 7534c63ec6caea97858e57f237de3dcc37da755b..659e9cbc84474c7b86221359174894e2700fe2d0 100644 (file)
@@ -42,68 +42,6 @@ extern "C" {
 
 #if UI_GTK2 || UI_GTK3
     
-typedef struct UiToolItemI      UiToolItemI;
-typedef struct UiToolItem       UiToolItem;
-typedef struct UiStToolItem     UiStToolItem;
-typedef struct UiToggleToolItem UiToggleToolItem;
-
-typedef struct UiToolbarComboBox   UiToolbarComboBox;
-typedef struct UiToolbarComboBoxNV UiToolbarComboBoxNV;
-
-typedef void(*ui_toolbar_add_f)(GtkToolbar*, UiToolItemI*, UiObject*);
-
-struct UiToolItemI {
-    ui_toolbar_add_f  add_to;
-};
-
-struct UiToolItem {
-    UiToolItemI    item;
-    const char     *label;
-    const char     *image;
-    ui_callback    callback;
-    void           *userdata;
-    const char     *varname;
-    CxList         *groups;
-    int            isimportant;
-};
-
-struct UiStToolItem {
-    UiToolItemI    item;
-    const char     *stockid;
-    ui_callback    callback;
-    void           *userdata;
-    const char     *varname;
-    CxList         *groups;
-    int            isimportant;
-};
-
-struct UiToggleToolItem {
-    UiToolItemI    item;
-    const char     *label;
-    const char     *image;
-    const char     *stockid;
-    UiInteger      *value;
-    const char     *var;
-    CxList         *groups;
-    int            isimportant;
-};
-
-struct UiToolbarComboBox {
-    UiToolItemI         item;
-    UiVar               *var;
-    ui_getvaluefunc getvalue;
-    ui_callback         callback;
-    void                *userdata;
-};
-
-struct UiToolbarComboBoxNV {
-    UiToolItemI         item;
-    char                *listname;
-    ui_getvaluefunc     getvalue;
-    ui_callback         callback;
-    void                *userdata;
-};
-
 
 void ui_toolitem_vstgr(
         char *name,
index 25a48f580f21535b36a99c580424b6ac0426fb8c..432bebb9dad1e766f0678c86abcbc67f3ec46be7 100644 (file)
@@ -173,6 +173,7 @@ typedef struct UiVarEventData {
     UiVar       *var;
     UiObserver  **observers;
     ui_callback callback;
+    char        *action;
     void        *userdata;
     int         customint1;
     int         customint2;