remove old Qt code

7 days ago

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 26 Mar 2025 20:39:04 +0100 (7 days ago)
changeset 516
4b31c74666d7
parent 515
9e18cb8c4412
child 517
ac867877999e

remove old Qt code

application/main.c file | annotate | diff | comparison | revisions
ui/qt/button.cpp file | annotate | diff | comparison | revisions
ui/qt/button.h file | annotate | diff | comparison | revisions
ui/qt/container.cpp file | annotate | diff | comparison | revisions
ui/qt/container.h file | annotate | diff | comparison | revisions
ui/qt/graphics.cpp file | annotate | diff | comparison | revisions
ui/qt/graphics.h file | annotate | diff | comparison | revisions
ui/qt/label.cpp file | annotate | diff | comparison | revisions
ui/qt/menu.cpp file | annotate | diff | comparison | revisions
ui/qt/menu.h file | annotate | diff | comparison | revisions
ui/qt/model.cpp file | annotate | diff | comparison | revisions
ui/qt/model.h file | annotate | diff | comparison | revisions
ui/qt/stock.cpp file | annotate | diff | comparison | revisions
ui/qt/stock.h file | annotate | diff | comparison | revisions
ui/qt/text.cpp file | annotate | diff | comparison | revisions
ui/qt/text.h 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/toolkit.cpp file | annotate | diff | comparison | revisions
ui/qt/tree.cpp file | annotate | diff | comparison | revisions
ui/qt/tree.h file | annotate | diff | comparison | revisions
ui/qt/window.cpp file | annotate | diff | comparison | revisions
ui/ui/toolkit.h file | annotate | diff | comparison | revisions
ui/ui/widget.h file | annotate | diff | comparison | revisions
--- 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)

mercurial