--- 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; -}