summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-07-24 17:15:00 +0200
committerArno <am@disconnect.de>2010-07-24 17:15:00 +0200
commitad322157891cec53a7b660629d7c244e75df81d5 (patch)
tree0ffbc54d683f6e8c4925b669bb1732ac52cae0de
parentb465c59cce7418968f268b9888a8236be281fda5 (diff)
downloadSheMov-ad322157891cec53a7b660629d7c244e75df81d5.tar.gz
SheMov-ad322157891cec53a7b660629d7c244e75df81d5.tar.bz2
SheMov-ad322157891cec53a7b660629d7c244e75df81d5.zip
Act on doubleClick in FileTreeWidget
When doubleclicking a picture in FileTreeWidget the pictureViewer is shown. Doubleclicking a movie file launches the default movie player. Since PictureViewer is now used in FileSystemWidget and ArchiveTreeView a global instance is needed. The appropriate place for this is a singleton. Since we already had a singleton for QAbstractItemModels I renamed it to SmGlobals and added a function to return a PictureViewer object. Renaming it was quite easy thanks to QtCreator's ability to rename variable names.
-rw-r--r--TODOS8
-rw-r--r--archivetreeview.cpp10
-rw-r--r--filestreewidget.cpp39
-rw-r--r--filestreewidget.h3
-rw-r--r--filesystemwidget.cpp3
-rw-r--r--mappingtablewidget.cpp4
-rw-r--r--newmoviewizard.cpp16
-rw-r--r--seriestreewidget.cpp8
-rw-r--r--shemov.cpp5
-rw-r--r--shemov.pro4
-rw-r--r--smglobals.cpp (renamed from smmodelsingleton.cpp)22
-rw-r--r--smglobals.h (renamed from smmodelsingleton.h)17
12 files changed, 92 insertions, 47 deletions
diff --git a/TODOS b/TODOS
index 947679a..efd3ac9 100644
--- a/TODOS
+++ b/TODOS
@@ -22,12 +22,12 @@ SheMov (MainWindow)
TODOS:
-updateSelectionCount for TreeView
--tabChanged for TreeView
+-tabChanged for TreeView (done)
-File properties for TreeView
--Fix database access for good!
+-Fix database access for good! (done)
-Fix statistics menu!
--rename "Tree"
--act on doubleclick in TreeView
+-rename "Tree" (done)
+-act on doubleclick in TreeView (done)
-Finish this file
-Fix Unable to free statement on exit
diff --git a/archivetreeview.cpp b/archivetreeview.cpp
index 23574cc..412591b 100644
--- a/archivetreeview.cpp
+++ b/archivetreeview.cpp
@@ -18,7 +18,7 @@
#include <QProcess>
#include "archivetreeview.h"
-#include "smmodelsingleton.h"
+#include "smglobals.h"
#include "smtreemodel.h"
#include "seriestreewidget.h"
#include "filestreewidget.h"
@@ -30,19 +30,19 @@
ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){
// models
- mActorsModel = static_cast<MappingTableModel*>(SmModelSingleton::instance()->model("actors"));
- mGenresModel = static_cast<MappingTableModel*>(SmModelSingleton::instance()->model("genres"));
+ mActorsModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model("actors"));
+ mGenresModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model("genres"));
// series view
mSeriesWidget = new SeriesTreeWidget;
QItemSelectionModel *selModel = mSeriesWidget->seriesTree()->selectionModel();
connect(selModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(currentChanged(QItemSelection,QItemSelection)));
connect(mSeriesWidget->seriesTree(), SIGNAL(doubleClicked(QModelIndex)), this, SLOT(playSelected()));
- mSeriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
+ mSeriesModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
// files view
mFilesWidget = new FilesTreeWidget;
- QAbstractItemModel *filesModel = SmModelSingleton::instance()->model("FilesModel");
+ QAbstractItemModel *filesModel = SmGlobals::instance()->model("FilesModel");
mFilesModel = static_cast<FilesTreeModel*>(filesModel);
for(int i = 5; i < 11; ++i){
mFilesWidget->filesTree()->setColumnHidden(i, true);
diff --git a/filestreewidget.cpp b/filestreewidget.cpp
index 89de946..2d41e34 100644
--- a/filestreewidget.cpp
+++ b/filestreewidget.cpp
@@ -16,20 +16,22 @@
#include <QLabel>
#include <QSpinBox>
#include <QPushButton>
+#include <QProcess>
#include <QDebug>
#include "filestreewidget.h"
-#include "smmodelsingleton.h"
+#include "smglobals.h"
#include "filestreemodel.h"
#include "seriestreemodel.h"
#include "helper.h"
+#include "pictureviewer.h"
FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent), mSelectedSize(0){
//the view
mView = new FilesTreeView;
mView->setSelectionMode(QAbstractItemView::ExtendedSelection);
- mModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel"));
+ mModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
mProxy = new FilesTreeSortModel(this);
mProxy->setSourceModel(mModel);
mView->setModel(mProxy);
@@ -37,14 +39,16 @@ FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent), mSelectedSi
QItemSelectionModel *selModel = mView->selectionModel();
connect(selModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(fileSelectionChanged(QModelIndex,QModelIndex)));
connect(selModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(fileSelectionChanged(QItemSelection,QItemSelection)));
+ connect(mView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(itemDoubleClicked(QModelIndex)));
//layout
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(mView);
setLayout(mainLayout);
- //series model
- mSeriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
+ //globals
+ mSeriesModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
+ mPictureViewer = SmGlobals::instance()->pictureViewer();
}
void FilesTreeWidget::moveToBurn(){
@@ -149,6 +153,31 @@ void FilesTreeWidget::fileSelectionChanged(const QModelIndex &current, const QMo
}
}
+void FilesTreeWidget::itemDoubleClicked(const QModelIndex &index){
+ int dvdNo = index.data(FilesTreeModel::DvdNoRole).toInt();
+ if(dvdNo != -1){
+ QString msg = QString(tr("%1 is archived on DVD %2.")).arg(index.data().toString()).arg(QString::number(index.data(FilesTreeModel::DvdNoRole).toInt()));
+ QMessageBox::critical(this, tr("Error"), msg);
+ return;
+ }
+ QString file = index.data(FilesTreeModel::FullPathRole).toString();
+ QString mimeType = Helper::mimeType(file);
+ if(mimeType.startsWith("image")){
+ mPictureViewer->showPic(file);
+ return;
+ }else{
+ QPair<QString, QStringList> data = Helper::programData("movieviewer", QString());
+ if(data.first.isEmpty()){
+ QMessageBox::critical(this, tr("Error"), tr("No viedeo viewer configured."));
+ return;
+ }
+ QString program = data.first;
+ QStringList args = data.second;
+ args << file;
+ QProcess::startDetached(program, args);
+ }
+}
+
void FilesTreeWidget::fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){
QModelIndexList sel = selected.indexes();
QModelIndexList desel = deselected.indexes();
@@ -199,7 +228,7 @@ DvdNoDialog::DvdNoDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f
spinBoxLayout->addWidget(l1);
spinBoxLayout->addWidget(mDvdNo);
mDvdNo->setMinimum(-1);
- SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
+ SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
int nextDvdNo = seriesModel->findNextDvdNo();
mDvdNo->setValue(nextDvdNo);
diff --git a/filestreewidget.h b/filestreewidget.h
index aafbe97..6f87e62 100644
--- a/filestreewidget.h
+++ b/filestreewidget.h
@@ -17,6 +17,7 @@ class FilesTreeView;
class FilesTreeModel;
class FilesTreeSortModel;
class SeriesTreeModel;
+class PictureViewer;
class QContextMenuEvent;
class QSpinBox;
class QPushButton;
@@ -36,6 +37,7 @@ class FilesTreeWidget : public QWidget {
private slots:
void fileSelectionChanged(const QModelIndex &current, const QModelIndex &previous);
void fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+ void itemDoubleClicked(const QModelIndex &index);
signals:
void sizeChanged(qint64);
@@ -46,6 +48,7 @@ class FilesTreeWidget : public QWidget {
FilesTreeModel *mModel;
FilesTreeSortModel *mProxy;
SeriesTreeModel *mSeriesModel;
+ PictureViewer *mPictureViewer;
QModelIndexList mSelectedFiles;
qint64 mSelectedSize;
};
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp
index 4959a66..67facb9 100644
--- a/filesystemwidget.cpp
+++ b/filesystemwidget.cpp
@@ -30,6 +30,7 @@
#include "helper.h"
#include "messagedialog.h"
#include "pictureviewer.h"
+#include "smglobals.h"
FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) {
mModel = new QFileSystemModel;
@@ -62,7 +63,7 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) {
mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection);
mFileView->setEditTriggers(QAbstractItemView::NoEditTriggers);
- mPicViewer = new PictureViewer;
+ mPicViewer = SmGlobals::instance()->pictureViewer();
QString title = QString(tr("%1 - Rename file")).arg(qApp->applicationName());
mRenameDialog = new MessageDialog(tr("Rename dummy to:"), title, this);
diff --git a/mappingtablewidget.cpp b/mappingtablewidget.cpp
index a96ff1d..85e0afb 100644
--- a/mappingtablewidget.cpp
+++ b/mappingtablewidget.cpp
@@ -17,7 +17,7 @@
#include "mappingtablewidget.h"
#include "mappingtablemodel.h"
-#include "smmodelsingleton.h"
+#include "smglobals.h"
MappingTableWidget::MappingTableWidget(const QString &table, QWidget *parent) : QWidget(parent), mTable(table), mCurrentId(-1){
//the view
@@ -28,7 +28,7 @@ MappingTableWidget::MappingTableWidget(const QString &table, QWidget *parent) :
mView->setModel(mModel);
//mapping model
- mMappingModel = static_cast<MappingTableModel*>(SmModelSingleton::instance()->model(mTable));
+ mMappingModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model(mTable));
//editor
QHBoxLayout *itemEditLayout = new QHBoxLayout;
diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp
index cacd891..9a47a64 100644
--- a/newmoviewizard.cpp
+++ b/newmoviewizard.cpp
@@ -26,7 +26,7 @@
#include "smtreeitem.h"
#include "seriestreemodel.h"
#include "filestreemodel.h"
-#include "smmodelsingleton.h"
+#include "smglobals.h"
#include "mappingtablewidget.h"
#include "mappingtablemodel.h"
#include "filestreemodel.h"
@@ -40,8 +40,8 @@ NewMovieWizard::NewMovieWizard(QWidget *parent) : QWizard(parent){
void NewMovieWizard::accept(){
//conjure up models
- SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
- FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel"));
+ SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
+ FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
//handle series
QString series = field("title").toString();
@@ -97,14 +97,14 @@ void NewMovieWizard::accept(){
MovieMappingPage *actorPage = static_cast<MovieMappingPage*>(page(1));
MappingTableItemModel *actorItemModel = actorPage->model();
QStringList actors = actorItemModel->stringList();
- MappingTableModel *actorModel = static_cast<MappingTableModel*>(SmModelSingleton::instance()->model("actors"));
+ MappingTableModel *actorModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model("actors"));
actorModel->setMappings(actors, seriesPartId);
//handle genres
MovieMappingPage *genrePage = static_cast<MovieMappingPage*>(page(2));
MappingTableItemModel *genreItemModel = genrePage->model();
QStringList genres = genreItemModel->stringList();
- MappingTableModel *genreModel = static_cast<MappingTableModel*>(SmModelSingleton::instance()->model("genres"));
+ MappingTableModel *genreModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model("genres"));
genreModel->setMappings(genres, seriesPartId);
//done
@@ -148,7 +148,7 @@ MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){
l1->setBuddy(mTitle);
movieTitleLayout->addWidget(l1);
movieTitleLayout->addWidget(mTitle);
- SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
+ SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
QCompleter *completer = new QCompleter(this);
completer->setModel(seriesModel);
mTitle->setCompleter(completer);
@@ -290,7 +290,7 @@ void MovieInfoPage::typeChanged(QString type){
}
void MovieInfoPage::setNextDvdNo(){
- SeriesTreeModel *seriesTreeModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
+ SeriesTreeModel *seriesTreeModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
int nextdvd = seriesTreeModel->findNextDvdNo();
mDvdNo->setValue(nextdvd + 1);
}
@@ -309,7 +309,7 @@ MovieMappingPage::MovieMappingPage(const QString &table, QWidget *parent) : QWiz
}
WizardTreeModel::WizardTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){
- FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel"));
+ FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
mFileTypeMap = filesModel->fileTypes();
}
diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp
index 46ef609..ef802f6 100644
--- a/seriestreewidget.cpp
+++ b/seriestreewidget.cpp
@@ -25,7 +25,7 @@
#include "seriestreewidget.h"
#include "smtreemodel.h"
-#include "smmodelsingleton.h"
+#include "smglobals.h"
#include "seriestreemodel.h"
#include "filestreemodel.h"
#include "helper.h"
@@ -46,7 +46,7 @@ SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){
//the view
mView = new SeriesTreeView;
mProxy = new SeriesTreeSortModel(this);
- mModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
+ mModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel"));
mProxy->setSourceModel(mModel);
mView->setModel(mProxy);
mView->setSortingEnabled(true);
@@ -229,7 +229,7 @@ void SeriesTreeWidget::addCover(){
QString fileName = mCoverDialog->file();
QFileInfo fi(fileName);
if(fi.exists()){
- FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel"));
+ FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
int seriesPartId = real.data(SeriesTreeModel::SeriesPartIdRole).toInt();
int type = mCoverDialog->fileType();
if(filesModel->addFile(fileName, type, 0, -1, seriesPartId, -1)){
@@ -274,7 +274,7 @@ AddCoverDialog::AddCoverDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(par
fileLayout->addWidget(mSelectFile);
//file type
- mFilesModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel"));
+ mFilesModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
QHash<int, QString> coverTypes = mFilesModel->coverTypes();
mFileType = new QComboBox;
QStringList types;
diff --git a/shemov.cpp b/shemov.cpp
index b8fb5fe..8b3e82b 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -33,12 +33,11 @@
#include "filesystemwidget.h"
#include "fileview.h"
#include "configurationdialog.h"
-//#include "archiveeditdialog.h"
#include "statisticsdialog.h"
#include "filesystemfileproxy.h"
#include "pictureviewer.h"
#include "archivetreeview.h"
-#include "smmodelsingleton.h"
+#include "smglobals.h"
#include "seriestreewidget.h"
#include "newmoviewizard.h"
#include "filestreewidget.h"
@@ -92,7 +91,7 @@ void SheMov::closeEvent(QCloseEvent *event){
mFSWidget->writeSettings();
mFSWidget->pictureViewer()->close();
mATree->seriesWidget()->writeSettings();
- delete SmModelSingleton::instance();
+ delete SmGlobals::instance();
writeSettings();
event->accept();
}
diff --git a/shemov.pro b/shemov.pro
index 6569e7a..865e1d3 100644
--- a/shemov.pro
+++ b/shemov.pro
@@ -27,7 +27,7 @@ SOURCES = main.cpp \
pictureviewerinfoitem.cpp \
smtreeitem.cpp \
smtreemodel.cpp \
- smmodelsingleton.cpp \
+ smglobals.cpp \
archivetreeview.cpp \
seriestreewidget.cpp \
seriestreemodel.cpp \
@@ -58,7 +58,7 @@ HEADERS = listitem.h \
pictureviewerinfoitem.h \
smtreeitem.h \
smtreemodel.h \
- smmodelsingleton.h \
+ smglobals.h \
archivetreeview.h \
seriestreewidget.h \
seriestreemodel.h \
diff --git a/smmodelsingleton.cpp b/smglobals.cpp
index 41959a5..61530d1 100644
--- a/smmodelsingleton.cpp
+++ b/smglobals.cpp
@@ -11,23 +11,24 @@
#include <QMessageBox>
#include <QSettings>
-#include "smmodelsingleton.h"
+#include "smglobals.h"
#include "seriestreemodel.h"
#include "filestreemodel.h"
#include "mappingtablemodel.h"
+#include "pictureviewer.h"
-SmModelSingleton *SmModelSingleton::mInstance = 0;
+SmGlobals *SmGlobals::mInstance = 0;
-SmModelSingleton::~SmModelSingleton(){
+SmGlobals::~SmGlobals(){
foreach(QAbstractItemModel *model, mModels.values()){
delete model;
}
QSqlDatabase::removeDatabase("treedb");
}
-SmModelSingleton *SmModelSingleton::instance(){
+SmGlobals *SmGlobals::instance(){
if(!mInstance){
- mInstance = new SmModelSingleton;
+ mInstance = new SmGlobals;
if(!QSqlDatabase::contains("treedb")){
QSettings s;
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "treedb");
@@ -43,7 +44,7 @@ SmModelSingleton *SmModelSingleton::instance(){
return mInstance;
}
-QAbstractItemModel *SmModelSingleton::model(const QString &which){
+QAbstractItemModel *SmGlobals::model(const QString &which){
if(which == "SeriesModel"){
if(!mModels.contains(which)){
QStringList headers = QStringList() << tr("Series") << tr("Series ID") << tr("Series part ID") << tr("Part") << tr("Type");
@@ -71,3 +72,12 @@ QAbstractItemModel *SmModelSingleton::model(const QString &which){
}
return mModels.contains(which) ? mModels.value(which) : 0;
}
+
+PictureViewer *SmGlobals::pictureViewer() {
+ if(!mPictureViewer){
+ mPictureViewer = new PictureViewer;
+ }
+ return mPictureViewer;
+}
+
+SmGlobals::SmGlobals() : mPictureViewer(0) {}
diff --git a/smmodelsingleton.h b/smglobals.h
index e8a3eaf..50db16a 100644
--- a/smmodelsingleton.h
+++ b/smglobals.h
@@ -11,20 +11,23 @@
#include <QHash>
class QAbstractItemModel;
+class PictureViewer;
-class SmModelSingleton : public QObject {
+class SmGlobals : public QObject {
Q_OBJECT
public:
- ~SmModelSingleton();
- static SmModelSingleton *instance();
+ ~SmGlobals();
+ static SmGlobals *instance();
QAbstractItemModel *model(const QString &which);
+ PictureViewer *pictureViewer();
private:
- SmModelSingleton() {}
- SmModelSingleton(const SmModelSingleton &other);
- SmModelSingleton &operator=(const SmModelSingleton &other);
- static SmModelSingleton *mInstance;
+ SmGlobals();
+ SmGlobals(const SmGlobals &other);
+ SmGlobals &operator=(const SmGlobals &other);
+ static SmGlobals *mInstance;
QHash<QString, QAbstractItemModel*> mModels;
+ PictureViewer *mPictureViewer;
};
#endif