/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "shemov.h" #include "filesystemwidget.h" #include "fileview.h" #include "configurationdialog.h" #include "archiveeditdialog.h" #include "moviemodel.h" #include "listmodel.h" #include "archiveviewwidget.h" #include "editarchiveitemdialog.h" #include "coverarchiveeditor.h" SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) { qApp->setWindowIcon(QIcon(":/shemov.png")); QSettings s; QString dbhost = s.value("database/hostname").toString(); QString dbname = s.value("database/dbname").toString(); QString dbuser = s.value("database/dbuser").toString(); QString dbpass = s.value("database/dbpass").toString(); QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName(dbhost); db.setDatabaseName(dbname); db.setUserName(dbuser); db.setPassword(dbpass); if(!db.open()){ QMessageBox::critical(this, tr("Error"), tr("Could not open database. Please configure the database and restart the program")); } mMovieModel = new MovieModel(this); mGenreModel = new ListModel("genre", this); mActorModel = new ListModel("actor", this); mFSWidget = new FilesystemWidget; setWindowTitle(mFSWidget->windowTitle()); mTab = new QTabWidget; mTab->addTab(mFSWidget, tr("Filemanager")); mAVWidget = new ArchiveViewWidget(mMovieModel, mGenreModel, mActorModel); mTab->addTab(mAVWidget, tr("Archive")); connect(mAVWidget, SIGNAL(windowTitle(const QString &)), this, SLOT(newWindowTitle(const QString &))); mAEdit = new ArchiveEditDialog(mGenreModel, mActorModel, this); mAEdit->setMovieModel(mMovieModel); mFSWidget->setArchiveDialog(mAEdit); mAItemEdit = new EditArchiveItemDialog(mGenreModel, mActorModel, mMovieModel, this); mAVWidget->setEditDialog(mAItemEdit); mCEdit = new CoverArchiveEditor(mMovieModel, this); mAVWidget->setCoverEditDialog(mCEdit); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mTab); createStatusbar(); createActions(); createMenus(); mFSWidget->fileView()->findActions(); connect(mFSWidget->fileView()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); connect(mFSWidget, SIGNAL(windowTitle(const QString &)), this, SLOT(newWindowTitle(const QString &))); connect(mFSWidget->fileView(), SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &))); connect(mFSWidget, SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &))); connect(mFSWidget, SIGNAL(newTemplate(const QString &)), this, SLOT(setTemplate(const QString &))); connect(mAVWidget, SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &))); connect(mTab, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); QWidget *centralWidget = new QWidget; centralWidget->setLayout(mainLayout); setCentralWidget(centralWidget); showMaximized(); mFSWidget->fileView()->setFocus(Qt::ActiveWindowFocusReason); } void SheMov::updateSelectionCount(const QItemSelection & /* sel */, const QItemSelection & /* prev */){ mSelectedItems->setText(QString::number(mFSWidget->fileView()->selectionModel()->selectedRows().count())); } void SheMov::newWindowTitle(const QString &title){ setWindowTitle(title); } void SheMov::statusbarMessage(const QString &message){ statusBar()->showMessage(message); } void SheMov::setTemplate(const QString &newTemplate){ mTemplate->setText(newTemplate); } void SheMov::configure(){ ConfigurationDialog dlg(this); dlg.exec(); createExtractMenu(); } void SheMov::tabChanged(int newTab){ mEditFSMenuA->setVisible(newTab == 0); mEditArchiveMenuA->setVisible(newTab == 1); } void SheMov::createStatusbar(){ QLabel *selCountL = new QLabel(tr("Sel. Items")); mSelectedItems = new QLabel("0"); mSelectedItems->setFrameStyle(QFrame::Panel | QFrame::Sunken); statusBar()->addPermanentWidget(selCountL); statusBar()->addPermanentWidget(mSelectedItems); QLabel *templateL = new QLabel(tr("Template")); mTemplate = new QLabel(tr("No template set")); mTemplate->setFrameStyle(QFrame::Panel | QFrame::Sunken); statusBar()->addPermanentWidget(templateL); statusBar()->addPermanentWidget(mTemplate); } void SheMov::createActions(){ //File menu mQuitA = new QAction(tr("Quit"), this); mQuitA->setShortcut(tr("CTRL+q")); //Edit menu (FS) mCdupA = new QAction(tr("Go up"), this); connect(mCdupA, SIGNAL(triggered()), mFSWidget, SLOT(parentDir())); mFSWidget->fileView()->addAction(mCdupA); connect(mQuitA, SIGNAL(triggered()), qApp, SLOT(quit())); mMarkFilesA = new QAction(tr("Select files..."), this); mMarkFilesA->setShortcut(tr("CTRL++")); mFSWidget->fileView()->addAction(mMarkFilesA); connect(mMarkFilesA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(markFiles())); mUnmarkFilesA = new QAction(tr("Deselect all files"), this); mUnmarkFilesA->setShortcut(tr("CTRL+-")); mFSWidget->fileView()->addAction(mUnmarkFilesA); connect(mUnmarkFilesA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(unmarkFiles())); mCreateFolderA = new QAction(tr("Create folder..."), this); mCreateFolderA->setShortcut(tr("CTRL+n")); connect(mCreateFolderA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(createFolder())); mFSWidget->fileView()->addAction(mCreateFolderA); mDeleteFilesA = new QAction(tr("Delete selected..."), this); mDeleteFilesA->setShortcut(tr("CTRL+d")); mDeleteFilesA->setData("DA"); connect(mDeleteFilesA, SIGNAL(triggered()), mFSWidget, SLOT(deleteFiles())); mFSWidget->fileView()->addAction(mDeleteFilesA); mRefreshA = new QAction(tr("Refresh"), this); mRefreshA->setShortcut(Qt::Key_F4); mRefreshA->setData("RE"); connect(mRefreshA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(refresh())); mFSWidget->fileView()->addAction(mRefreshA); mCopyA = new QAction(tr("Copy file(s)..."), this); mCopyA->setShortcut(tr("CTRL+v")); connect(mCopyA, SIGNAL(triggered()), mFSWidget, SLOT(copyFiles())); mFSWidget->fileView()->addAction(mCopyA); mMoveA = new QAction(tr("Move file(s)..."), this); mMoveA->setShortcut(tr("CTRL+m")); connect(mMoveA, SIGNAL(triggered()), mFSWidget, SLOT(moveFiles())); mFSWidget->fileView()->addAction(mMoveA); mRenameA = new QAction(tr("Rename file..."), this); mRenameA->setShortcut(tr("CTRL+r")); connect(mRenameA, SIGNAL(triggered()), mFSWidget, SLOT(renameFile())); mFSWidget->fileView()->addAction(mRenameA); mConfigA = new QAction(tr("Configure..."), this); connect(mConfigA, SIGNAL(triggered()), this, SLOT(configure())); mArchiveA = new QAction(tr("Archive files..."), this); mArchiveA->setShortcut(tr("CTRL+a")); connect(mArchiveA, SIGNAL(triggered()), mFSWidget, SLOT(archiveFiles())); mFSWidget->fileView()->addAction(mArchiveA); //Edit menu rename submenu mTemplateA = new QAction(tr("Set as template"), this); mTemplateA->setShortcut(tr("CTRL+t")); connect(mTemplateA, SIGNAL(triggered()), mFSWidget, SLOT(setTemplate())); mTemplateA->setData("RenameMenu"); mFSWidget->fileView()->addAction(mTemplateA); mRenameMapper = new QSignalMapper(this); mRenameCoverFA = new QAction(tr("Rename to front cover"), this); mRenameCoverFA->setShortcut(tr("CTRL+f")); connect(mRenameCoverFA, SIGNAL(triggered()), mRenameMapper, SLOT(map())); mRenameMapper->setMapping(mRenameCoverFA, tr("front")); mRenameCoverFA->setData("RenameMenu"); mFSWidget->fileView()->addAction(mRenameCoverFA); mRenameCoverBA = new QAction(tr("Rename to back cover"), this); mRenameCoverBA->setShortcut(tr("CTRL+b")); connect(mRenameCoverBA, SIGNAL(triggered()), mRenameMapper, SLOT(map())); mRenameMapper->setMapping(mRenameCoverBA, tr("back")); mRenameCoverBA->setData("RenameMenu"); mFSWidget->fileView()->addAction(mRenameCoverBA); mRenameCoverCA = new QAction(tr("Rename to cover"), this); mRenameCoverCA->setShortcut(tr("CTRL+c")); connect(mRenameCoverCA, SIGNAL(triggered()), mRenameMapper, SLOT(map())); mRenameMapper->setMapping(mRenameCoverCA, tr("cover")); mRenameCoverCA->setData("RenameMenu"); mFSWidget->fileView()->addAction(mRenameCoverCA); connect(mRenameMapper, SIGNAL(mapped(const QString &)), mFSWidget, SLOT(renameCover(const QString &))); //Edit menu extract submenu mExtractMapper = new QSignalMapper(this); connect(mExtractMapper, SIGNAL(mapped(const QString &)), mFSWidget, SLOT(extract(const QString &))); mExtractMenu = new QMenu(tr("E&xtract to..."), this); createExtractMenu(); //Edit menu (archive) mEditArchiveFileA = new QAction(tr("Edit file..."), this); mEditArchiveFileA->setShortcut(tr("CTRL+e")); mAVWidget->fileView()->addAction(mEditArchiveFileA); connect(mEditArchiveFileA, SIGNAL(triggered()), mAVWidget, SLOT(editFile())); mEditArchiveCoverA = new QAction(tr("Edit covers..."), this); mAVWidget->fileView()->addAction(mEditArchiveCoverA); connect(mEditArchiveCoverA, SIGNAL(triggered()), mAVWidget, SLOT(editCovers())); mAddMovieManuallyA = new QAction(tr("Add movie manually..."), this); mAVWidget->fileView()->addAction(mAddMovieManuallyA); connect(mAddMovieManuallyA, SIGNAL(triggered()), mAVWidget, SLOT(addMovie())); } void SheMov::createMenus(){ QMenu *fileMenu = new QMenu(tr("&File"), this); fileMenu->addAction(mQuitA); mEditFSMenu = new QMenu(tr("&Edit"), this); mEditFSMenu->addAction(mCdupA); mEditFSMenu->addSeparator(); mEditFSMenu->addAction(mMarkFilesA); mEditFSMenu->addAction(mUnmarkFilesA); mEditFSMenu->addSeparator(); mEditFSMenu->addAction(mCreateFolderA); mEditFSMenu->addAction(mDeleteFilesA); mEditFSMenu->addSeparator(); mEditFSMenu->addAction(mCopyA); mEditFSMenu->addAction(mMoveA); mEditFSMenu->addAction(mRenameA); mEditFSMenu->addAction(mArchiveA); QMenu *renameMenu = new QMenu(tr("&Rename..."), this); renameMenu->addAction(mTemplateA); renameMenu->addAction(mRenameCoverFA); renameMenu->addAction(mRenameCoverBA); renameMenu->addAction(mRenameCoverCA); mEditFSMenu->addMenu(renameMenu); mEditFSMenu->addSeparator(); mEditFSMenu->addMenu(mExtractMenu); mEditFSMenu->addSeparator(); mEditFSMenu->addAction(mRefreshA); mEditFSMenu->addSeparator(); mEditFSMenu->addAction(mConfigA); mEditArchiveMenu = new QMenu(tr("&Edit archive"), this); mEditArchiveMenu->addAction(mEditArchiveFileA); mEditArchiveMenu->addAction(mEditArchiveCoverA); menuBar()->addMenu(fileMenu); mEditFSMenuA = menuBar()->addMenu(mEditFSMenu); mEditArchiveMenuA = menuBar()->addMenu(mEditArchiveMenu); mEditArchiveMenuA->setVisible(false); } void SheMov::createExtractMenu(){ foreach(QAction *a, mExtractToA){ mFSWidget->fileView()->removeAction(a); delete a; } mExtractToA.clear(); mExtractMenu->clear(); QSettings s; QStringList locations = s.value("paths/extractpaths").toStringList(); foreach(QString p, locations){ QAction *a = new QAction(p, this); a->setData("ExtractMenu"); mFSWidget->fileView()->addAction(a); mExtractMenu->addAction(a); mExtractMapper->setMapping(a, p); connect(a, SIGNAL(triggered()), mExtractMapper, SLOT(map())); mExtractToA << a; } }