From 40a6ed928530202e20f6153d6b0923e38db3fd1b Mon Sep 17 00:00:00 2001 From: Leonardo Robol Date: Mon, 24 Oct 2011 07:27:29 +0200 Subject: [PATCH] Inline editing of categories and feed names. --- feedmodel.cpp | 46 ++++++++++++---------------------------------- feedmodel.h | 5 +++++ mainwindow.cpp | 1 + 3 files changed, 18 insertions(+), 34 deletions(-) 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); -- 2.1.4