#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "shemovcleaner.h" #include "torrentwidget.h" #include "filewidget.h" #include "actorwidget.h" #include "torrentdisplay.h" #include "configurationwidget.h" #include "globals.h" ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(parent, f) { //general setup qApp->setWindowIcon(QIcon(":/clean_tampon.png")); setMinimumWidth(800); setMinimumHeight(600); openDatabase(); createStatusBar(); createGlobalActions(); mTab = new QTabWidget; mTorrentTab = new TorrentWidget; mFileTab = new FileWidget; mFileTab->setProgressBar(mProgressBar); mFileTab->gatherData(); mActorTab = new ActorWidget; mActorTab->setProgressBar(mProgressBar); mActorTab->gatherData(); mActorTab->readSettings(); mTab->addTab(mTorrentTab, tr("&Torrents")); mTab->addTab(mFileTab, tr("Fi&les")); mTab->addTab(mActorTab, tr("&Actors")); setCentralWidget(mTab); connect(mTorrentTab, SIGNAL(statusMessage(QString)), this, SLOT(statusBarMessage(QString))); connect(mTorrentTab, SIGNAL(selectionCountChanged(QString)), this, SLOT(setSelectionCount(QString))); connect(mFileTab, SIGNAL(statusMessage(QString)), this, SLOT(statusBarMessage(QString))); connect(mFileTab, SIGNAL(selectionCountChanged(QString)), this, SLOT(setSelectionCount(QString))); connect(mFileTab, SIGNAL(durationChanged(QString)), this, SLOT(setDuration(QString))); connect(mTab, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); QMenu *helpMenu = new QMenu(tr("&Help")); QAction *aboutThisA = new QAction(tr("About ShemovCleaner..."), this); connect(aboutThisA, SIGNAL(triggered()), this, SLOT(aboutThisProgram())); helpMenu->addAction(aboutThisA); helpMenu->addSeparator(); QAction *aboutQtA = new QAction(tr("About Qt..."), this); connect(aboutQtA, SIGNAL(triggered()), qApp, SLOT(aboutQt())); helpMenu->addAction(aboutQtA); mTorrentTab->menuBar()->addMenu(helpMenu); mFileTab->menuBar()->addMenu(helpMenu); mActorTab->menuBar()->addMenu(helpMenu); QSettings s; restoreGeometry(s.value("geometry").toByteArray()); mTorrentTab->torrentFileView()->setFocus(); readSettings(); } ShemovCleaner::~ShemovCleaner(){ writeSettings(); } void ShemovCleaner::statusBarMessage(const QString &msg){ statusBar()->showMessage(msg); } void ShemovCleaner::setDuration(const QString &msg){ mDuration->setText(msg); } void ShemovCleaner::setSelectionCount(const QString &msg){ mSelected->setText(msg); } void ShemovCleaner::configure(){ ConfigurationWidget w(this); int res = w.exec(); if(res == QDialog::Accepted){ openDatabase(); } } void ShemovCleaner::tabChanged(int idx){ if(idx == Torrents){ mTorrentTab->fileSelectionChanged(QItemSelection(), QItemSelection()); setDuration("00:00:00"); }else if(idx == Videos){ mFileTab->fileSelectionChanged(QItemSelection(), QItemSelection()); mFileTab->fileView()->setFocus(); } } void ShemovCleaner::closeEvent(QCloseEvent *e){ int retval = QMessageBox::question(this, tr("Exit"), tr("Really close?")); if(retval == QMessageBox::Yes){ QSettings s; s.setValue("geometry", saveGeometry()); QMainWindow::closeEvent(e); }else{ e->ignore(); } } void ShemovCleaner::createStatusBar(){ QLabel *l1 = new QLabel(tr("Sel.")); mSelected = new QLabel("000/000"); mSelected->setFrameStyle(QFrame::Panel | QFrame::Sunken); QLabel *l2 = new QLabel(tr("Dur.")); mDuration = new QLabel("00:00:00"); mDuration->setFrameStyle(QFrame::Panel | QFrame::Sunken); mProgressBar = new QProgressBar; mProgressBar->setMaximumWidth(150); mProgressBar->setMaximumHeight(10); statusBar()->addPermanentWidget(mProgressBar); statusBar()->addPermanentWidget(l1); statusBar()->addPermanentWidget(mSelected); statusBar()->addPermanentWidget(l2); statusBar()->addPermanentWidget(mDuration); } void ShemovCleaner::createGlobalActions(){ QAction *quitA = new QAction(tr("Quit"), this); quitA->setShortcut(tr("CTRL+Q")); connect(quitA, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); quitA->setData(Globals::QuitAction); Globals::instance()->addAction(quitA); QAction *configA = new QAction(QIcon(":/chastity_belt.png"), tr("Configure..."), this); connect(configA, SIGNAL(triggered()), this, SLOT(configure())); configA->setData(Globals::ConfigAction); Globals::instance()->addAction(configA); } void ShemovCleaner::openDatabase(){ QSettings s; QString dbhost = s.value("dbhost").toString(); QString dbuser = s.value("dbuser").toString(); QString dbpass = s.value("dbpass").toString(); QString dbname = s.value("dbname").toString(); if(!QSqlDatabase::contains("shemovdb")){ QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "shemovdb"); db.setHostName(dbhost); db.setUserName(dbuser); db.setPassword(dbpass); db.setDatabaseName(dbname); if(!db.open()){ int res = ConfigurationWidget(this).exec(); if(res == QDialog::Accepted){ openDatabase(); }else{ QMessageBox::critical(this, tr("Error"), tr("Could not open database. Giving up!")); qApp->closeAllWindows(); } } } } void ShemovCleaner::readSettings(){ QSettings s; int curTab = s.value("startupTab").toInt(); mTab->setCurrentIndex(curTab); } void ShemovCleaner::writeSettings(){ int curTab = mTab->currentIndex(); QSettings s; s.setValue("startupTab", curTab); } void ShemovCleaner::aboutThisProgram(){ QMessageBox::about(this, tr("About ShemovCleaner"), tr("A little helper program for the big sister SheMov")); } QAction *ShemovCleaner::createSeparator(){ QAction *retval = new QAction(this); retval->setSeparator(true); return retval; }