diff options
author | Arno <am@disconnect.de> | 2010-05-10 18:48:31 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-05-10 18:48:31 +0200 |
commit | 8e1b2c03076b9908fbc8eafe861845c2d11bd7f0 (patch) | |
tree | 5e6c563853b38211c00f5026308660af5957b9f7 | |
parent | 9f0caecf7875f998dc9c85d4f35f985335222d67 (diff) | |
download | SheMov-8e1b2c03076b9908fbc8eafe861845c2d11bd7f0.tar.gz SheMov-8e1b2c03076b9908fbc8eafe861845c2d11bd7f0.tar.bz2 SheMov-8e1b2c03076b9908fbc8eafe861845c2d11bd7f0.zip |
Redesign of ConfigurationDialog
Revamped ConfigurationDialog for more than one movie player or picture
viewers. Introduced a new widget ProgramConfigurator.
-rw-r--r-- | configurationdialog.cpp | 92 | ||||
-rw-r--r-- | configurationdialog.h | 8 | ||||
-rw-r--r-- | programconfigurator.cpp | 193 | ||||
-rw-r--r-- | programconfigurator.h | 60 | ||||
-rw-r--r-- | shemov.pro | 6 |
5 files changed, 298 insertions, 61 deletions
diff --git a/configurationdialog.cpp b/configurationdialog.cpp index 6c31232..e6b4e46 100644 --- a/configurationdialog.cpp +++ b/configurationdialog.cpp @@ -20,6 +20,7 @@ #include <QRegExp> #include "configurationdialog.h" +#include "programconfigurator.h" ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ //paths tab @@ -30,52 +31,32 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q QCompleter *fsCompleter = new QCompleter(this); fsCompleter->setModel(model); fsCompleter->setCompletionMode(QCompleter::PopupCompletion); - QLabel *l1 = new QLabel(tr("Path to &picture viewer")); - mPictureViewer = new QLineEdit; - mPictureViewer->setCompleter(fsCompleter); - l1->setBuddy(mPictureViewer); - pathGrid->addWidget(l1, 0, 0); - pathGrid->addWidget(mPictureViewer, 0, 1); - QLabel *l2 = new QLabel(tr("Arguments for picture viewer")); - mPictureViewerArgs = new QLineEdit; - pathGrid->addWidget(l2, 1, 0); - pathGrid->addWidget(mPictureViewerArgs, 1, 1); - QLabel *l3 = new QLabel(tr("Path to movie viewer")); - mMovieViewer = new QLineEdit; - mMovieViewer->setCompleter(fsCompleter); - l2->setBuddy(mMovieViewer); - pathGrid->addWidget(l3, 2, 0); - pathGrid->addWidget(mMovieViewer, 2, 1); - QLabel *l4 = new QLabel(tr("Arguments for movie viewer")); - mMovieViewerArgs = new QLineEdit; - pathGrid->addWidget(l4, 3, 0); - pathGrid->addWidget(mMovieViewerArgs, 3, 1); - QLabel *l5 = new QLabel(tr("Path to &archive program")); + QLabel *l1 = new QLabel(tr("Path to &archive program")); mArchiver = new QLineEdit; mArchiver->setCompleter(fsCompleter); - l5->setBuddy(mArchiver); - pathGrid->addWidget(l5, 4, 0); - pathGrid->addWidget(mArchiver, 4, 1); - QLabel *l6 = new QLabel(tr("Arguments for archive program")); + l1->setBuddy(mArchiver); + pathGrid->addWidget(l1, 0, 0); + pathGrid->addWidget(mArchiver, 0, 1); + QLabel *l2 = new QLabel(tr("Arguments for archive program")); mArchiverArgs = new QLineEdit; - l6->setBuddy(mArchiverArgs); - pathGrid->addWidget(l6, 5, 0); - pathGrid->addWidget(mArchiverArgs, 5, 1); - QLabel *l9 = new QLabel(tr("Archive directory")); + l2->setBuddy(mArchiverArgs); + pathGrid->addWidget(l2, 1, 0); + pathGrid->addWidget(mArchiverArgs, 1, 1); + QLabel *l3 = new QLabel(tr("Archive directory")); mArchiveDir = new QLineEdit; mArchiveDir->setCompleter(fsCompleter); - pathGrid->addWidget(l9, 6, 0); - pathGrid->addWidget(mArchiveDir, 6, 1); - QLabel *l7 = new QLabel(tr("Extraction paths")); + pathGrid->addWidget(l3, 2, 0); + pathGrid->addWidget(mArchiveDir, 2, 1); + QLabel *l4 = new QLabel(tr("Extraction paths")); mArchivePaths = new QComboBox; - pathGrid->addWidget(l7, 7, 0); - pathGrid->addWidget(mArchivePaths, 7, 1); - QLabel *l8 = new QLabel(tr("Enter new &extraction path")); + pathGrid->addWidget(l4, 3, 0); + pathGrid->addWidget(mArchivePaths, 3, 1); + QLabel *l5 = new QLabel(tr("Enter new &extraction path")); mExtractPath = new QLineEdit; mExtractPath->setCompleter(fsCompleter); - l8->setBuddy(mExtractPath); - pathGrid->addWidget(l8, 8, 0); - pathGrid->addWidget(mExtractPath, 8, 1); + l5->setBuddy(mExtractPath); + pathGrid->addWidget(l5, 4, 0); + pathGrid->addWidget(mExtractPath, 4, 1); mAddPath = new QPushButton(tr("Add path")); connect(mAddPath, SIGNAL(clicked()), this, SLOT(addPath())); mRemovePath = new QPushButton(tr("Remove path")); @@ -84,14 +65,13 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q pathButtonLayout->addStretch(); pathButtonLayout->addWidget(mAddPath); pathButtonLayout->addWidget(mRemovePath); - pathGrid->addLayout(pathButtonLayout, 9, 1); - QLabel *l10 = new QLabel(tr("Burn Directory")); + pathGrid->addLayout(pathButtonLayout, 5, 1); + QLabel *l6 = new QLabel(tr("Burn Directory")); mBurnDir = new QLineEdit; mBurnDir->setCompleter(fsCompleter); - pathGrid->addWidget(l10, 10, 0); - pathGrid->addWidget(mBurnDir, 10, 1); + pathGrid->addWidget(l6, 6, 0); + pathGrid->addWidget(mBurnDir, 6, 1); pathWidget->setLayout(pathGrid); - mTab->addTab(pathWidget, tr("Paths")); //ui tab QWidget *uiWidget = new QWidget; @@ -128,6 +108,14 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q uiWidget->setLayout(uiGrid); mTab->addTab(uiWidget, tr("User interface")); + // movie viewer + mMovieConfig = new ProgramConfigurator("movieviewer", "Movie viewer"); + mTab->addTab(mMovieConfig, tr("Movies")); + + // picture viewer + mPicConfig = new ProgramConfigurator("pictureviewer", "Picture viewer"); + mTab->addTab(mPicConfig, tr("Pictures")); + //database tab QWidget *databaseWidget = new QWidget; QGridLayout *dbGrid = new QGridLayout; @@ -228,12 +216,6 @@ void ConfigurationDialog::readSettings(){ QSettings s; //read paths - mPictureViewer->setText(s.value("paths/pictureviewer", "/usr/bin/gwenview").toString()); - QStringList pvArgs = s.value("paths/pictureviewerargs").toStringList(); - mPictureViewerArgs->setText(pvArgs.join(" ")); - mMovieViewer->setText(s.value("paths/movieviewer", "/usr/bin/mplayer").toString()); - QStringList mvArgs = s.value("paths/movieviewerargs").toStringList(); - mMovieViewerArgs->setText(mvArgs.join(" ")); mArchiver->setText(s.value("paths/archiver", "/usr/bin/7z").toString()); QStringList arArgs = s.value("paths/archiverargs").toStringList(); mArchiverArgs->setText(arArgs.join(" ")); @@ -266,12 +248,6 @@ void ConfigurationDialog::writeSettings(){ //write paths QRegExp splitAt("\\s+"); - s.setValue("paths/pictureviewer", mPictureViewer->text()); - QStringList pvArgs = mPictureViewerArgs->text().split(splitAt, QString::SkipEmptyParts); - s.setValue("paths/pictureviewerargs", pvArgs); - s.setValue("paths/movieviewer", mMovieViewer->text()); - QStringList mvArgs = mMovieViewerArgs->text().split(splitAt, QString::SkipEmptyParts); - s.setValue("paths/movieviewerargs", mvArgs); s.setValue("paths/archiver", mArchiver->text()); QStringList aArgs = mArchiverArgs->text().split(splitAt, QString::SkipEmptyParts); s.setValue("paths/archiverargs", aArgs); @@ -289,5 +265,11 @@ void ConfigurationDialog::writeSettings(){ s.setValue("database/dbname", mDatabaseName->text()); s.setValue("database/dbuser", mDatabaseUsername->text()); s.setValue("database/dbpass", mDatabasePassword->text()); + + //write movies + mMovieConfig->writeSettings(); + + //write pics + mPicConfig->writeSettings(); } diff --git a/configurationdialog.h b/configurationdialog.h index d5b1eda..b3324c5 100644 --- a/configurationdialog.h +++ b/configurationdialog.h @@ -15,6 +15,8 @@ class QTabWidget; class QLineEdit; class QComboBox; +class ProgramConfigurator; + class ConfigurationDialog : public QDialog { Q_OBJECT public: @@ -42,10 +44,8 @@ class ConfigurationDialog : public QDialog { QPushButton *mRemoveExpandPath; QPushButton *mSelect; QTabWidget *mTab; - QLineEdit *mPictureViewer; - QLineEdit *mPictureViewerArgs; - QLineEdit *mMovieViewer; - QLineEdit *mMovieViewerArgs; + ProgramConfigurator *mMovieConfig; + ProgramConfigurator *mPicConfig; QLineEdit *mArchiver; QLineEdit *mArchiverArgs; QLineEdit *mExtractPath; diff --git a/programconfigurator.cpp b/programconfigurator.cpp new file mode 100644 index 0000000..a557918 --- /dev/null +++ b/programconfigurator.cpp @@ -0,0 +1,193 @@ +/* + 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 <QPushButton> +#include <QComboBox> +#include <QLineEdit> +#include <QLabel> +#include <QGridLayout> +#include <QHBoxLayout> +#include <QCompleter> +#include <QSettings> +#include <QDirModel> +#include <QMessageBox> +#include <QRegExp> +#include <QFileInfo> + +#include "programconfigurator.h" + +ProgramConfigurator::ProgramConfigurator(const QString &prefix, const QString &description, QWidget *parent) : QWidget(parent), mPrefix(prefix), mDescription(description){ + QGridLayout *mainLayout = new QGridLayout; + QLabel *l1 = new QLabel(QString(tr("Select %1")).arg(mDescription)); + mProgramSelector = new QComboBox; + mainLayout->addWidget(l1, 0, 0); + mainLayout->addWidget(mProgramSelector, 0, 1); + QLabel *l2 = new QLabel(QString(tr("%1 name")).arg(mDescription)); + mNameEdit = new QLineEdit; + mainLayout->addWidget(l2, 1, 0); + mainLayout->addWidget(mNameEdit, 1, 1); + QLabel *l3 = new QLabel(QString(tr("%1 path")).arg(mDescription)); + mPathEdit = new QLineEdit; + QCompleter *fsCompleter = new QCompleter(this); + QDirModel *dirModel = new QDirModel(this); + fsCompleter->setModel(dirModel); + fsCompleter->setCompletionMode(QCompleter::PopupCompletion); + mPathEdit->setCompleter(fsCompleter); + mainLayout->addWidget(l3, 2, 0); + mainLayout->addWidget(mPathEdit, 2, 1); + QLabel *l4 = new QLabel(QString(tr("%2 arguments")).arg(mDescription)); + mArgumentsEdit = new QLineEdit; + mainLayout->addWidget(l4, 3, 0); + mainLayout->addWidget(mArgumentsEdit, 3, 1); + /*QString defaultProg; + QSettings s; + QString settingsString = QString("programs_%1/default").arg(mPrefix);*/ + mDefaultLabel = new QLabel; + mainLayout->addWidget(mDefaultLabel, 4, 0, 1, 2, Qt::AlignCenter); + mAdd = new QPushButton(tr("Add program")); + mRemove = new QPushButton(tr("Remove program")); + mUpdate = new QPushButton(tr("Upadate")); + mDefault = new QPushButton(tr("Set as default")); + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addStretch(); + buttonLayout->addWidget(mAdd); + buttonLayout->addWidget(mRemove); + buttonLayout->addWidget(mUpdate); + buttonLayout->addWidget(mDefault); + buttonLayout->addStretch(); + mainLayout->addLayout(buttonLayout, 5, 0, 1, 2, Qt::AlignCenter); + connect(mProgramSelector, SIGNAL(currentIndexChanged(QString)), this, SLOT(programChanged(QString))); + connect(mAdd, SIGNAL(clicked()), this, SLOT(addProgram())); + connect(mRemove, SIGNAL(clicked()), this, SLOT(removeProgram())); + connect(mDefault, SIGNAL(clicked()), this, SLOT(setDefault())); + readSettings(); + setLayout(mainLayout); +} + +void ProgramConfigurator::writeSettings(){ + QString setString = QString("programs_%1").arg(mPrefix); + QString defaultString = QString("%1/default").arg(setString); + QString dataString = QString("%1/data").arg(setString); + QSettings s; + s.setValue(defaultString, mDefautProg); + s.setValue(dataString, mData); +} + +void ProgramConfigurator::programChanged(const QString &program){ + QHash<QString, QVariant> data = mData.value(program).toHash(); + if(data.isEmpty()){ + return; + } + mNameEdit->setText(program); + mPathEdit->setText(data.value("path").toString()); + QStringList args = data.value("args").toStringList(); + mArgumentsEdit->setText(args.join(" ")); +} + +void ProgramConfigurator::addProgram(){ + QString name = mNameEdit->text(); + if(mData.keys().contains(name)){ + QString message = QString(tr("Already have a program with name %1.")).arg(name); + QMessageBox::critical(this, tr("Error"), message); + return; + } + QString prog = mPathEdit->text(); + if(!isValid(prog)){ + return; + } + QHash<QString, QVariant> newData; + newData.insert("path", prog); + newData.insert("args", args(mArgumentsEdit->text())); + mData.insert(name, newData); + mProgramSelector->addItem(name); +} + +void ProgramConfigurator::removeProgram(){ + QString name = mProgramSelector->currentText(); + if(mData.keys().contains(name)){ + QString message = QString(tr("Really remove %1 from program list?")).arg(name); + int retval = QMessageBox::question(this, tr("Question"), message, QMessageBox::Yes | QMessageBox::No); + if(retval == QMessageBox::Yes){ + mData.remove(name); + } + } + int idx = mProgramSelector->findText(name); + if(idx != -1){ + mProgramSelector->removeItem(idx); + } +} + +void ProgramConfigurator::updateProgram(){ + QString name = mProgramSelector->currentText(); + QHash<QString, QVariant> data = mData.value(name).toHash(); + if(data.isEmpty()){ + return; + } + QString path = mPathEdit->text(); + if(!isValid(path)){ + return; + } + QStringList arguments = args(mArgumentsEdit->text()); + QHash<QString, QVariant> newData; + newData.insert("path", path); + newData.insert("args", arguments); + mData.remove(name); + mData.insert(name, newData); +} + +void ProgramConfigurator::setDefault(){ + mDefautProg = mProgramSelector->currentText(); + QString defaultLbl; + if(mDefautProg.isEmpty()){ + defaultLbl = QString(tr("Default is [None]")); + }else{ + defaultLbl = QString(tr("Default is %1")).arg(mDefautProg); + } + mDefaultLabel->setText(defaultLbl); +} + +void ProgramConfigurator::readSettings(){ + QString settingsPrefix = QString("programs_%1").arg(mPrefix); + QString defaultString = QString("%1/default").arg(settingsPrefix); + QString dataString = QString("%1/data").arg(settingsPrefix); + QSettings s; + mData = s.value(dataString).toHash(); + QStringList progs; + foreach(QString p, mData.keys()){ + progs << p; + } + mProgramSelector->addItems(progs); + mDefautProg = s.value(defaultString, tr("[None]")).toString(); + int idx = mProgramSelector->findText(mDefautProg); + if(idx != -1){ + mProgramSelector->setCurrentIndex(idx); + } + setDefault(); +} + +bool ProgramConfigurator::isValid(const QString &program){ + QFileInfo progInfo(program); + if(!progInfo.isExecutable()){ + QString message = QString(tr("%1 is not executable.")).arg(program); + QMessageBox::critical(this, tr("Error"), message); + return false; + } + if(!progInfo.exists()){ + QString message = QString(tr("Cannot find %1.")).arg(program); + QMessageBox::critical(this, tr("Error"), message); + return false; + } + return true; +} + +QStringList ProgramConfigurator::args(const QString &argString){ + if(argString.isEmpty()){ + return QStringList(); + } + QRegExp splitter("\\s+"); + return argString.split(splitter, QString::SkipEmptyParts); +} diff --git a/programconfigurator.h b/programconfigurator.h new file mode 100644 index 0000000..03fb047 --- /dev/null +++ b/programconfigurator.h @@ -0,0 +1,60 @@ +/* + 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. +*/ + +#ifndef PROGRAMCONFIGURATOR_H +#define PROGRAMCONFIGURATOR_H + +#include <QWidget> +#include <QString> +#include <QHash> +#include <QVariant> + +class QLineEdit; +class QPushButton; +class QComboBox; +class QStringList; +class QLabel; +class QStringList; + +class ProgramConfigurator : public QWidget { + Q_OBJECT + public: + ProgramConfigurator(const QString &prefix, const QString &description, QWidget *parent = 0); + ~ProgramConfigurator() {} + + public slots: + void writeSettings(); + + private slots: + void programChanged(const QString &program); + void addProgram(); + void removeProgram(); + void updateProgram(); + void setDefault(); + + private: + void readSettings(); + bool isValid(const QString &program); + QStringList args(const QString &argString); + + private: + QComboBox *mProgramSelector; + QLineEdit *mNameEdit; + QLineEdit *mPathEdit; + QLineEdit *mArgumentsEdit; + QPushButton *mAdd; + QPushButton *mRemove; + QPushButton *mUpdate; + QPushButton *mDefault; + QLabel *mDefaultLabel; + QHash<QString, QVariant> mData; + QString mDefautProg; + const QString mPrefix; + const QString mDescription; +}; + +#endif @@ -39,7 +39,8 @@ SOURCES = main.cpp \ fileinfoitem.cpp \ fileinfomodel.cpp \ actorcountmodel.cpp \ - graphbarwidget.cpp + graphbarwidget.cpp \ + programconfigurator.cpp HEADERS = listitem.h \ listmodel.h \ movieitem.h \ @@ -74,7 +75,8 @@ HEADERS = listitem.h \ fileinfoitem.h \ fileinfomodel.h \ actorcountmodel.h \ - graphbarwidget.h + graphbarwidget.h \ + programconfigurator.h LIBS += -lmagic LIBS += -lcryptopp INCLUDEPATH += /usr/include/cryptopp |