summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-05-10 18:48:31 +0200
committerArno <am@disconnect.de>2010-05-10 18:48:31 +0200
commit8e1b2c03076b9908fbc8eafe861845c2d11bd7f0 (patch)
tree5e6c563853b38211c00f5026308660af5957b9f7
parent9f0caecf7875f998dc9c85d4f35f985335222d67 (diff)
downloadSheMov-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.cpp92
-rw-r--r--configurationdialog.h8
-rw-r--r--programconfigurator.cpp193
-rw-r--r--programconfigurator.h60
-rw-r--r--shemov.pro6
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
diff --git a/shemov.pro b/shemov.pro
index d3d8fdb..c4f7449 100644
--- a/shemov.pro
+++ b/shemov.pro
@@ -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