ui/qt/menu.cpp

changeset 516
4b31c74666d7
parent 115
102fc0b8fe3e
child 535
ede57f5b6178
--- a/ui/qt/menu.cpp	Wed Mar 26 20:27:20 2025 +0100
+++ b/ui/qt/menu.cpp	Wed Mar 26 20:39:04 2025 +0100
@@ -40,386 +40,3 @@
 #include "stock.h"
 #include "container.h"
 
-static UcxList *menus;
-static UcxList *current;
-
-/* -------------------------- UiMenu -------------------------- */
-
-UiMenu::UiMenu(char* label) {
-    this->items = NULL;
-    this->label = label;
-}
-
-void UiMenu::addMenuItem(UiMenuItemI* item) {
-    items = ucx_list_append(items, item);
-}
-
-void UiMenu::addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu) {
-    QMenu *m = NULL;
-    if(menubar) {
-        m = menubar->addMenu(label);
-    } else {
-        m = menu->addMenu(label);
-    }
-    
-    UCX_FOREACH(elm, items) {
-        UiMenuItemI *item = (UiMenuItemI*)elm->data;
-        item->addTo(obj, NULL, m);
-    }
-}
-
-
-/* -------------------------- UiMenuItem -------------------------- */
-
-UiMenuItem::UiMenuItem(char* label, ui_callback f, void* userdata) {
-    this->label = label;
-    this->callback = f;
-    this->userdata = userdata;
-    this->groups = NULL;
-}
-
-void UiMenuItem::addGroup(int group) {
-    groups = ucx_list_append(groups, (void*)(intptr_t)group);
-}
-
-void UiMenuItem::setCheckable(bool c) {
-    checkable = c;
-}
-
-void UiMenuItem::addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu) {
-    QString str = QString::fromUtf8(label);
-    UiAction *action = new UiAction(obj, str, callback, userdata);
-    action->setCheckable(checkable);
-    if(checkable) {
-        action->setChecked(false);
-    }
-    menu->addAction(action);
-    QObject::connect(action, SIGNAL(triggered()), action, SLOT(trigger()));
-}
-
-
-/* -------------------------- UiStMenuItem -------------------------- */
-
-UiStMenuItem::UiStMenuItem(char* stockid, ui_callback f, void* userdata) {
-    this->stockid = stockid;
-    this->callback = f;
-    this->userdata = userdata;
-    this->groups = NULL;
-}
-
-void UiStMenuItem::addGroup(int group) {
-    groups = ucx_list_append(groups, (void*)(intptr_t)group);
-}
-
-void UiStMenuItem::addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu) {
-    UiStockItem *stockItem = ui_get_stock_item(stockid);
-    
-    QString str = QString::fromUtf8(stockItem->label);
-    UiAction *action = new UiAction(obj, str, callback, userdata);
-    action->setIcon(QIcon::fromTheme(stockItem->icon_name));
-    action->setIconVisibleInMenu(true);
-    menu->addAction(action);
-    //UiEventWrapper *ev = new UiEventWrapper(callback, userdata);
-    QObject::connect(action, SIGNAL(triggered()), action, SLOT(trigger()));
-}
-
-
-/* -------------------------- UiMenuSeparator -------------------------- */
-
-void UiMenuSeparator::addTo(UiObject* obj, QMenuBar* menubar, QMenu* menu) {
-    menu->addSeparator();
-}
-
-
-/* -------------------------- UiCheckItemNV -------------------------- */
-
-UiCheckItemNV::UiCheckItemNV(char* label, char* varname) {
-    this->label = label;
-    this->varname = varname;
-}
-
-void UiCheckItemNV::addTo(UiObject* obj, QMenuBar* menubar, QMenu* menu) {
-    QString str = QString::fromUtf8(label);
-    UiAction *action = new UiAction(obj, str, NULL, NULL);
-    action->setCheckable(true);
-    menu->addAction(action);
-    QObject::connect(action, SIGNAL(triggered()), action, SLOT(trigger()));
-    
-    UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_INTEGER);
-    if(var) {
-        UiInteger *value = (UiInteger*)var->value;
-        action->setChecked(value->value);
-        value->obj = action;
-        value->get = ui_checkitem_get;
-        value->set = ui_checkitem_set;
-        value = 0;
-    } else {
-        // TODO: error
-    }
-}
-
-
-/* -------------------------- UiAction -------------------------- */
-
-UiAction::UiAction(UiObject *obj, QString &label, ui_callback f, void* userdata) : QAction(label, NULL) {
-    //QAction(label, NULL);
-    this->obj = obj;
-    this->callback = f;
-    this->userdata = userdata;
-}
-
-void UiAction::trigger() {
-    if(!callback) {
-        return;
-    }
-    
-    UiEvent e;
-    e.obj = obj;
-    e.window = obj->window;
-    e.document = obj->ctx->document;
-    e.eventdata = NULL;
-    
-    if(isCheckable()) {
-        e.intval = isChecked();
-    } else {
-        e.intval = 0;
-    }
-    
-    callback(&e, userdata);
-}
-
-
-void ui_menu(char *label) {
-    // free current menu hierarchy
-    ucx_list_free(current);
-    
-    // create menu
-    UiMenu *menu = new UiMenu(label);
-    
-    current = ucx_list_prepend(NULL, menu);
-    menus = ucx_list_append(menus, menu);
-}
-
-void ui_submenu(char *label) {
-    UiMenu *menu = new UiMenu(label);
-    
-    // add submenu to current menu
-    UiMenu *cm = (UiMenu*)current->data;
-    cm->addMenuItem(menu);
-    
-    // set the submenu to current menu
-    current = ucx_list_prepend(current, menu);
-}
-
-void ui_submenu_end() {
-    if(ucx_list_size(current) < 2) {
-        return;
-    }
-    current = ucx_list_remove(current, current);
-    //UcxList *c = current;
-}
-
-
-void ui_menuitem(char *label, ui_callback f, void *userdata) {
-    ui_menuitem_gr(label, f, userdata, -1);
-}
-
-void ui_menuitem_st(char *stockid, ui_callback f, void *userdata) {
-    ui_menuitem_stgr(stockid, f, userdata, -1);
-}
-
-void ui_menuitem_gr(char *label, ui_callback f, void *userdata, ...) {
-    if(!current) {
-        return;
-    }
-    
-    UiMenuItem *item = new UiMenuItem(label, f, userdata);
-    
-    // add groups
-    va_list ap;
-    va_start(ap, userdata);
-    int group;
-    while((group = va_arg(ap, int)) != -1) {
-        item->addGroup(group);
-    }
-    va_end(ap);
-    
-    UiMenu *cm = (UiMenu*)current->data;
-    cm->addMenuItem(item);
-}
-
-void ui_menuitem_stgr(char *stockid, ui_callback f, void *userdata, ...) {
-    if(!current) {
-        return;
-    }
-    
-    UiStMenuItem *item = new UiStMenuItem(stockid, f, userdata);
-    
-    // add groups
-    va_list ap;
-    va_start(ap, userdata);
-    int group;
-    while((group = va_arg(ap, int)) != -1) {
-        item->addGroup(group);
-    }
-    va_end(ap);
-    
-    UiMenu *cm = (UiMenu*)current->data;
-    cm->addMenuItem(item);
-}
-
-void ui_menuseparator() {
-    if(!current) {
-        return;
-    }
-    
-    UiMenuSeparator *item = new UiMenuSeparator();
-    UiMenu *cm = (UiMenu*)current->data;
-    cm->addMenuItem(item);
-}
-
-void ui_checkitem(char *label, ui_callback f, void *userdata) {
-    if(!current) {
-        return;
-    }
-    
-    UiMenuItem *item = new UiMenuItem(label, f, userdata);
-    item->setCheckable(true);
-    
-    UiMenu *cm = (UiMenu*)current->data;
-    cm->addMenuItem(item);
-}
-
-void ui_checkitem_nv(char *label, char *vname) {
-    if(!current) {
-        return;
-    }
-    
-    UiCheckItemNV *item = new UiCheckItemNV(label, vname);
-    
-    UiMenu *cm = (UiMenu*)current->data;
-    cm->addMenuItem(item);
-}
-
-void ui_menuitem_list(UiList *items, ui_callback f, void *userdata) {
-    
-}
-
-void ui_add_menus(UiObject *obj, QMainWindow *window) {
-    QMenuBar *mb = window->menuBar();
-    
-    UCX_FOREACH(elm, menus) {
-        UiMenu *menu = (UiMenu*)elm->data;
-        menu->addTo(obj, mb, NULL);        
-    }
-}
-
-int ui_checkitem_get(UiInteger *i) {
-    QAction *action = (QAction*)i->obj;
-    i->value = action->isChecked();
-    return i->value;
-}
-
-void ui_checkitem_set(UiInteger *i, int value) {
-    QAction *action = (QAction*)i->obj;
-    i->value = value;
-    action->setChecked(value);
-}
-
-
-/*
- * widget menu functions
- */
-
-UiContextMenuHandler::UiContextMenuHandler(QWidget *widget, QMenu* menu) {
-    this->widget = widget;
-    this->menu = menu;
-}
-
-void UiContextMenuHandler::contextMenuEvent(const QPoint & pos) {
-    menu->popup(widget->mapToGlobal(pos));
-}
-UIMENU ui_contextmenu(UiObject *obj) {
-    UiContainer *ct = uic_get_current_container(obj);
-    return ui_contextmenu_w(obj, ct->current);
-}
-
-UIMENU ui_contextmenu_w(UiObject *obj, UIWIDGET widget) {
-    UiContainer *ct = uic_get_current_container(obj);
-    
-    QMenu *menu = new QMenu(widget);
-    widget->setContextMenuPolicy(Qt::CustomContextMenu);
-    
-    UiContextMenuHandler *handler = new UiContextMenuHandler(widget, menu);
-    QObject::connect(
-            widget,
-            SIGNAL(customContextMenuRequested(QPoint)),
-            handler,
-            SLOT(contextMenuEvent(QPoint)));
-    
-    ct->menu = menu;
-    
-    return menu;
-}
-
-void ui_contextmenu_popup(UIMENU menu) {
-    
-}
-
-void ui_widget_menuitem(UiObject *obj, char *label, ui_callback f, void *userdata) {
-    ui_widget_menuitem_gr(obj, label, f, userdata, -1);
-}
-
-void ui_widget_menuitem_gr(UiObject *obj, char *label, ui_callback f, void *userdata, ...) {
-    UiContainer *ct = uic_get_current_container(obj);
-    if(!ct->menu) {
-        return;
-    }
-    
-    // add groups
-    UcxList *groups = NULL;
-    va_list ap;
-    va_start(ap, userdata);
-    int group;
-    while((group = va_arg(ap, int)) != -1) {
-        ucx_list_append(groups, (void*)(intptr_t)group);
-    }
-    va_end(ap);
-    
-    // create menuitem
-    QString str = QString::fromUtf8(label);
-    UiAction *action = new UiAction(obj, str, f, userdata);
-    ct->menu->addAction(action);
-    QObject::connect(action, SIGNAL(triggered()), action, SLOT(trigger()));
-}
-
-void ui_widget_menuitem_st(UiObject *obj, char *stockid, ui_callback f, void *userdata) {
-    ui_widget_menuitem_stgr(obj, stockid, f, userdata, -1);
-}
-
-void ui_widget_menuitem_stgr(UiObject *obj, char *stockid, ui_callback f, void *userdata, ...) {
-    UiContainer *ct = uic_get_current_container(obj);
-    if(!ct->menu) {
-        return;
-    }
-    
-    // add groups
-    UcxList *groups = NULL;
-    va_list ap;
-    va_start(ap, userdata);
-    int group;
-    while((group = va_arg(ap, int)) != -1) {
-        ucx_list_append(groups, (void*)(intptr_t)group);
-    }
-    va_end(ap);
-    
-    // create menuitem
-    UiStockItem *stockItem = ui_get_stock_item(stockid);
-    
-    QString str = QString::fromUtf8(stockItem->label);
-    UiAction *action = new UiAction(obj, str, f, userdata);
-    action->setIcon(QIcon::fromTheme(stockItem->icon_name));
-    action->setIconVisibleInMenu(true);
-    ct->menu->addAction(action);
-    QObject::connect(action, SIGNAL(triggered()), action, SLOT(trigger()));
-}

mercurial