Inline editing of categories and feed names.

Leonardo Robol [2011-10-24 05:27]
Inline editing of categories and feed names.
Filename
feedmodel.cpp
feedmodel.h
mainwindow.cpp
diff --git a/feedmodel.cpp b/feedmodel.cpp
index 3a53450..7382f1e 100644
--- a/feedmodel.cpp
+++ b/feedmodel.cpp
@@ -88,49 +88,19 @@ FeedModel::setData(const QModelIndex &index, const QVariant &value, int role)
         return false;

     QSqlQuery query(db);
+
     if (index.internalId() < FEEDMODEL_MAX_CATEGORIES && index.internalId() != 0)
     {
         // We are trying to modify a category
-
-        switch (index.column())
-        {
-        case 0:
-            // ID
-            query.prepare("UPDATE categories SET id=:value WHERE id=:id;");
-            break;
-        case 1:
-            // Name
-            query.prepare("UPDATE categories SET name=:value WHERE id=:id;");
-            break;
-        }
-
+        query.prepare("UPDATE categories SET name=:value WHERE id=:id;");
         query.bindValue("value", value.toString());
         query.bindValue("id", index.internalId());
     }
     else
     {
         // We are trying to modify a feed
-        switch (index.column())
-        {
-        case 0:
-            // ID
-            query.prepare("UPDATE categories SET id=:value WHERE id=:id;");
-            break;
-        case 1:
-            // Category
-            query.prepare("UPDATE categories SET category=:value WHERE id=:id;");
-            break;
-        case 2:
-            // Name
-            query.prepare("UPDATE categories SET name=:value WHERE id=:id;");
-            break;
-        case 3:
-            // Url
-            query.prepare("UPDATE categories SET url=:value WHERE id=:id;");
-            break;
-        }
-
-        query.bindValue("value", value);
+        query.prepare("UPDATE feeds SET name=:value WHERE id=:id;");
+        query.bindValue("value", value.toString());
         query.bindValue("id", index.internalId() - FEEDMODEL_MAX_CATEGORIES);
     }

@@ -142,10 +112,18 @@ FeedModel::setData(const QModelIndex &index, const QVariant &value, int role)
     else
     {
         // Emit the datachanged signal
+        dataChanged(index, index);
         return true;
     }
 }

+Qt::ItemFlags
+FeedModel::flags(const QModelIndex &index) const
+{
+    Q_UNUSED(index);
+    return (Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable);
+}
+
 int
 FeedModel::rowCount(const QModelIndex &parent) const
 {
diff --git a/feedmodel.h b/feedmodel.h
index 0e6923d..6ead440 100644
--- a/feedmodel.h
+++ b/feedmodel.h
@@ -47,6 +47,11 @@ public:
     QModelIndex parent(const QModelIndex &child) const;

     /**
+     * @brief Return the flags for the given item.
+     */
+    Qt::ItemFlags flags(const QModelIndex &index) const;
+
+    /**
      * @brief Return the data to be inserted in the column header of the treeview.
      */
     QVariant headerData(int section, Qt::Orientation orientation, int role) const;
diff --git a/mainwindow.cpp b/mainwindow.cpp
index e3da0d8..626ec1a 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -19,6 +19,7 @@ MainWindow::MainWindow(QWidget *parent) :
     // Load feedModel that will wrap the SQLite database
     feedModel = new FeedModel(db, this);
     ui->feedTreeView->setModel(feedModel);
+    ui->feedTreeView->setEditTriggers(QTreeView::DoubleClicked);

     // Load the RSSParser, hiding the unnecessary columns
     rssParser = new RssParser(db, feedModel, this);
ViewGit