--- a/ui/qt/menu.cpp Sun Mar 30 11:28:24 2025 +0200 +++ b/ui/qt/menu.cpp Sun Mar 30 12:00:26 2025 +0200 @@ -35,8 +35,86 @@ #include "menu.h" #include "toolkit.h" #include "../common/context.h" +#include "../common/menu.h" #include "../ui/properties.h" #include "../ui/window.h" #include "stock.h" #include "container.h" + +static ui_menu_add_f createMenuItem[] = { + /* UI_MENU */ add_menu_widget, + /* UI_MENU_ITEM */ add_menuitem_widget, + /* UI_MENU_CHECK_ITEM */ add_checkitem_widget, + /* UI_MENU_RADIO_ITEM */ add_radioitem_widget, + /* UI_MENU_ITEM_LIST */ add_menuitem_list_widget, + /* UI_MENU_CHECKITEM_LIST */ add_menuitem_list_widget, + /* UI_MENU_RADIOITEM_LIST */ add_menuitem_list_widget, + /* UI_MENU_SEPARATOR */ add_menuseparator_widget +}; + +static void add_menu_items(QMenu *parent, int i, UiMenu *menu, UiObject *obj) { + UiMenuItemI *it = menu->items_begin; + int index = 0; + while(it) { + createMenuItem[it->type](parent, index, it, obj); + it = it->next; + index++; + } +} + +void add_menu_widget(QMenu *parent, int i, UiMenuItemI *item, UiObject *obj) { + UiMenu *m = (UiMenu*)item; + QMenu *menu = parent->addMenu(m->label); + add_menu_items(menu, i, m, obj); +} + +void add_menuitem_widget(QMenu *parent, int i, UiMenuItemI *item, UiObject *obj) { + UiMenuItem *it = (UiMenuItem*)item; + QString str = QString::fromUtf8(it->label); + UiAction *action = new UiAction(obj, str, it->callback, it->userdata); + action->setIcon(QIcon::fromTheme(it->icon)); + action->setIconVisibleInMenu(true); + parent->addAction(action); + QObject::connect(action, SIGNAL(triggered()), action, SLOT(trigger())); +} + +void add_menuseparator_widget(QMenu *parent, int i, UiMenuItemI *item, UiObject *obj) { + parent->addSeparator(); +} + +void add_checkitem_widget(QMenu *parent, int i, UiMenuItemI *item, UiObject *obj) { + +} + +void add_radioitem_widget(QMenu *parent, int index, UiMenuItemI *item, UiObject *obj) { + +} + +void add_checkitemnv_widget(QMenu *parent, int i, UiMenuItemI *item, UiObject *obj) { + +} + +void add_menuitem_list_widget(QMenu *parent, int i, UiMenuItemI *item, UiObject *obj) { + +} + + +void ui_add_menus(UiObject *obj, QMainWindow *window) { + UiMenu *menus_begin = uic_get_menu_list(); + if(menus_begin == NULL) { + return; + } + + QMenuBar *mb = window->menuBar(); + + UiMenu *ls = menus_begin; + while(ls) { + if(ls->item.type == UI_MENU) { + QMenu *menu = mb->addMenu(ls->label); + add_menu_items(menu, 0, ls, obj); + } + ls = (UiMenu*)ls->item.next; + } +} +