ui/qt/model.cpp

changeset 72
a00b46d92c54
parent 69
419c8c3209e8
child 130
212b63dd61be
--- 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;

mercurial