refactore widget args passing (QT)

Thu, 29 May 2025 13:28:50 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 29 May 2025 13:28:50 +0200
changeset 597
fc85ca42a7ce
parent 596
34866811080d
child 598
7b03db81caf8

refactore widget args passing (QT)

ui/qt/button.cpp 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/entry.cpp file | annotate | diff | comparison | revisions
ui/qt/label.cpp file | annotate | diff | comparison | revisions
ui/qt/list.cpp file | annotate | diff | comparison | revisions
ui/qt/qt5.pro file | annotate | diff | comparison | revisions
ui/qt/text.cpp file | annotate | diff | comparison | revisions
ui/qt/widget.cpp file | annotate | diff | comparison | revisions
--- a/ui/qt/button.cpp	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/button.cpp	Thu May 29 13:28:50 2025 +0200
@@ -30,15 +30,15 @@
 #include "container.h"
 #include "toolkit.h"
 
-UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) {
+UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
-    QString str = QString::fromUtf8(args.label);
+    QString str = QString::fromUtf8(args->label);
     QPushButton *button = new QPushButton(str);
     
-    if(args.onclick) {
-        UiEventWrapper *event = new UiEventWrapper(obj, args.onclick, args.onclickdata);
+    if(args->onclick) {
+        UiEventWrapper *event = new UiEventWrapper(obj, args->onclick, args->onclickdata);
         button->connect(button, SIGNAL(clicked()), event, SLOT(slot()));
         button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy()));
     }
@@ -56,18 +56,18 @@
     }
 }
 
-UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
-    QString str = QString::fromUtf8(args.label);
+    QString str = QString::fromUtf8(args->label);
     QPushButton *button = new QPushButton(str);
     button->setCheckable(true);
     
-    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
     
-    if(args.onchange) {
-        UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata);
+    if(args->onchange) {
+        UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
         event->var = var;
         event->customdata1 = button;
         event->prepare_event = togglebutton_event;
@@ -115,17 +115,17 @@
 }
 
 
-UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
-    QString str = QString::fromUtf8(args.label);
+    QString str = QString::fromUtf8(args->label);
     QCheckBox *checkbox = new QCheckBox(str);
     
-    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
     
-    if(args.onchange) {
-        UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata);
+    if(args->onchange) {
+        UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
         event->var = var;
         event->customdata1 = checkbox;
         event->prepare_event = checkbox_event;
@@ -173,15 +173,15 @@
     }
 }
 
-UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) {
+UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
-    QString str = QString::fromUtf8(args.label);
+    QString str = QString::fromUtf8(args->label);
     QRadioButton *button = new QRadioButton(str);
     button->setAutoExclusive(false);
     
-    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
     if(var) {
         UiInteger *value = (UiInteger*)var->value;
         QButtonGroup *buttonGroup = (QButtonGroup*)value->obj;
@@ -198,7 +198,7 @@
         value->set = ui_radiobutton_set;
     }
     
-    UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata);
+    UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
     event->var = var;
     event->customdata1 = button;
     event->prepare_event = togglebutton_event;
--- a/ui/qt/container.cpp	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/container.cpp	Thu May 29 13:28:50 2025 +0200
@@ -86,7 +86,7 @@
     current = widget;
 }
 
-UIWIDGET ui_box(UiObject *obj, UiContainerArgs args, QBoxLayout::Direction dir) {
+UIWIDGET ui_box(UiObject *obj, UiContainerArgs *args, QBoxLayout::Direction dir) {
     UiContainerPrivate *ctn = (UiContainerPrivate*)ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
@@ -100,11 +100,11 @@
     return widget;
 }
 
-UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) {
     return ui_box(obj, args, QBoxLayout::TopToBottom);
 }
 
-UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) {
     return ui_box(obj, args, QBoxLayout::LeftToRight);
 }
 
@@ -233,7 +233,7 @@
     }
 }
 
-UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) {
+UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
     UiContainerPrivate *ctn = (UiContainerPrivate*)ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
@@ -244,13 +244,13 @@
     
     ui_container_add(obj, new UiGridContainer(
             grid,
-            args.margin,
-            args.columnspacing,
-            args.rowspacing,
-            args.def_hexpand,
-            args.def_vexpand,
-            args.def_hfill,
-            args.def_vfill));
+            args->margin,
+            args->columnspacing,
+            args->rowspacing,
+            args->def_hexpand,
+            args->def_vexpand,
+            args->def_hfill,
+            args->def_vfill));
     
     return widget;
 }
--- a/ui/qt/container.h	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/container.h	Thu May 29 13:28:50 2025 +0200
@@ -41,14 +41,14 @@
 #include <QSplitter>
 
 #define UI_APPLY_LAYOUT(layout, args) \
-    layout.fill = args.fill; \
-    layout.hexpand = args.hexpand; \
-    layout.vexpand = args.vexpand; \
-    layout.hfill = args.hfill; \
-    layout.vfill = args.vfill; \
-    layout.override_defaults = args.override_defaults; \
-    layout.colspan = args.colspan; \
-    layout.rowspan = args.rowspan
+    layout.fill = args->fill; \
+    layout.hexpand = args->hexpand; \
+    layout.vexpand = args->vexpand; \
+    layout.hfill = args->hfill; \
+    layout.vfill = args->vfill; \
+    layout.override_defaults = args->override_defaults; \
+    layout.colspan = args->colspan; \
+    layout.rowspan = args->rowspan
 
 #define ui_reset_layout(layout) memset(&(layout), 0, sizeof(UiLayout))
 #define ui_lb2bool(b) ((b) == UI_LAYOUT_TRUE ? TRUE : FALSE)
--- a/ui/qt/entry.cpp	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/entry.cpp	Thu May 29 13:28:50 2025 +0200
@@ -36,35 +36,35 @@
 
 
 
-UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args) {
+UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
     bool use_double = false;
     UiVar *var = NULL;
-    if(args.varname) {
-        var = uic_get_var(obj->ctx, args.varname);
+    if(args->varname) {
+        var = uic_get_var(obj->ctx, args->varname);
         if(var->type == UI_VAR_DOUBLE) {
             use_double = true;
         } else if(var->type == UI_VAR_RANGE) {
             use_double = true;
         } else if(var->type != UI_VAR_INTEGER) {
             var = NULL;
-            fprintf(stderr, "UI Error: var '%s' has wrong type (must be int/double/range)\n", args.varname);
+            fprintf(stderr, "UI Error: var '%s' has wrong type (must be int/double/range)\n", args->varname);
         }
     }
     
     if(!var) {
-        if(args.intvalue) {
-            var = uic_widget_var(obj->ctx, obj->ctx, args.intvalue, NULL, UI_VAR_INTEGER);
-        } else if(args.doublevalue) {
-            var = uic_widget_var(obj->ctx, obj->ctx, args.doublevalue, NULL, UI_VAR_DOUBLE);
+        if(args->intvalue) {
+            var = uic_widget_var(obj->ctx, obj->ctx, args->intvalue, NULL, UI_VAR_INTEGER);
+        } else if(args->doublevalue) {
+            var = uic_widget_var(obj->ctx, obj->ctx, args->doublevalue, NULL, UI_VAR_DOUBLE);
             use_double = true;
-        } else if(args.rangevalue) {
-            var = uic_widget_var(obj->ctx, obj->ctx, args.rangevalue, NULL, UI_VAR_RANGE);
+        } else if(args->rangevalue) {
+            var = uic_widget_var(obj->ctx, obj->ctx, args->rangevalue, NULL, UI_VAR_RANGE);
             use_double = true;
         } else {
-            if(args.digits > 0) {
+            if(args->digits > 0) {
                 use_double = true;
             }
         }
@@ -73,15 +73,15 @@
     QAbstractSpinBox *widget = nullptr;
     if(use_double) {
         QDoubleSpinBox *spinbox = new QDoubleSpinBox();
-        spinbox->setDecimals(args.digits);
-        if(args.step != 0) {
-            spinbox->setSingleStep(args.step);
+        spinbox->setDecimals(args->digits);
+        if(args->step != 0) {
+            spinbox->setSingleStep(args->step);
         }
         widget = spinbox;
     } else {
         QSpinBox *spinbox = new QSpinBox();
-        if(args.step != 0) {
-            spinbox->setSingleStep(args.step);
+        if(args->step != 0) {
+            spinbox->setSingleStep(args->step);
         }
         widget = spinbox;
     }
--- a/ui/qt/label.cpp	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/label.cpp	Thu May 29 13:28:50 2025 +0200
@@ -32,17 +32,17 @@
 #include "ui/display.h"
 
 
-UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs args) {
+UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
-    QString str = QString::fromUtf8(args.label);
+    QString str = QString::fromUtf8(args->label);
     QLabel *widget = new QLabel(str);
     
     Qt::AlignmentFlag align = Qt::AlignCenter;
-    if(args.align == UI_ALIGN_LEFT) {
+    if(args->align == UI_ALIGN_LEFT) {
         align = Qt::AlignLeft;
-    } else if(args.align == UI_ALIGN_RIGHT) {
+    } else if(args->align == UI_ALIGN_RIGHT) {
         align = Qt::AlignRight;
     }
     widget->setAlignment(align);
@@ -52,12 +52,12 @@
     return widget;
 }
 
-UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args) {
-    args.align = UI_ALIGN_LEFT;
+UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs *args) {
+    args->align = UI_ALIGN_LEFT;
     return ui_label_create(obj, args);
 }
 
-UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args) {
-    args.align = UI_ALIGN_RIGHT;
+UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args) {
+    args->align = UI_ALIGN_RIGHT;
     return ui_label_create(obj, args);
 }
--- a/ui/qt/list.cpp	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/list.cpp	Thu May 29 13:28:50 2025 +0200
@@ -38,14 +38,14 @@
 }
 
 
-UIWIDGET ui_listview_create(UiObject* obj, UiListArgs args) {
+UIWIDGET ui_listview_create(UiObject* obj, UiListArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
     QListView *view = new QListView();
     
-    ui_getvaluefunc getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue;
-    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.list, args.varname, UI_VAR_LIST);
+    ui_getvaluefunc getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue;
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST);
     
     ListModel *model = new ListModel(obj, view, var, getvalue);
     view->setModel(model);
@@ -58,8 +58,8 @@
         list->obj = model;
     }
     
-    model->setActivationCallback(args.onactivate, args.onactivatedata);
-    model->setSelectionCallback(args.onselection, args.onselectiondata);
+    model->setActivationCallback(args->onactivate, args->onactivatedata);
+    model->setSelectionCallback(args->onselection, args->onselectiondata);
     
     QItemSelectionModel *s = view->selectionModel();
     QObject::connect(
@@ -74,20 +74,20 @@
     return view;
 }
 
-UIWIDGET ui_table_create(UiObject* obj, UiListArgs args) {
+UIWIDGET ui_table_create(UiObject* obj, UiListArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
     QTreeView *view = new QTreeView();
     view->setItemsExpandable(false);
     view->setRootIsDecorated(false);
-    if(args.multiselection) {
+    if(args->multiselection) {
         view->setSelectionMode(QAbstractItemView::ExtendedSelection);
     }
     
-    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.list, args.varname, UI_VAR_LIST);
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST);
     
-    TableModel *model = new TableModel(obj, view, var, args.model);
+    TableModel *model = new TableModel(obj, view, var, args->model);
     view->setModel(model);
     
     if(var) {
@@ -98,8 +98,8 @@
         list->obj = model;
     }
     
-    model->setActivationCallback(args.onactivate, args.onactivatedata);
-    model->setSelectionCallback(args.onselection, args.onselectiondata);
+    model->setActivationCallback(args->onactivate, args->onactivatedata);
+    model->setSelectionCallback(args->onselection, args->onselectiondata);
     
     QItemSelectionModel *s = view->selectionModel();
     QObject::connect(
--- a/ui/qt/qt5.pro	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/qt5.pro	Thu May 29 13:28:50 2025 +0200
@@ -33,6 +33,8 @@
 MOC_DIR = ../build/ui/qt
 OBJECTS_DIR = ../build/ui/qt
 
+QMAKE_CXXFLAGS += -I../ucx
+
 QT += core gui widgets
 
 DEFINES += UI_QT5
--- a/ui/qt/text.cpp	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/text.cpp	Thu May 29 13:28:50 2025 +0200
@@ -57,7 +57,7 @@
     return document;
 }
 
-UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
+UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
@@ -66,7 +66,7 @@
     
     QTextDocument *document = nullptr;
     
-    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING);
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
     if(var) {
         UiText *value = (UiText*)var->value;
         
@@ -210,7 +210,7 @@
 
 /* ------------------------------ TextField ------------------------------ */
 
-static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, bool password, bool frameless) {
+static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs *args, bool password, bool frameless) {
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
@@ -221,7 +221,7 @@
         textfield->setEchoMode(QLineEdit::Password);
     }
     
-    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING);
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
     if(var) {
         UiString *value = (UiString*)var->value;
         if(value->value.ptr) {
@@ -241,15 +241,15 @@
     return textfield;
 }
 
-UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) {
+UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
     return create_textfield(obj, args, false, false);
 }
 
-UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) {
     return create_textfield(obj, args, false, true);
 }
 
-UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) {
     return create_textfield(obj, args, true, false);
 }
 
--- a/ui/qt/widget.cpp	Thu May 29 13:23:56 2025 +0200
+++ b/ui/qt/widget.cpp	Thu May 29 13:28:50 2025 +0200
@@ -31,7 +31,7 @@
 #include "container.h"
 #include "../common/context.h"
 
-UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args) {
+UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs *args) {
     UIWIDGET widget = create_widget(obj, args, userdata);
     UiContainerPrivate *ctn = ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
@@ -45,7 +45,7 @@
     separator->setFrameShadow(QFrame::Sunken);
     
     UiContainerPrivate *ctn = ui_obj_container(obj);
-    UI_APPLY_LAYOUT(ctn->layout, (*args));
+    UI_APPLY_LAYOUT(ctn->layout, args);
     
     ctn->add(separator, false);
     

mercurial