# HG changeset patch # User Olaf Wintermann # Date 1744980972 -7200 # Node ID 19de5292f08f3c7898df6c5dc8a5534cab29e6f6 # Parent 2360c1696a348a28aa5379ce2e376dbf78596bff add toolbar (QT) diff -r 2360c1696a34 -r 19de5292f08f application/main.c --- 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(); diff -r 2360c1696a34 -r 19de5292f08f make/toolchain.sh --- 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__ diff -r 2360c1696a34 -r 19de5292f08f ui/qt/toolbar.cpp --- 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) { + +} diff -r 2360c1696a34 -r 19de5292f08f ui/qt/toolbar.h --- 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 */ diff -r 2360c1696a34 -r 19de5292f08f ui/qt/window.cpp --- 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();