diff -r 3e021c5f18a0 -r a00b46d92c54 ui/qt/model.cpp --- a/ui/qt/model.cpp Sun Jan 11 16:33:28 2015 +0100 +++ b/ui/qt/model.cpp Mon Jan 12 12:03:05 2015 +0100 @@ -28,6 +28,66 @@ #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; @@ -71,26 +131,8 @@ return QVariant(); } -UiListSelection* TableModel::listSelection() { - UiListSelection *selection = new UiListSelection(); - - QModelIndexList list = view->selectionModel()->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; -} - void TableModel::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) { - UiListSelection *selection = listSelection(); + UiListSelection *selection = listSelection(view->selectionModel()); UiEvent e; e.obj = obj; @@ -107,7 +149,7 @@ } void TableModel::activate(const QModelIndex &) { - UiListSelection *selection = listSelection(); + UiListSelection *selection = listSelection(view->selectionModel()); UiEvent e; e.obj = obj;