summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-06-02 11:24:06 +0200
committerArno <am@disconnect.de>2013-06-02 11:24:06 +0200
commit721fd40222440c6e8a81f4379f894d8908772a8a (patch)
treea7b54efd2ec9168efb4c7ae8e49851430b84a1b6 /archivemodel.cpp
parent459f58c57bfa1021783134b11853e8e4140055f3 (diff)
downloadSheMov-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.cpp52
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);
}