7 days ago
remove old Qt code
--- a/application/main.c Wed Mar 26 20:27:20 2025 +0100 +++ b/application/main.c Wed Mar 26 20:39:04 2025 +0100 @@ -37,7 +37,7 @@ #include "cx/string.h" #include "cx/list.h" -#if !defined(UI_COCOA) && !defined(UI_MOTIF) && !defined(UI_WIN32) +#if !defined(UI_COCOA) && !defined(UI_MOTIF) && !defined(UI_WIN32) && !defined(UI_QT) typedef struct { UiString *str1; @@ -771,6 +771,14 @@ #endif +#ifdef UI_QT + +int main(int argc, char **argv) { + return 0; +} + +#endif + #ifdef UI_WIN32 int main(int argc, char **argv) {
--- a/ui/qt/button.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/button.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -30,61 +30,3 @@ #include "container.h" #include "toolkit.h" -UIWIDGET ui_button(UiObject *obj, char *label, ui_callback f, void *data) { - QString str = QString::fromUtf8(label); - QPushButton *button = new QPushButton(str); - - if(f) { - UiEventWrapper *event = new UiEventWrapper(obj, f, data); - button->connect(button, SIGNAL(clicked()), event, SLOT(slot())); - } - - UiContainer *ct = uic_get_current_container(obj); - ct->add(button, false); - - return button; -} - - - -// TODO: checkbox - - -UIWIDGET ui_radiobutton(UiObject *obj, char *label, UiInteger *rgroup) { - QString str = QString::fromUtf8(label); - QRadioButton *button = new QRadioButton(str); - button->setAutoExclusive(false); - - if(rgroup) { - QButtonGroup *buttonGroup = (QButtonGroup*)rgroup->obj; - if(!buttonGroup) { - buttonGroup = new QButtonGroup(); - rgroup->obj = buttonGroup; - button->setChecked(true); - } - buttonGroup->addButton(button, buttonGroup->buttons().size()); - - rgroup->get = ui_radiobutton_get; - rgroup->set = ui_radiobutton_set; - } - - UiContainer *ct = uic_get_current_container(obj); - ct->add(button, false); - - return button; -} - -int ui_radiobutton_get(UiInteger *value) { - QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; - value->value = buttonGroup->checkedId(); - return value->value; -} - -void ui_radiobutton_set(UiInteger *value, int i) { - QButtonGroup *buttonGroup = (QButtonGroup*)value->obj; - QAbstractButton *button = buttonGroup->button(i); - if(button) { - button->setChecked(true); - value->value = i; - } -}
--- a/ui/qt/button.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/button.h Wed Mar 26 20:39:04 2025 +0100 @@ -37,9 +37,9 @@ extern "C" { -int ui_radiobutton_get(UiInteger *value); +int64_t ui_radiobutton_get(UiInteger *value); -void ui_radiobutton_set(UiInteger *value, int i); +void ui_radiobutton_set(UiInteger *value, int64_t i); }
--- a/ui/qt/container.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/container.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -33,224 +33,3 @@ #include <QStackedWidget> -/* -------------------- UiBoxContainer -------------------- */ - -UiBoxContainer::UiBoxContainer(QBoxLayout* box) { - this->current = NULL; - this->menu = NULL; - this->box = box; - box->setContentsMargins(QMargins(0,0,0,0)); - box->setSpacing(0); - - ui_reset_layout(layout); -} - -void UiBoxContainer::add(QWidget* widget, bool fill) { - if(layout.fill != UI_LAYOUT_UNDEFINED) { - fill = ui_lb2bool(layout.fill); - } - - if(hasStretchedWidget && fill) { - fill = false; - fprintf(stderr, "UiError: container has 2 filled widgets"); - } - - box->addWidget(widget, fill); - - if(!hasStretchedWidget) { - QSpacerItem *newspace = new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - box->removeItem(space); - box->addSpacerItem(newspace); - space = newspace; - } - - if(fill) { - hasStretchedWidget = true; - } - ui_reset_layout(layout); - current = widget; -} - -UIWIDGET ui_box(UiObject *obj, QBoxLayout::Direction dir) { - UiContainer *ct = uic_get_current_container(obj); - QWidget *widget = new QWidget(); - QBoxLayout *box = new QBoxLayout(dir); - widget->setLayout(box); - ct->add(widget, true); - - UiObject *newobj = uic_object_new(obj, widget); - newobj->container = new UiBoxContainer(box); - uic_obj_add(obj, newobj); - - return widget; -} - -UIWIDGET ui_vbox(UiObject *obj) { - return ui_box(obj, QBoxLayout::TopToBottom); -} - -UIWIDGET ui_hbox(UiObject *obj) { - return ui_box(obj, QBoxLayout::LeftToRight); -} - - - -/* -------------------- UiGridContainer -------------------- */ - -UiGridContainer::UiGridContainer(QGridLayout* grid, int margin, int columnspacing, int rowspacing) { - this->current = NULL; - this->menu = NULL; - this->grid = grid; - grid->setContentsMargins(QMargins(margin, margin, margin, margin)); - grid->setHorizontalSpacing(columnspacing); - grid->setVerticalSpacing(rowspacing); - ui_reset_layout(layout); -} - -void UiGridContainer::add(QWidget* widget, bool fill) { - if(layout.newline) { - x = 0; - y++; - } - - Qt::Alignment alignment = Qt::AlignTop; - grid->setColumnStretch(x, layout.hexpand ? 1 : 0); - if(layout.vexpand) { - grid->setRowStretch(y, 1); - alignment = 0; - } else { - grid->setRowStretch(y, 0); - } - - int gwidth = layout.gridwidth > 0 ? layout.gridwidth : 1; - - grid->addWidget(widget, y, x, 1, gwidth, alignment); - x += gwidth; - - ui_reset_layout(layout); - current = widget; -} - -UIWIDGET ui_grid(UiObject *obj) { - return ui_grid_sp(obj, 0, 0, 0); -} - -UIWIDGET ui_grid_sp(UiObject *obj, int margin, int columnspacing, int rowspacing) { - UiContainer *ct = uic_get_current_container(obj); - QWidget *widget = new QWidget(); - QGridLayout *grid = new QGridLayout(); - widget->setLayout(grid); - ct->add(widget, true); - - UiObject *newobj = uic_object_new(obj, widget); - newobj->container = new UiGridContainer(grid, margin, columnspacing, rowspacing); - uic_obj_add(obj, newobj); - - return widget; -} - - -/* -------------------- UiTabViewContainer -------------------- */ - -UiTabViewContainer::UiTabViewContainer(QTabWidget* tabwidget) { - this->current = NULL; - this->menu = NULL; - this->tabwidget = tabwidget; -} - -void UiTabViewContainer::add(QWidget* widget, bool fill) { - QString str = QString::fromUtf8(layout.label); - tabwidget->addTab(widget, str); -} - - -/* -------------------- UiStackContainer -------------------- */ - -UiStackContainer::UiStackContainer(QStackedWidget *stack) { - this->stack = stack; -} - -void UiStackContainer::add(QWidget* widget, bool fill) { - stack->addWidget(widget); - current = widget; -} - -UIWIDGET ui_tabview(UiObject *obj) { - QStackedWidget *tabwidget = new QStackedWidget(); - - UiContainer *ct = uic_get_current_container(obj); - ct->add(tabwidget, true); - - UiObject *tabviewobj = uic_object_new(obj, tabwidget); - tabviewobj->container = new UiStackContainer(tabwidget); - uic_obj_add(obj, tabviewobj); - - return tabwidget; -} - -void ui_tab(UiObject *obj, char *title) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.label = title; - ui_vbox(obj); -} - -void ui_select_tab(UIWIDGET tabview, int tab) { - QStackedWidget *w = (QStackedWidget*)tabview; - w->setCurrentIndex(tab); -} - - -/* -------------------- UiSidebarContainer -------------------- */ - -UiSidebarContainer::UiSidebarContainer(QSplitter *splitter) { - this->splitter = splitter; -} - -UIWIDGET ui_sidebar(UiObject *obj) { - QSplitter *splitter = new QSplitter(Qt::Horizontal); - UiContainer *ct = uic_get_current_container(obj); - ct->add(splitter, true); - - UiObject *left = uic_object_new(obj, splitter); - left->container = new UiSidebarContainer(splitter); - - UiObject *right = uic_object_new(obj, splitter); - right->container = new UiSidebarContainer(splitter); - - uic_obj_add(obj, right); - uic_obj_add(obj, left); - - return splitter; -} - -void UiSidebarContainer::add(QWidget *widget, bool fill) { - splitter->addWidget(widget); -} - - -/* -------------------- layout functions -------------------- */ - -void ui_layout_fill(UiObject *obj, UiBool fill) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.fill = ui_bool2lb(fill); -} - -void ui_layout_hexpand(UiObject *obj, UiBool expand) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.hexpand = expand; -} - -void ui_layout_vexpand(UiObject *obj, UiBool expand) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.vexpand = expand; -} - -void ui_layout_gridwidth(UiObject *obj, int width) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.gridwidth = width; -} - -void ui_newline(UiObject *obj) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.newline = TRUE; -}
--- a/ui/qt/container.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/container.h Wed Mar 26 20:39:04 2025 +0100 @@ -39,81 +39,8 @@ #include <QStackedWidget> #include <QSplitter> -#define ui_lb2bool(b) ((b) == UI_LAYOUT_TRUE ? TRUE : FALSE) -#define ui_bool2lb(b) ((b) ? UI_LAYOUT_TRUE : UI_LAYOUT_FALSE) -#define ui_reset_layout(layout) memset(&(layout), 0, sizeof(UiLayout)) - -typedef struct UiLayout UiLayout; - -enum UiLayoutBool { - UI_LAYOUT_UNDEFINED = 0, - UI_LAYOUT_TRUE, - UI_LAYOUT_FALSE, -}; -typedef enum UiLayoutBool UiLayoutBool; - -struct UiLayout { - UiLayoutBool fill; - bool newline; - char *label; - bool hexpand; - bool vexpand; - int gridwidth; -}; - -struct UiContainer { - UiLayout layout; - UIWIDGET current; - QMenu *menu; - - virtual void add(QWidget *widget, bool fill) = 0; -}; -class UiBoxContainer : public UiContainer { -public: - QBoxLayout *box; - bool hasStretchedWidget = false; - QSpacerItem *space; - - UiBoxContainer(QBoxLayout *box); - - virtual void add(QWidget *widget, bool fill); -}; -class UiGridContainer : public UiContainer { -public: - QGridLayout *grid; - int x = 0; - int y = 0; - - UiGridContainer(QGridLayout *grid, int margin, int columnspacing, int rowspacing); - - virtual void add(QWidget *widget, bool fill); -}; - -class UiTabViewContainer : public UiContainer { -public: - QTabWidget *tabwidget; - - UiTabViewContainer(QTabWidget *tabwidget); - virtual void add(QWidget *widget, bool fill); -}; - -class UiStackContainer : public UiContainer { -public: - QStackedWidget *stack; - - UiStackContainer(QStackedWidget *stack); - virtual void add(QWidget *widget, bool fill); -}; - -class UiSidebarContainer : public UiContainer { -public: - QSplitter *splitter; - - UiSidebarContainer(QSplitter *splitter); - virtual void add(QWidget *widget, bool fill); -}; #endif /* CONTAINER_H */
--- a/ui/qt/graphics.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/graphics.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -30,122 +30,4 @@ #include "container.h" -DrawingArea::DrawingArea(UiObject *obj, ui_drawfunc cb, void *data) { - object = obj; - drawCallback = cb; - userdata = data; -} -DrawingArea::~DrawingArea() { - -} - -void DrawingArea::paintEvent(QPaintEvent *event) { - QPainter painter(this); - - UiQtGraphics g; - g.g.width = this->width(); - g.g.height = this->height(); - g.painter = &painter; - - UiEvent ev; - ev.obj = object; - ev.window = object->window; - ev.document = object->ctx->document; - ev.eventdata = NULL; - ev.intval = 0; - - drawCallback(&ev, &g.g, userdata); -} - - - -UIWIDGET ui_drawingarea(UiObject *obj, ui_drawfunc f, void *userdata) { - DrawingArea *widget = new DrawingArea(obj, f, userdata); - - UiContainer *ct = uic_get_current_container(obj); - ct->add(widget, true); - - return widget; -} - -void ui_drawingarea_mousehandler(UiObject *obj, UIWIDGET widget, ui_callback f, void *u) { - -} - -void ui_drawingarea_getsize(UIWIDGET drawingarea, int *width, int *height) { - -} - -void ui_drawingarea_redraw(UIWIDGET drawingarea) { - -} - - -/* -------------------- text layout functions -------------------- */ - -UiTextLayout* ui_text(UiGraphics *g) { - UiTextLayout *textlayout = new UiTextLayout(); - return textlayout; -} - -void ui_text_free(UiTextLayout *text) { - delete text; -} - -void ui_text_setstring(UiTextLayout *layout, char *str) { - layout->text.setText(QString::fromUtf8(str)); -} - -void ui_text_setstringl(UiTextLayout *layout, char *str, int len) { - layout->text.setText(QString::fromUtf8(str, len)); -} - -void ui_text_setfont(UiTextLayout *layout, char *font, int size) { - layout->font = QFont(QString::fromUtf8(font), size); -} - -void ui_text_getsize(UiTextLayout *layout, int *width, int *height) { - QSizeF size = layout->text.size(); - *width = (int)size.width(); - *height = (int)size.height(); -} - -void ui_text_setwidth(UiTextLayout *layout, int width) { - layout->text.setTextWidth((qreal)width); -} - - -/* -------------------- drawing functions -------------------- */ - -void ui_graphics_color(UiGraphics *g, int red, int green, int blue) { - UiQtGraphics *gr = (UiQtGraphics*)g; - gr->color = QColor(red, green, blue); - gr->painter->setPen(gr->color); -} - -void ui_draw_line(UiGraphics *g, int x1, int y1, int x2, int y2) { - UiQtGraphics *gr = (UiQtGraphics*)g; - - gr->painter->drawLine(x1, y1, x2, y2); -} - -void ui_draw_rect(UiGraphics *g, int x, int y, int w, int h, int fill) { - UiQtGraphics *gr = (UiQtGraphics*)g; - - QRect rect(x, y, w, h); - if(fill) { - gr->painter->fillRect(rect, gr->color); - - } else { - gr->painter->drawRect(rect); - } -} - -void ui_draw_text(UiGraphics *g, int x, int y, UiTextLayout *text) { - UiQtGraphics *gr = (UiQtGraphics*)g; - - gr->painter->setFont(text->font); - gr->painter->drawStaticText(x, y, text->text); -} -
--- a/ui/qt/graphics.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/graphics.h Wed Mar 26 20:39:04 2025 +0100 @@ -37,31 +37,6 @@ #include <QColor> #include <QStaticText> -typedef struct UiQtGraphics { - UiGraphics g; - QPainter *painter; - QColor color; -} UiXlibGraphics; - -struct UiTextLayout { - QStaticText text; - QFont font; -}; - - -class DrawingArea : public QWidget { - Q_OBJECT - - UiObject *object; - ui_drawfunc drawCallback; - void *userdata; - -public: - DrawingArea(UiObject *obj, ui_drawfunc cb, void *data); - ~DrawingArea(); - - virtual void paintEvent(QPaintEvent * event); -}; #endif /* GRAPHICS_H */
--- a/ui/qt/label.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/label.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -30,22 +30,3 @@ #include "container.h" #include "toolkit.h" -UIWIDGET ui_label(UiObject *obj, char *label) { - QString str = QString::fromUtf8(label); - QLabel *widget = new QLabel(str); - - UiContainer *ct = uic_get_current_container(obj); - ct->add(widget, false); - - return widget; -} - -UIWIDGET ui_space(UiObject *obj) { - // TODO: maybe there is a better widget for this purpose - QLabel *widget = new QLabel(); - - UiContainer *ct = uic_get_current_container(obj); - ct->add(widget, true); - - return widget; -}
--- 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())); -}
--- a/ui/qt/menu.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/menu.h Wed Mar 26 20:39:04 2025 +0100 @@ -30,105 +30,13 @@ #define MENU_H #include "../ui/menu.h" -#include <ucx/list.h> #include <QMainWindow> #include <QMenu> #include <QMenuBar> #include <QContextMenuEvent> -class UiMenuItemI { -public: - virtual void addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu) = 0; -}; -class UiMenu : public UiMenuItemI { -public: - - UcxList *items; - char *label; - - UiMenu(char *label); - - void addMenuItem(UiMenuItemI *item); - - virtual void addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu); -}; - -class UiMenuItem : public UiMenuItemI { - char *label; - ui_callback callback; - void *userdata; - UcxList *groups; - bool checkable = false; - -public: - UiMenuItem(char *label, ui_callback f, void *userdata); - void addGroup(int group); - void setCheckable(bool c); - - virtual void addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu); -}; - -class UiStMenuItem : public UiMenuItemI { - char *stockid; - ui_callback callback; - void *userdata; - UcxList *groups; - -public: - UiStMenuItem(char *stockid, ui_callback f, void *userdata); - void addGroup(int group); - - virtual void addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu); -}; - -class UiMenuSeparator : public UiMenuItemI { -public: - virtual void addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu); -}; - -class UiCheckItemNV : public UiMenuItemI { - char *label; - char *varname; - -public: - UiCheckItemNV(char *label, char *varname); - virtual void addTo(UiObject *obj, QMenuBar *menubar, QMenu *menu); -}; - - -class UiAction : public QAction { - Q_OBJECT - - UiObject *obj; - ui_callback callback; - void *userdata; - -public: - UiAction(UiObject *obj, QString &label, ui_callback f, void *userdata); - -private slots: - void trigger(); -}; - -void ui_add_menus(UiObject *obj, QMainWindow *window); - -extern "C" int ui_checkitem_get(UiInteger *i); -extern "C" void ui_checkitem_set(UiInteger *i, int value); - -class UiContextMenuHandler : public QObject { - Q_OBJECT - - QWidget *widget; - QMenu *menu; - -public: - UiContextMenuHandler(QWidget *widget, QMenu *menu); - -public slots: - void contextMenuEvent(const QPoint & pos); -}; #endif /* MENU_H */
--- a/ui/qt/model.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/model.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -28,143 +28,3 @@ #include "model.h" -UiListSelection* listSelection(QItemSelectionModel *s) { - UiListSelection *selection = new UiListSelection(); - - QModelIndexList list = s->selectedRows(); - selection->count = list.count(); - if(selection->count > 0) { - selection->rows = new int[selection->count]; - } - - QModelIndex index; - int i=0; - foreach(index, list) { - selection->rows[i] = index.row(); - i++; - } - return selection; -} - -ListModel::ListModel(UiObject* obj, QListView* view, UiListPtr* list, ui_model_getvalue_f getvalue, ui_callback f, void* userdata) { - this->obj = obj; - this->view = view; - this->list = list; - this->getvalue = getvalue; - this->callback = f; - this->userdata = userdata; -} - -int ListModel::rowCount(const QModelIndex& parent) const { - return list->list->count(list->list); -} - -QVariant ListModel::data(const QModelIndex &index, int role) const { - if(role == Qt::DisplayRole) { - UiList *ls = list->list; - void *rowData = ls->get(ls, index.row()); - if(rowData && getvalue) { - void *value = getvalue(rowData, 0); - return QString::fromUtf8((char*)value); - } - } - return QVariant(); -} - -void ListModel::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) { - UiListSelection *selection = listSelection(view->selectionModel()); - - UiEvent e; - e.obj = obj; - e.window = obj->window; - e.document = obj->ctx->document; - e.eventdata = selection; - e.intval = selection->count > 0 ? selection->rows[0] : -1; - callback(&e, userdata); - - if(selection->count > 0) { - delete selection->rows; - } - delete selection; -} - -TableModel::TableModel(UiObject *obj, QTreeView *view, UiListPtr *list, UiModelInfo *info) { - this->obj = obj; - this->list = list; - this->info = info; - this->view = view; -} - -int TableModel::rowCount(const QModelIndex &parent) const { - return list->list->count(list->list); -} - -int TableModel::columnCount(const QModelIndex &parent) const { - return info->columns; -} - -QVariant TableModel::data(const QModelIndex &index, int role) const { - if(role == Qt::DisplayRole) { - UiList *ls = list->list; - void *rowData = ls->get(ls, index.row()); - if(rowData && info->getvalue) { - void *value = info->getvalue(rowData, index.column()); - switch(info->types[index.column()]) { - case UI_STRING: { - return QString::fromUtf8((char*)value); - } - case UI_INTEGER: { - int *intptr = (int*)value; - return QVariant(*intptr); - } - } - } - } - return QVariant(); -} - -QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const { - if(role == Qt::DisplayRole) { - char *label = info->titles[section]; - return QString::fromUtf8(label); - } - return QVariant(); -} - -void TableModel::update() { - emit dataChanged(QModelIndex(),QModelIndex()); -} - -void TableModel::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) { - UiListSelection *selection = listSelection(view->selectionModel()); - - UiEvent e; - e.obj = obj; - e.window = obj->window; - e.document = obj->ctx->document; - e.eventdata = selection; - e.intval = selection->count > 0 ? selection->rows[0] : -1; - info->selection(&e, info->userdata); - - if(selection->count > 0) { - delete selection->rows; - } - delete selection; -} - -void TableModel::activate(const QModelIndex &) { - UiListSelection *selection = listSelection(view->selectionModel()); - - UiEvent e; - e.obj = obj; - e.window = obj->window; - e.document = obj->ctx->document; - e.eventdata = selection; - e.intval = selection->count > 0 ? selection->rows[0] : -1; - info->activate(&e, info->userdata); - - if(selection->count > 0) { - delete selection->rows; - } - delete selection; -}
--- a/ui/qt/model.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/model.h Wed Mar 26 20:39:04 2025 +0100 @@ -39,53 +39,6 @@ #include <QAbstractItemModel> #include <QItemSelectionModel> -class ListModel : public QAbstractListModel { - Q_OBJECT - - UiObject *obj; - UiListPtr *list; - ui_model_getvalue_f getvalue; - ui_callback callback; - void *userdata; - QListView *view; - -public: - ListModel(UiObject *obj, QListView *view, UiListPtr *list, ui_model_getvalue_f getvalue, ui_callback f, void *userdata); - - int rowCount(const QModelIndex &parent = QModelIndex()) const; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - -public slots: - void selectionChanged( - const QItemSelection & selected, - const QItemSelection & deselected); -}; - -class TableModel : public QAbstractTableModel { - Q_OBJECT - - UiObject *obj; - UiListPtr *list; - UiModelInfo *info; - QTreeView *view; -public: - TableModel(UiObject *obj, QTreeView *view, UiListPtr *list, UiModelInfo *info); - - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - QVariant headerData(int section, Qt::Orientation orientation, int role) const; - - void update(); - -public slots: - void selectionChanged( - const QItemSelection & selected, - const QItemSelection & deselected); - void activate(const QModelIndex &); -}; - -UiListSelection* listSelection(QItemSelectionModel *s); #endif /* MODEL_H */
--- a/ui/qt/stock.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/stock.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -26,52 +26,10 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <ucx/map.h> #include "stock.h" #include "../ui/properties.h" -static UcxMap *stock_items; - -void ui_stock_init() { - stock_items = ucx_map_new(64); - - ui_add_stock_item(UI_STOCK_NEW, "New", "document-new"); - ui_add_stock_item(UI_STOCK_OPEN, "Open", "document-open"); - ui_add_stock_item(UI_STOCK_SAVE, "Save", "document-save"); - ui_add_stock_item(UI_STOCK_SAVE_AS, "Save as ...", "document-save-as"); - ui_add_stock_item(UI_STOCK_REVERT_TO_SAVED, "Revert to saved", "document-revert"); - ui_add_stock_item(UI_STOCK_CLOSE, "Close", "window-close"); - ui_add_stock_item(UI_STOCK_UNDO, "Undo", "edit-undo"); - ui_add_stock_item(UI_STOCK_REDO, "Redo", "edit-redo"); - ui_add_stock_item(UI_STOCK_GO_BACK, "Back", "go-previous"); - ui_add_stock_item(UI_STOCK_GO_FORWARD, "Forward", "go-next"); - ui_add_stock_item(UI_STOCK_CUT, "Cut", "edit-cut"); - ui_add_stock_item(UI_STOCK_COPY, "Copy", "edit-copy"); - ui_add_stock_item(UI_STOCK_PASTE, "Paste", "edit-paste"); - ui_add_stock_item(UI_STOCK_DELETE, "Delete", "edit-delete"); -} - -void ui_add_stock_item(char *id, char *label, char *icon) { - UiStockItem *item = new UiStockItem(label, icon); - ucx_map_cstr_put(stock_items, id, item); -} - -UiStockItem* ui_get_stock_item(char *id) { - UiStockItem *item = (UiStockItem*)ucx_map_cstr_get(stock_items, id); - if(item) { - char *label = uistr_n(id); - if(label) { - item->label = label; - } - } - return item; -} -UiStockItem::UiStockItem(char* label, char* icon_name) { - this->label = label; - this->icon_name = icon_name; -} -
--- a/ui/qt/stock.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/stock.h Wed Mar 26 20:39:04 2025 +0100 @@ -31,19 +31,7 @@ #include "../ui/stock.h" -class UiStockItem { -public: - - char *label; - char *icon_name; - - UiStockItem(char *label, char *icon_name); -}; -void ui_stock_init(); -void ui_add_stock_item(char *id, char *label, char *icon); -UiStockItem* ui_get_stock_item(char *id); - #endif /* STOCK_H */
--- a/ui/qt/text.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/text.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -32,164 +32,4 @@ #include "../common/context.h" #include "../common/document.h" -UIWIDGET ui_textarea(UiObject *obj, UiText *value) { - QTextDocument *txtdoc = value && value->obj ? (QTextDocument*)value->obj : new QTextDocument(); - - if(value) { - if(value->value && value->obj) { - QString str = QString::fromUtf8(value->value); - txtdoc->setPlainText(str); - } - - value->get = ui_textarea_get; - value->set = ui_textarea_set; - value->getsubstr = ui_textarea_getsubstr; - value->insert = ui_textarea_insert; - value->setposition = ui_textarea_setposition; - value->position = ui_textarea_position; - value->selection = ui_textarea_selection; - value->length = ui_textarea_length; - value->remove = ui_textarea_remove; - value->obj = txtdoc; - value->value = NULL; - } - - UiContainer *ct = uic_get_current_container(obj); - QTextEdit *textedit = new QTextEdit(); - textedit->setDocument(txtdoc); - ct->add(textedit, true); - - return textedit; -} -UIWIDGET ui_textarea_nv(UiObject *obj, char *varname) { - UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_TEXT); - if(var) { - UiText *value = (UiText*)var->value; - return ui_textarea(obj, value); - } else { - // TODO: error - } - return NULL; -} - - -char* ui_textarea_get(UiText *text) { - if(text->value) { - free(text->value); - } - - QTextDocument *doc = (QTextDocument*)text->obj; - QString str = doc->toPlainText(); - QByteArray array = str.toLocal8Bit(); - const char *cstr = array.constData(); - - if(text->value) { - free(text->value); - } - text->value = strdup(cstr); - return text->value; -} - -void ui_textarea_set(UiText *text, char *str) { - // set text - QTextDocument *doc = (QTextDocument*)text->obj; - QString qstr = QString::fromUtf8(str); - doc->setPlainText(qstr); - // cleanup - if(text->value) { - free(text->value); - } - text->value = NULL; -} - -char* ui_textarea_getsubstr(UiText *text, int begin, int end) { - QTextDocument *doc = (QTextDocument*)text->obj; - return NULL; // TODO -} - -void ui_textarea_insert(UiText *text, int pos, char *str) { - QTextDocument *doc = (QTextDocument*)text->obj; -} - -void ui_textarea_setposition(UiText *text, int pos) { - // TODO -} - -int ui_textarea_position(UiText *text) { - QTextDocument *doc = (QTextDocument*)text->obj; - return 0; // TODO -} - -void ui_textarea_selection(UiText *text, int *begin, int *end) { - QTextDocument *doc = (QTextDocument*)text->obj; -} - -int ui_textarea_length(UiText *text) { - QTextDocument *doc = (QTextDocument*)text->obj; - return 0; // TODO -} - -void ui_textarea_remove(UiText *text, int begin, int end) { - QTextDocument *doc = (QTextDocument*)text->obj; -} - - -/* ------------------- TextField ------------------- */ - -UIWIDGET ui_textfield(UiObject *obj, UiString *value) { - QLineEdit *textfield = new QLineEdit(); - - UiContainer *ct = uic_get_current_container(obj); - ct->add(textfield, false); - - if(value) { - if(value->value) { - QString str = QString::fromUtf8(value->value); - textfield->setText(str); - free(value->value); - value->value = NULL; - } - value->set = ui_textfield_set; - value->get = ui_textfield_get; - value->obj = textfield; - } - - return textfield; -} - -UIWIDGET ui_textfield_nv(UiObject *obj, char *varname) { - UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_STRING); - if(var) { - UiString *value = (UiString*)var->value; - return ui_textfield(obj, value); - } else { - // TODO: error - } - return NULL; -} - -char* ui_textfield_get(UiString *str) { - QLineEdit *textfield = (QLineEdit*)str->obj; - QString qstr = textfield->text(); - - if(str->value) { - free(str->value); - } - QByteArray array = qstr.toLocal8Bit(); - const char *cstr = array.constData(); - str->value = strdup(cstr); - - return str->value; -} - -void ui_textfield_set(UiString *str, char *value) { - QLineEdit *textfield = (QLineEdit*)str->obj; - QString qstr = QString::fromUtf8(value); - textfield->setText(qstr); - - if(str->value) { - free(str->value); - } - str->value = NULL; -}
--- a/ui/qt/text.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/text.h Wed Mar 26 20:39:04 2025 +0100 @@ -36,18 +36,8 @@ // value implementations extern "C" { - char* ui_textarea_get(UiText *text); - void ui_textarea_set(UiText *text, char *str); - char* ui_textarea_getsubstr(UiText *text, int begin, int end); - void ui_textarea_insert(UiText *text, int pos, char *str); - void ui_textarea_setposition(UiText *text, int pos); - int ui_textarea_position(UiText *text); - void ui_textarea_selection(UiText *text, int *begin, int *end); - int ui_textarea_length(UiText *text); - void ui_textarea_remove(UiText *text, int begin, int end); + - char* ui_textfield_get(UiString *str); - void ui_textfield_set(UiString *str, char *value); }
--- a/ui/qt/toolbar.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/toolbar.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -26,140 +26,9 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <ucx/map.h> #include <inttypes.h> #include "toolbar.h" #include "menu.h" #include "stock.h" -static UcxMap *toolbar_items = ucx_map_new(16); -static UcxList *defaults; - -/* ------------------------- UiToolItem ------------------------- */ - -UiToolItem::UiToolItem(char *label, ui_callback f, void *userdata) { - this->label = label; - this->image = NULL; - this->callback = f; - this->userdata = userdata; - this->isimportant = false; - this->groups = NULL; -} - -void UiToolItem::addGroup(int group) { - groups = ucx_list_append(groups, (void*)(intptr_t)group); -} - -void UiToolItem::addTo(UiObject *obj, QToolBar *toolbar) { - QString str = QString::fromUtf8(label); - UiAction *action = new UiAction(obj, str, callback, userdata); - action->setIcon(QIcon::fromTheme(image)); - toolbar->addAction(action); - QObject::connect(action, SIGNAL(triggered()), action, SLOT(trigger())); -} - - -/* ------------------------- UiStockToolItem ------------------------- */ - -UiStockToolItem::UiStockToolItem(char *stockid, ui_callback f, void *userdata) { - this->stockid = stockid; - this->callback = f; - this->userdata = userdata; - this->isimportant = false; - this->groups = NULL; -} - -void UiStockToolItem::addGroup(int group) { - groups = ucx_list_append(groups, (void*)(intptr_t)group); -} - -void UiStockToolItem::addTo(UiObject *obj, QToolBar *toolbar) { - 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)); - toolbar->addAction(action); - QObject::connect(action, SIGNAL(triggered()), action, SLOT(trigger())); -} - - - -void ui_toolitem_vstgr( - char *name, - char *stockid, - int isimportant, - ui_callback f, - void *userdata, - va_list ap) -{ - UiStockToolItem *item = new UiStockToolItem(stockid, f, userdata); - item->isimportant = isimportant; - - // add groups - int group; - while((group = va_arg(ap, int)) != -1) { - item->addGroup(group); - } - - ucx_map_cstr_put(toolbar_items, name, item); -} - -void ui_toolitem_img(char *name, char *label, char *img, ui_callback f, void *udata) { - UiToolItem *item = new UiToolItem(label, f, udata); - item->image = img; - item->isimportant = false; - - ucx_map_cstr_put(toolbar_items, name, item); -} - -void ui_toolitem(char *name, char *label, ui_callback f, void *udata) { - ui_toolitem_img(name, label, NULL, f, udata); -} - -void ui_toolitem_st(char *name, char *stockid, ui_callback f, void *userdata) { - ui_toolitem_stgr(name, stockid, f, userdata, -1); -} - -void ui_toolitem_sti(char *name, char *stockid, ui_callback f, void *userdata) { - ui_toolitem_stgri(name, stockid, f, userdata, -1); -} - -void ui_toolitem_stgr(char *name, char *stockid, ui_callback f, void *userdata, ...) { - va_list ap; - va_start(ap, userdata); - ui_toolitem_vstgr(name, stockid, 0, f, userdata, ap); - va_end(ap); -} - -void ui_toolitem_stgri(char *name, char *stockid, ui_callback f, void *userdata, ...) { - va_list ap; - va_start(ap, userdata); - ui_toolitem_vstgr(name, stockid, 1, f, userdata, ap); - va_end(ap); -} - - -void ui_toolbar_add_default(char *name) { - char *s = strdup(name); - defaults = ucx_list_append(defaults, s); -} - - -QToolBar* ui_create_toolbar(UiObject *obj) { - QToolBar *toolbar = new QToolBar(); - - UCX_FOREACH(elm, defaults) { - UiToolItemI *item = (UiToolItemI*)ucx_map_cstr_get(toolbar_items, (char*)elm->data); - if(item) { - item->addTo(obj, toolbar); - } else if(!strcmp((char*)elm->data, "@separator")) { - - } else { - fprintf(stderr, "UI Error: Unknown toolbar item: %s\n", elm->data); - } - } - - return toolbar; -}
--- a/ui/qt/toolbar.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/toolbar.h Wed Mar 26 20:39:04 2025 +0100 @@ -31,52 +31,9 @@ #include "toolkit.h" #include "../ui/toolbar.h" -#include <ucx/list.h> #include <QToolBar> -class UiToolItemI { -public: - virtual void addTo(UiObject *obj, QToolBar *toolbar) = 0; -}; -class UiToolItem : public UiToolItemI { -public: - char *label; - char *image; - ui_callback callback; - void *userdata; - UcxList *groups; - bool isimportant; - - UiToolItem(char *label, ui_callback f, void *userdata); - void addGroup(int group); - virtual void addTo(UiObject *obj, QToolBar *toolbar); -}; - -class UiStockToolItem : public UiToolItemI { -public: - char *stockid; - ui_callback callback; - void *userdata; - UcxList *groups; - bool isimportant; - - UiStockToolItem(char *stockid, ui_callback f, void *userdata); - void addGroup(int group); - virtual void addTo(UiObject *obj, QToolBar *toolbar); -}; - - -void ui_toolitem_vstgr( - char *name, - char *stockid, - int isimportant, - ui_callback f, - void *userdata, - va_list ap); - - -QToolBar* ui_create_toolbar(UiObject *obj); #endif /* TOOLBAR_H */
--- a/ui/qt/toolkit.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/toolkit.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -36,7 +36,7 @@ #include "../common/document.h" #include "../common/properties.h" -static char *application_name; +static const char *application_name; static ui_callback appclose_fnc; static void *appclose_udata; @@ -46,7 +46,7 @@ char **app_argv; QApplication *application = NULL; -void ui_init(char *appname, int argc, char **argv) { +void ui_init(const char *appname, int argc, char **argv) { application_name = appname; app_argc = argc; @@ -56,11 +56,10 @@ uic_docmgr_init(); uic_load_app_properties(); - - ui_stock_init(); + } -char* ui_appname() { +const char* ui_appname() { return application_name; } @@ -85,7 +84,7 @@ } void ui_show(UiObject *obj) { - obj->widget->show(); + //obj->widget->show(); } void ui_close(UiObject *obj) {
--- a/ui/qt/tree.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/tree.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -34,109 +34,3 @@ #include <QListView> -extern "C" void* ui_strmodel_getvalue(void *elm, int column) { - return column == 0 ? elm : NULL; -} - -UIWIDGET ui_listview_str(UiObject *obj, UiList *list, ui_callback f, void *udata) { - return ui_listview(obj, list, ui_strmodel_getvalue, f, udata); -} -UIWIDGET ui_listview_var(UiObject *obj, UiListPtr *list, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { - QListView *view = new QListView(); - ListModel *model = new ListModel(obj, view, list, getvalue, f, udata); - view->setModel(model); - - // TODO: observer update - - QItemSelectionModel *s = view->selectionModel(); - QObject::connect( - s, - SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), - model, - SLOT(selectionChanged(const QItemSelection &, const QItemSelection &))); - - UiContainer *ct = uic_get_current_container(obj); - ct->add(view, true); - return view; -} - -UIWIDGET ui_listview(UiObject *obj, UiList *list, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { - UiListPtr *listptr = (UiListPtr*)ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiListPtr)); - listptr->list = list; - return ui_listview_var(obj, listptr, getvalue, f, udata); -} - -UIWIDGET ui_listview_nv(UiObject *obj, char *varname, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { - UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_LIST); - if(var) { - UiListVar *value = (UiListVar*)var->value; - return ui_listview_var(obj, value->listptr, getvalue, f, udata); - } else { - // TODO: error - } - return NULL; -} - - -UIWIDGET ui_table_var(UiObject *obj, UiListPtr *list, UiModelInfo *modelinfo) { - QTreeView *view = new QTreeView(); - TableModel *model = new TableModel(obj, view, list, modelinfo); - view->setModel(model); - - view->setItemsExpandable(false); - view->setRootIsDecorated(false); - - // TODO: observer update - UiTableView *u = new UiTableView(); - u->widget = view; - u->model = model; - list->list->observers = ui_add_observer( - list->list->observers, - (ui_callback)ui_table_update, - u); - - view->setSelectionMode(QAbstractItemView::ExtendedSelection); - QItemSelectionModel *s = view->selectionModel(); - QObject::connect( - s, - SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), - model, - SLOT(selectionChanged(const QItemSelection &, const QItemSelection &))); - QObject::connect( - view, - SIGNAL(doubleClicked(const QModelIndex &)), - model, - SLOT(activate(const QModelIndex &))); - - - UiContainer *ct = uic_get_current_container(obj); - ct->add(view, true); - return view; -} - -void ui_table_update(UiEvent *event, UiTableView *view) { - // TODO - printf("update\n"); - - //view->model->update(); - view->widget->setModel(NULL); - view->widget->setModel(view->model); -} - -UIWIDGET ui_table(UiObject *obj, UiList *list, UiModelInfo *modelinfo) { - UiListPtr *listptr = (UiListPtr*)ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiListPtr)); - listptr->list = list; - return ui_table_var(obj, listptr, modelinfo); -} - -UIWIDGET ui_table_nv(UiObject *obj, char *varname, UiModelInfo *modelinfo) { - UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_LIST); - if(var) { - UiListVar *value = (UiListVar*)var->value; - return ui_table_var(obj, value->listptr, modelinfo); - } else { - // TODO: error - } - return NULL; -} -
--- a/ui/qt/tree.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/tree.h Wed Mar 26 20:39:04 2025 +0100 @@ -34,13 +34,7 @@ #include <QTableView> -class UiTableView { -public: - QTreeView *widget; - TableModel *model; -}; -extern "C" void ui_table_update(UiEvent *event, UiTableView *view); #endif /* TREE_H */
--- a/ui/qt/window.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/window.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -26,7 +26,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <ucx/mempool.h> +#include <cx/mempool.h> #include "../common/context.h" #include "window.h" @@ -38,8 +38,8 @@ #include <QFileDialog> static UiObject* create_window(char *title, void *window_data, bool simple) { - UcxMempool *mp = ucx_mempool_new(256); - UiObject *obj = (UiObject*)ucx_mempool_calloc(mp, 1, sizeof(UiObject)); + CxMempool *mp = cxMempoolCreateSimple(256); + UiObject *obj = (UiObject*)cxCalloc(mp->allocator, 1, sizeof(UiObject)); obj->ctx = uic_context(obj, mp); obj->window = window_data; obj->next = NULL; @@ -47,17 +47,18 @@ QMainWindow *window = new QMainWindow(); obj->widget = window; + /* if(!simple) { - ui_add_menus(obj, window); QToolBar *toolbar = ui_create_toolbar(obj); window->addToolBar(Qt::TopToolBarArea, toolbar); } + */ QBoxLayout *box = new QVBoxLayout(); QWidget *boxWidget = new QWidget(); boxWidget->setLayout(box); window->setCentralWidget(boxWidget); - obj->container = new UiBoxContainer(box); + //obj->container = new UiBoxContainer(box); obj->widget = window; return obj;
--- a/ui/ui/toolkit.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/ui/toolkit.h Wed Mar 26 20:39:04 2025 +0100 @@ -62,11 +62,14 @@ #endif #elif defined(UI_QT4) || defined(UI_QT5) +#define UI_QT + #ifdef __cplusplus #include <QApplication> #include <QWidget> #include <QMenu> #define UIWIDGET QWidget* +#define UIWINDOW QWidget* #define UIMENU QMenu* #else /* __cplusplus */ #define UIWIDGET void* @@ -228,7 +231,7 @@ UI_DND_ACTION_MOVE, UI_DND_ACTION_LINK, UI_DND_ACTION_CUSTOM -} UiDndAction; +} UiDnDAction; typedef void(*ui_callback)(UiEvent*, void*); /* event, user data */
--- a/ui/ui/widget.h Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/ui/widget.h Wed Mar 26 20:39:04 2025 +0100 @@ -49,6 +49,8 @@ #ifdef UI_GTK typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata); +#elif defined(UI_QT) +typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata); #elif defined(UI_MOTIF) typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata, Widget parent, Arg *a, int n); #elif defined(UI_COCOA)