Wed, 25 Jun 2025 22:14:25 +0200
implement ui_getvaluefunc2 (QT)
| ui/qt/list.cpp | file | annotate | diff | comparison | revisions | |
| ui/qt/model.cpp | file | annotate | diff | comparison | revisions | |
| ui/qt/model.h | file | annotate | diff | comparison | revisions |
--- a/ui/qt/list.cpp Wed Jun 25 21:59:36 2025 +0200 +++ b/ui/qt/list.cpp Wed Jun 25 22:14:25 2025 +0200 @@ -37,17 +37,32 @@ return column == 0 ? elm : NULL; } +static void* getvalue_wrapper(UiList *list, void *elm, int row, int col, void *userdata) { + ui_getvaluefunc getvalue = (ui_getvaluefunc)userdata; + return getvalue(elm, col); +} 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_getvaluefunc2 getvalue = nullptr; + void *getvaluedata = nullptr; + if(args->getvalue2) { + getvalue = args->getvalue2; + getvaluedata = args->getvalue2data; + } else if(args->getvalue) { + getvalue = getvalue_wrapper; + getvaluedata = (void*)args->getvalue; + } else { + getvalue = getvalue_wrapper; + getvaluedata = (void*)ui_strmodel_getvalue; + } - 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); + ListModel *model = new ListModel(obj, view, var, getvalue, getvaluedata); view->setModel(model); if(var) {
--- a/ui/qt/model.cpp Wed Jun 25 21:59:36 2025 +0200 +++ b/ui/qt/model.cpp Wed Jun 25 22:14:25 2025 +0200 @@ -28,12 +28,21 @@ #include "model.h" +static void* model_getvalue(UiModel *model, UiList *list, void *elm, int row, int col) { + if(model->getvalue2) { + return model->getvalue2(list, elm, row, col, model->getvalue2data); + } else if(model->getvalue) { + return model->getvalue(elm, col); + } + return NULL; +} -ListModel::ListModel(UiObject *obj, QListView *view, UiVar *var, ui_getvaluefunc getvalue){ +ListModel::ListModel(UiObject *obj, QListView *view, UiVar *var, ui_getvaluefunc2 getvalue, void *getvaluedata){ this->obj = obj; this->view = view; this->var = var; this->getvalue = getvalue; + this->getvaluedata = getvaluedata; this->onactivate = nullptr; this->onactivatedata = nullptr; this->onselection = nullptr; @@ -69,7 +78,7 @@ UiList *ls = (UiList*)var->value; void *rowData = ls->get(ls, index.row()); if(rowData && getvalue) { - void *value = getvalue(rowData, 0); + void *value = getvalue(ls, rowData, index.row(), 0, getvaluedata); if(value) { return QString::fromUtf8((char*)value); } @@ -144,9 +153,9 @@ if(role == Qt::DisplayRole) { UiList *ls = (UiList*)var->value; void *rowData = ls->get(ls, index.row()); - if(rowData && model->getvalue) { + if(rowData) { int col = index.column(); - void *value = model->getvalue(rowData, col); + void *value = model_getvalue(model, ls, rowData, index.row(), col); if(value) { UiModelType type = model->types[col]; switch(type) {
--- a/ui/qt/model.h Wed Jun 25 21:59:36 2025 +0200 +++ b/ui/qt/model.h Wed Jun 25 22:14:25 2025 +0200 @@ -44,7 +44,8 @@ class ListModel : public QAbstractListModel { Q_OBJECT - ui_getvaluefunc getvalue; + ui_getvaluefunc2 getvalue; + void *getvaluedata; ui_callback onactivate; void *onactivatedata; ui_callback onselection; @@ -55,7 +56,7 @@ UiVar *var; QListView *view; - ListModel(UiObject *obj, QListView *view, UiVar *var, ui_getvaluefunc getvalue); + ListModel(UiObject *obj, QListView *view, UiVar *var, ui_getvaluefunc2 getvalue, void *getvaluedata); void setActivationCallback(ui_callback f, void *userdata); void setSelectionCallback(ui_callback f, void *userdata);