From e8edacfc5175e91d27d6fcba8e3ffa1b1c80754c Mon Sep 17 00:00:00 2001 From: Arno Date: Fri, 12 Jul 2013 17:23:33 +0200 Subject: Dis/enable QActions for ContextMenu Handle actions dependent on type node. --- archivecontroller.cpp | 10 ++++++++++ archivecontroller.h | 3 +++ archivemodel.cpp | 1 + archivemodel.h | 2 +- archiveview.cpp | 4 ++-- shemov.cpp | 20 +++++++++++++------- 6 files changed, 30 insertions(+), 10 deletions(-) diff --git a/archivecontroller.cpp b/archivecontroller.cpp index 50e9982..869ffb0 100644 --- a/archivecontroller.cpp +++ b/archivecontroller.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include "archivecontroller.h" #include "archivemodel.h" @@ -162,6 +163,11 @@ void ArchiveController::editFileNo(){ } } +void ArchiveController::addActionForTree(QAction *a){ + mActionsForTree << a; + mArchiveTree->addAction(a); +} + void ArchiveController::treeSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ Q_UNUSED(selected); Q_UNUSED(deselected); @@ -190,6 +196,10 @@ void ArchiveController::treeSelectionChanged(const QItemSelection &selected, con } QString metaData = mArchiveModel->metadata(*ids.begin()); mMetadataView->setHtml(metaData); + int nodeType = sel.first().data(ArchiveModel::TypeRole).toInt(); + foreach(QAction *a, mActionsForTree){ + a->setEnabled(a->data().toInt() & nodeType); + } } void ArchiveController::fileDoubleClicked(const QModelIndex &idx){ diff --git a/archivecontroller.h b/archivecontroller.h index fb1e8ed..f381584 100644 --- a/archivecontroller.h +++ b/archivecontroller.h @@ -23,6 +23,7 @@ class QItemSelectionModel; class QSortFilterProxyModel; class QStandardItemModel; class QTextEdit; +class QAction; class ArchiveController : public QObject { Q_OBJECT @@ -48,6 +49,7 @@ class ArchiveController : public QObject { void editDvdNo(); void editFileType(); void editFileNo(); + void addActionForTree(QAction *a); private slots: void fileDoubleClicked(const QModelIndex &idx); @@ -67,6 +69,7 @@ class ArchiveController : public QObject { QStandardItemModel *mGenreModel; QTextEdit *mMetadataView; QWidget *mParentWidget; + QList mActionsForTree; }; #endif // ARCHIVECONTROLLER_H diff --git a/archivemodel.cpp b/archivemodel.cpp index 621ee9c..cbca042 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -112,6 +112,7 @@ bool ArchiveModel::setData(const QModelIndex &idx, const QVariant &value, int ro } SmTreeItem *item = itemAt(idx); int nodeType = item->data(Type).toInt(); + // handle duplicate key error!!! QSqlQuery updateQuery(mDb); if(nodeType == GenreNode){ updateQuery.prepare("UPDATE genres SET tgenrename = :value WHERE igenres_id = :id"); diff --git a/archivemodel.h b/archivemodel.h index 2bc4b1d..185d296 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -28,7 +28,7 @@ class ArchiveModel : public SmTreeModel { enum { MetadataNumFields = 8 }; enum Order { SeriesName, Actor, Genre, NoOrder }; enum { NumFields = 8 }; - enum NodeType { SeriesNode, SeriesPartNode, GenreNode, ActorNode }; + enum NodeType { SeriesNode = 1, SeriesPartNode = 2, GenreNode = 4, ActorNode = 8, AllNodes = 15 }; explicit ArchiveModel(const QStringList &headers, QObject *parent = 0); virtual ~ArchiveModel(); const QStringList availableOrders() const; diff --git a/archiveview.cpp b/archiveview.cpp index ca0d91f..c376c06 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -262,11 +262,11 @@ void ArchiveTree::setModel(ArchiveProxy *model){ void ArchiveTree::rename(){ QModelIndex idx = currentIndex(); - int nodeType = idx.data(ArchiveModel::TypeRole).toInt(); + /*int nodeType = idx.data(ArchiveModel::TypeRole).toInt(); if(nodeType == ArchiveModel::SeriesPartNode){ impossible(); return; - } + }*/ QString currentName = idx.data(ArchiveModel::NameRole).toString(); QString question = QString(tr("Rename %1 to:")).arg(currentName); QString newName = QInputDialog::getText(this, tr("Rename"), question, QLineEdit::Normal, currentName); diff --git a/shemov.cpp b/shemov.cpp index ab8290a..5d94021 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -749,21 +749,27 @@ void SheMov::createActions(){ ArchiveController *c = SmGlobals::instance()->archiveController(); // rename mArchiveViewRenameA = new QAction(tr("Rename..."), this); + mArchiveViewRenameA->setData(ArchiveModel::AllNodes & ArchiveModel::SeriesNode); connect(mArchiveViewRenameA, SIGNAL(triggered()), c->archiveTree(), SLOT(rename())); // remove mArchiveViewRemoveA = new QAction(tr("Remove..."), this); + //mArchiveViewRemoveA->setData(ArchiveModel::RemoveNode); connect(mArchiveViewRemoveA, SIGNAL(triggered()), c->archiveTree(), SLOT(remove())); // edit actors mArchiveViewActorsA = new QAction(tr("Edit actors..."), this); + mArchiveViewActorsA->setData(ArchiveModel::SeriesPartNode); connect(mArchiveViewActorsA, SIGNAL(triggered()), c->archiveTree(), SLOT(editActors())); // edit genres mArchiveViewGenresA = new QAction(tr("Edit genres..."), this); + mArchiveViewGenresA->setData(ArchiveModel::SeriesPartNode); connect(mArchiveViewGenresA, SIGNAL(triggered()), c->archiveTree(), SLOT(editGenres())); // edit part no and subtitle mArchiveViewPartnoA = new QAction(tr("Edit Part No..."), this); + mArchiveViewPartnoA->setData(ArchiveModel::SeriesPartNode); connect(mArchiveViewPartnoA, SIGNAL(triggered()), c->archiveTree(), SLOT(editSeriesPart())); // edit metadata mArchiveViewMetadataA = new QAction(tr("Edit metadata..."), this); + mArchiveViewMetadataA->setData(ArchiveModel::SeriesPartNode); connect(mArchiveViewMetadataA, SIGNAL(triggered()), c->archiveTree(), SLOT(editMetadata())); // ArchiveFiles actions @@ -1005,13 +1011,13 @@ void SheMov::createMenus(){ // Archive tree (exp.) ArchiveController *c = SmGlobals::instance()->archiveController(); - c->archiveTree()->addAction(mArchiveViewRenameA); - c->archiveTree()->addAction(mArchiveViewRemoveA); - c->archiveTree()->addAction(createSeparator()); - c->archiveTree()->addAction(mArchiveViewActorsA); - c->archiveTree()->addAction(mArchiveViewGenresA); - c->archiveTree()->addAction(mArchiveViewPartnoA); - c->archiveTree()->addAction(mArchiveViewMetadataA); + c->addActionForTree(mArchiveViewRenameA); + c->addActionForTree(mArchiveViewRemoveA); + c->addActionForTree(createSeparator()); + c->addActionForTree(mArchiveViewActorsA); + c->addActionForTree(mArchiveViewGenresA); + c->addActionForTree(mArchiveViewPartnoA); + c->addActionForTree(mArchiveViewMetadataA); // Archive files (exp.) c->archiveFiles()->addAction(mArchiveFilesPlayA); -- cgit v1.2.3-70-g09d2