add toolbar (QT)

Fri, 18 Apr 2025 14:56:12 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 18 Apr 2025 14:56:12 +0200
changeset 574
19de5292f08f
parent 573
2360c1696a34
child 575
50da9696a865

add toolbar (QT)

application/main.c file | annotate | diff | comparison | revisions
make/toolchain.sh file | annotate | diff | comparison | revisions
ui/qt/toolbar.cpp file | annotate | diff | comparison | revisions
ui/qt/toolbar.h file | annotate | diff | comparison | revisions
ui/qt/window.cpp file | annotate | diff | comparison | revisions
--- a/application/main.c	Fri Apr 18 11:48:11 2025 +0200
+++ b/application/main.c	Fri Apr 18 14:56:12 2025 +0200
@@ -963,6 +963,16 @@
             ui_menuitem(.label = "Subitem");
         }
     }
+    
+    ui_toolbar_item("new", .label = "New");
+    ui_toolbar_item("add", .label = "Add");
+    ui_toolbar_item("copy", .label = "Copy");
+    ui_toolbar_item("paste", .label = "Paste");
+    
+    ui_toolbar_add_default("new", UI_TOOLBAR_LEFT);
+    ui_toolbar_add_default("add", UI_TOOLBAR_LEFT);
+    ui_toolbar_add_default("copy", UI_TOOLBAR_LEFT);
+    ui_toolbar_add_default("paste", UI_TOOLBAR_LEFT);
 
     ui_main();
 
--- a/make/toolchain.sh	Fri Apr 18 11:48:11 2025 +0200
+++ b/make/toolchain.sh	Fri Apr 18 14:56:12 2025 +0200
@@ -68,7 +68,7 @@
 #else
   std::cout << "toolchain:unknown" << std::endl;
 #endif
-  std:cout << "wsize:" << sizeof(void*)*8 << std::endl;
+  std::cout << "wsize:" << sizeof(void*)*8 << std::endl;
   return 0;
 }
 __EOF__
--- a/ui/qt/toolbar.cpp	Fri Apr 18 11:48:11 2025 +0200
+++ b/ui/qt/toolbar.cpp	Fri Apr 18 14:56:12 2025 +0200
@@ -32,6 +32,9 @@
 #include "menu.h"
 #include "stock.h"
 
+static void add_items(UiObject *obj, QToolBar *toolbar, CxList *defaults, CxMap *items);
+static void create_item(UiObject *obj, QToolBar *toolbar, UiToolbarItemI *i);
+
 QToolBar* ui_create_toolbar(UiObject *obj) {
     CxMap *items = uic_get_toolbar_items();
     CxList *left_defaults = uic_get_toolbar_defaults(UI_TOOLBAR_LEFT);
@@ -43,7 +46,54 @@
     }
     
     QToolBar *toolbar = new QToolBar();
+    add_items(obj, toolbar, left_defaults, items);
+    add_items(obj, toolbar, center_defaults, items);
+    add_items(obj, toolbar, right_defaults, items);
     
     
     return toolbar;
 }
+
+static void add_items(UiObject *obj, QToolBar *toolbar, CxList *defaults, CxMap *items) {
+    CxIterator i = cxListIterator(defaults);
+    cx_foreach(char *, name, i) {
+        UiToolbarItemI *item = (UiToolbarItemI*)cxMapGet(items, name);
+        if(item) {
+            create_item(obj, toolbar, item);
+        } else {
+            fprintf(stderr, "UI Error: unknown toolbar item '%s'\n", name);
+        }
+    }
+}
+
+static void create_item(UiObject *obj, QToolBar *toolbar, UiToolbarItemI *i) {
+    switch(i->type) {
+        case UI_TOOLBAR_ITEM: {
+            ui_toolbar_add_item(obj, toolbar, (UiToolbarItem*)i);
+            break;
+        }
+        case UI_TOOLBAR_TOGGLEITEM: {
+            ui_toolbar_add_toggleitem(obj, toolbar, (UiToolbarToggleItem*)i);
+            break;
+        }
+        case UI_TOOLBAR_MENU: {
+            ui_toolbar_add_menu(obj, toolbar, (UiToolbarMenuItem*)i);
+            break;
+        }
+        default: fprintf(stderr, "toolbar item type unimplemented: %d\n", (int)i->type);
+    }
+}
+
+void ui_toolbar_add_item(UiObject *obj, QToolBar *toolbar, UiToolbarItem *item) {
+    QAction *action = new QAction();
+    action->setText(item->args.label);
+    toolbar->addAction(action);
+}
+
+void ui_toolbar_add_toggleitem(UiObject *obj, QToolBar *toolbar, UiToolbarToggleItem *item) {
+    
+}
+
+void ui_toolbar_add_menu(UiObject *obj, QToolBar *toolbar, UiToolbarMenuItem *item) {
+    
+}
--- a/ui/qt/toolbar.h	Fri Apr 18 11:48:11 2025 +0200
+++ b/ui/qt/toolbar.h	Fri Apr 18 14:56:12 2025 +0200
@@ -36,6 +36,9 @@
 
 QToolBar* ui_create_toolbar(UiObject *obj);
 
+void ui_toolbar_add_item(UiObject *obj, QToolBar *toolbar, UiToolbarItem *item);
+void ui_toolbar_add_toggleitem(UiObject *obj, QToolBar *toolbar, UiToolbarToggleItem *item);
+void ui_toolbar_add_menu(UiObject *obj, QToolBar *toolbar, UiToolbarMenuItem *item);
 
 #endif	/* TOOLBAR_H */
 
--- a/ui/qt/window.cpp	Fri Apr 18 11:48:11 2025 +0200
+++ b/ui/qt/window.cpp	Fri Apr 18 14:56:12 2025 +0200
@@ -51,8 +51,10 @@
     
     if(!simple) {
         ui_add_menus(obj, window);
-        //QToolBar *toolbar = ui_create_toolbar(obj);
-        //window->addToolBar(Qt::TopToolBarArea, toolbar);
+        QToolBar *toolbar = ui_create_toolbar(obj);
+        if(toolbar) {
+            window->addToolBar(Qt::TopToolBarArea, toolbar);
+        }
     }
     
     QBoxLayout *box = new QVBoxLayout();

mercurial