diff options
author | Arno <am@disconnect.de> | 2013-06-02 11:24:06 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-06-02 11:24:06 +0200 |
commit | 721fd40222440c6e8a81f4379f894d8908772a8a (patch) | |
tree | a7b54efd2ec9168efb4c7ae8e49851430b84a1b6 /archivemodel.cpp | |
parent | 459f58c57bfa1021783134b11853e8e4140055f3 (diff) | |
download | SheMov-721fd40222440c6e8a81f4379f894d8908772a8a.tar.gz SheMov-721fd40222440c6e8a81f4379f894d8908772a8a.tar.bz2 SheMov-721fd40222440c6e8a81f4379f894d8908772a8a.zip |
Implement Rename
Rename items: spits out an error message if the new item already exists.
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r-- | archivemodel.cpp | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp index de95328..0c16c21 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -5,6 +5,7 @@ 2 of the License, or (at your option) any later version. */ +#include <QSqlError> #include <QSqlQuery> #include "smtreeitem.h" @@ -54,9 +55,54 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{ return QColor(Qt::darkGreen); } } + if(role == NameRole){ + return item->data(Name); + } + if(role == TypeRole){ + return item->data(Type); + } return SmTreeModel::data(index, role); } +bool ArchiveModel::setData(const QModelIndex &idx, const QVariant &value, int role){ + if(role != Qt::EditRole){ + return false; + } + SmTreeItem *item = itemAt(idx); + int nodeType = item->data(Type).toInt(); + QSqlQuery updateQuery(mDb); + if(nodeType == GenreNode){ + updateQuery.prepare("UPDATE genres SET tgenrename = :value WHERE igenres_id = :id"); + }else if(nodeType == ActorNode){ + updateQuery.prepare("UPDATE actors SET tactorname = :value WHERE iactors_id = :id"); + }else if(nodeType == SeriesNode){ + updateQuery.prepare("UPDATE series SET tseries_name = :value WHERE iseries_id = :id"); + }else{ + return false; + } + QVariant id = item->data(GenericId); + updateQuery.bindValue(":value", value); + updateQuery.bindValue(":id", id); + if(updateQuery.exec()){ + if(nodeType == GenreNode || nodeType == ActorNode){ + item->setData(Name, value); + emit dataChanged(idx, idx); + return true; + }else if(nodeType == SeriesNode){ + item->setData(Name, value); + emit needRefresh(); + return true; + } + }else{ + QSqlError e = updateQuery.lastError(); + QString databaseText = e.databaseText().isEmpty() ? tr("(none)") : e.databaseText(); + QString driverText = e.driverText().isEmpty() ? tr("(none)") : e.driverText(); + QString errormsg = QString(tr("<b>Database errors:</b><br/><ul><li>driverText(): %1</li><li>databaseText(): %2</li></ul>")).arg(driverText).arg(databaseText); + emit databaseError(errormsg); + } + return false; +} + QStringList ArchiveModel::indexToPath(const QModelIndex &idx) const { QStringList retval; SmTreeItem *item = itemAt(idx); @@ -96,6 +142,10 @@ void ArchiveModel::setOrder(const QString &order){ setOrder(orderNum); } +void ArchiveModel::refresh(){ + setOrder(mOrder); +} + void ArchiveModel::collectorFinished(){ SmTreeItem *item = mCollector->rootItem(); setRoot(item); @@ -151,7 +201,7 @@ void ArchiveCollector::populateByActor(){ QSqlQuery actorIdQuery = QSqlQuery("SELECT iactors_id, tactorname FROM actors ORDER BY tactorname", mDb); while(actorIdQuery.next()){ QList<QVariant> actorIdData; - actorIdData << actorIdQuery.value(1) << actorIdQuery.value(0) << QVariant() << QVariant() << ArchiveModel::GenreNode << false << QVariant() << QVariant() << QVariant(); + actorIdData << actorIdQuery.value(1) << actorIdQuery.value(0) << QVariant() << QVariant() << ArchiveModel::ActorNode << false << QVariant() << QVariant() << QVariant(); SmTreeItem *actorIdItem = new SmTreeItem(actorIdData, mRootItem); mRootItem->appendChild(actorIdItem); } |