diff options
author | Arno <am@disconnect.de> | 2010-07-24 17:15:00 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-07-24 17:15:00 +0200 |
commit | ad322157891cec53a7b660629d7c244e75df81d5 (patch) | |
tree | 0ffbc54d683f6e8c4925b669bb1732ac52cae0de | |
parent | b465c59cce7418968f268b9888a8236be281fda5 (diff) | |
download | SheMov-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-- | TODOS | 8 | ||||
-rw-r--r-- | archivetreeview.cpp | 10 | ||||
-rw-r--r-- | filestreewidget.cpp | 39 | ||||
-rw-r--r-- | filestreewidget.h | 3 | ||||
-rw-r--r-- | filesystemwidget.cpp | 3 | ||||
-rw-r--r-- | mappingtablewidget.cpp | 4 | ||||
-rw-r--r-- | newmoviewizard.cpp | 16 | ||||
-rw-r--r-- | seriestreewidget.cpp | 8 | ||||
-rw-r--r-- | shemov.cpp | 5 | ||||
-rw-r--r-- | shemov.pro | 4 | ||||
-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
@@ -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 ¤t, 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 ¤t, 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; @@ -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(); } @@ -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 |