summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-07-12 17:23:33 +0200
committerArno <am@disconnect.de>2013-07-12 17:23:33 +0200
commite8edacfc5175e91d27d6fcba8e3ffa1b1c80754c (patch)
tree799a4731f2b5ed5c5993c1fbf83341f228061303
parentea96c5b64b1fd1a0ae152363c5ec804eaf960dcf (diff)
downloadSheMov-e8edacfc5175e91d27d6fcba8e3ffa1b1c80754c.tar.gz
SheMov-e8edacfc5175e91d27d6fcba8e3ffa1b1c80754c.tar.bz2
SheMov-e8edacfc5175e91d27d6fcba8e3ffa1b1c80754c.zip
Dis/enable QActions for ContextMenu
Handle actions dependent on type node.
-rw-r--r--archivecontroller.cpp10
-rw-r--r--archivecontroller.h3
-rw-r--r--archivemodel.cpp1
-rw-r--r--archivemodel.h2
-rw-r--r--archiveview.cpp4
-rw-r--r--shemov.cpp20
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 <QInputDialog>
#include <QTextEdit>
#include <QStandardItemModel>
+#include <QAction>
#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<QAction*> 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);