diff options
author | am <am@f440f766-f032-0410-8965-dc7d17de2ca0> | 2009-07-13 15:42:03 +0000 |
---|---|---|
committer | am <am@f440f766-f032-0410-8965-dc7d17de2ca0> | 2009-07-13 15:42:03 +0000 |
commit | 440f3fe87e9adc95f6155b924162e335f2b434e0 (patch) | |
tree | 35aae6cb701552252ced67b7ba7f17bcdc7b8c9b | |
parent | a3dd54389f7b28431fc9853cd57af231bd6a3c9c (diff) | |
download | SheMov-440f3fe87e9adc95f6155b924162e335f2b434e0.tar.gz SheMov-440f3fe87e9adc95f6155b924162e335f2b434e0.tar.bz2 SheMov-440f3fe87e9adc95f6155b924162e335f2b434e0.zip |
-Finished ConfigurationDialog->paths
-Implemented ExtractorDialog (untested)
-started work on extractor menus
git-svn-id: file:///var/svn/repos2/shemov/trunk@386 f440f766-f032-0410-8965-dc7d17de2ca0
-rw-r--r-- | configurationdialog.cpp | 31 | ||||
-rw-r--r-- | configurationdialog.h | 7 | ||||
-rw-r--r-- | extractordialog.cpp | 84 | ||||
-rw-r--r-- | extractordialog.h | 38 | ||||
-rw-r--r-- | filesystemwidget.cpp | 7 | ||||
-rw-r--r-- | shemov.cpp | 19 | ||||
-rw-r--r-- | shemov.h | 9 | ||||
-rw-r--r-- | shemov.pro | 6 | ||||
-rw-r--r-- | shemoviconprovider.cpp | 4 |
9 files changed, 196 insertions, 9 deletions
diff --git a/configurationdialog.cpp b/configurationdialog.cpp index d10050a..0a94134 100644 --- a/configurationdialog.cpp +++ b/configurationdialog.cpp @@ -18,6 +18,7 @@ #include <QApplication> #include <QSettings> #include <QRegExp> +#include <QDebug> #include "configurationdialog.h" @@ -25,6 +26,7 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q //paths tab QWidget *pathWidget = new QWidget; QGridLayout *pathGrid = new QGridLayout; + mTab = new QTabWidget; QDirModel *model = new QDirModel(this); QCompleter *fsCompleter = new QCompleter(this); fsCompleter->setModel(model); @@ -66,6 +68,7 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q pathGrid->addWidget(mArchivePaths); QLabel *l8 = new QLabel(tr("Enter new &extraction path")); mExtractPath = new QLineEdit; + mExtractPath->setCompleter(fsCompleter); l8->setBuddy(mExtractPath); pathGrid->addWidget(l8, 7, 0); pathGrid->addWidget(mExtractPath, 7, 1); @@ -83,7 +86,7 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q //main layout mOk = new QPushButton(tr("Ok")); - connect(mOk, SIGNAL(clicked()), this, SLOT(accpet())); + connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); mCancel = new QPushButton(tr("Cancel")); connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); QHBoxLayout *mainButtonLayout = new QHBoxLayout; @@ -99,6 +102,30 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q readSettings(); } +void ConfigurationDialog::accept(){ + writeSettings(); + QDialog::accept(); +} + +void ConfigurationDialog::addPath(){ + QString newPath = mExtractPath->text(); + if(!newPath.isEmpty() && !mPaths.contains(newPath)){ + mArchivePaths->addItem(newPath); + mPaths.append(newPath); + } +} + +void ConfigurationDialog::removePath(){ + QString removePath = mArchivePaths->currentText(); + int current = mArchivePaths->currentIndex(); + if(!removePath.isEmpty()){ + if(mPaths.contains(removePath)){ + mPaths.removeOne(removePath); + mArchivePaths->removeItem(current); + } + } +} + void ConfigurationDialog::readSettings(){ QSettings s; mPictureViewer->setText(s.value("paths/pictureviewer", "/usr/bin/gwenview").toString()); @@ -123,7 +150,7 @@ void ConfigurationDialog::writeSettings(){ s.setValue("paths/pictureviewerargs", pvArgs); s.setValue("paths/movieviewer", mMovieViewer->text()); QStringList mvArgs = mMovieViewerArgs->text().split(splitAt, QString::SkipEmptyParts); - s.setValue("paths/movievieverargs", mvArgs); + s.setValue("paths/movieviewerargs", mvArgs); s.setValue("paths/archiver", mArchiver->text()); QStringList aArgs = mArchiverArgs->text().split(splitAt, QString::SkipEmptyParts); s.setValue("paths/archiverargs", aArgs); diff --git a/configurationdialog.h b/configurationdialog.h index fa91667..3876fb6 100644 --- a/configurationdialog.h +++ b/configurationdialog.h @@ -21,6 +21,13 @@ class ConfigurationDialog : public QDialog { ConfigurationDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); ~ConfigurationDialog() {}; + public slots: + void accept(); + + private slots: + void addPath(); + void removePath(); + private: void readSettings(); void writeSettings(); diff --git a/extractordialog.cpp b/extractordialog.cpp new file mode 100644 index 0000000..7897bf4 --- /dev/null +++ b/extractordialog.cpp @@ -0,0 +1,84 @@ +/* + 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 <QTextEdit> +#include <QProcess> +#include <QPushButton> +#include <QVBoxLayout> +#include <QSettings> +#include <QFileInfo> +#include <QByteArray> +#include <QApplication> + +#include "extractordialog.h" + +ExtractorDialog::ExtractorDialog(const QString &archive, const QString &extractTo, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), mArchive(archive), mExtractTo(extractTo){ + QVBoxLayout *mainLayout = new QVBoxLayout; + mOutput = new QTextEdit; + mCancelClose = new QPushButton(tr("Close")); + connect(mCancelClose, SIGNAL(clicked()), this, SLOT(accept())); + mainLayout->addWidget(mOutput); + mainLayout->addWidget(mCancelClose); + setLayout(mainLayout); + + mExtractor = new QProcess(this); + connect(mExtractor, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(processStatusChanged(QProcess::ProcessState))); + + QString wTitle = QString(tr("%1 - extracting from %2")).arg(qApp->applicationName()).arg(archive); + setWindowTitle(wTitle); + + start(); + +} + +void ExtractorDialog::processStatusChanged(QProcess::ProcessState newState){ + if((newState == QProcess::Running) || (newState == QProcess::Starting)){ + mCancelClose->disconnect(SIGNAL(clicked())); + connect(mCancelClose, SIGNAL(clicked()), this, SLOT(killProcess())); + mCancelClose->setText(tr("Cancel")); + } + if(newState == QProcess::NotRunning){ + mCancelClose->disconnect(SIGNAL(clicked())); + connect(mCancelClose, SIGNAL(clicked()), this, SLOT(accept())); + mCancelClose->setText(tr("Close")); + } +} + +void ExtractorDialog::killProcess(){ + mExtractor->terminate(); + mCancelClose->disconnect(SIGNAL(clicked())); + connect(mCancelClose, SIGNAL(clicked()), this, SLOT(accept())); + mCancelClose->setText(tr("Close")); +} + +void ExtractorDialog::writeOutput(){ + QByteArray output = mExtractor->read(mExtractor->bytesAvailable()); + mOutput->append(output); +} + +void ExtractorDialog::start(){ + QSettings s; + QString exe = s.value("paths/archiver").toString(); + if(exe.isEmpty()){ + mOutput->append(tr("No archive program configured!")); + return; + } + QFileInfo info(exe); + if(!info.exists() || !info.isExecutable()){ + QString msg = QString(tr("Unable to call %1")).arg(exe); + mOutput->append(msg); + return; + } + QStringList args = s.value("paths/archiveargs").toStringList(); + mExtractor = new QProcess(this); + mExtractor->setWorkingDirectory(mExtractTo); + connect(mExtractor, SIGNAL(readyRead()), this, SLOT(writeOutput())); + QString startmessage = QString("Starting %1 %2 %3\n").arg(exe).arg(args.join(" ")).arg(mArchive); + mOutput->append(startmessage); + mExtractor->start(exe, args); +} + diff --git a/extractordialog.h b/extractordialog.h new file mode 100644 index 0000000..80c7e2c --- /dev/null +++ b/extractordialog.h @@ -0,0 +1,38 @@ +/* + 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 EXTRACTORDIALOG_H +#define EXTRACTORDIALOG_H + +#include <QDialog> +#include <QProcess> + +class QTextEdit; +class QPushButton; + +class ExtractorDialog : public QDialog { + Q_OBJECT + public: + ExtractorDialog(const QString &archive, const QString &extractTo, QWidget *parent = 0, Qt::WindowFlags f = 0); + ~ExtractorDialog() {}; + + private slots: + void processStatusChanged(QProcess::ProcessState newState); + void killProcess(); + void writeOutput(); + + private: + void start(); + QString mArchive; + QString mExtractTo; + QPushButton *mCancelClose; + QTextEdit *mOutput; + QProcess *mExtractor; +}; + +#endif + diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index edb842c..317fbad 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -150,11 +150,12 @@ void FilesystemWidget::fileViewActivated(const QModelIndex &idx){ QStringList programArgs; QString program; if(mt.toLower().startsWith("video")){ - program = s.value("paths/video").toString(); - programArgs = s.value("paths/videoargs").toStringList(); + program = s.value("paths/movieviewer").toString(); + programArgs = s.value("paths/movieviewerargs").toStringList(); } if(mt.toLower().startsWith("image")){ - program = s.value("paths/picture").toString(); + program = s.value("paths/pictureviewer").toString(); + programArgs = s.value("paths/pictureviewerargs").toStringList(); } programArgs << path; QProcess::execute(program, programArgs); @@ -15,11 +15,13 @@ #include <QLabel> #include <QItemSelection> #include <QSignalMapper> +#include <QSettings> #include <QDebug> #include "shemov.h" #include "filesystemwidget.h" #include "fileview.h" +#include "configurationdialog.h" SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) { mFSWidget = new FilesystemWidget; @@ -66,6 +68,11 @@ void SheMov::setTemplate(const QString &newTemplate){ mTemplate->setText(newTemplate); } +void SheMov::configure(){ + ConfigurationDialog dlg(this); + dlg.exec(); +} + void SheMov::createStatusbar(){ QLabel *selCountL = new QLabel(tr("Sel. Items")); mSelectedItems = new QLabel("0"); @@ -123,6 +130,8 @@ void SheMov::createActions(){ 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())); //Edit menu rename submenu mTemplateA = new QAction(tr("Set as template"), this); @@ -150,6 +159,11 @@ void SheMov::createActions(){ 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); + mExtractMenu = new QMenu(tr("E&xtract to..."), this); + createExtractMenu(); } void SheMov::createMenus(){ @@ -175,8 +189,13 @@ void SheMov::createMenus(){ editMenu->addMenu(renameMenu); editMenu->addSeparator(); editMenu->addAction(mRefreshA); + editMenu->addSeparator(); + editMenu->addAction(mConfigA); menuBar()->addMenu(fileMenu); menuBar()->addMenu(editMenu); } +void SheMov::createExtractMenu(){ + +} @@ -9,6 +9,7 @@ #define SHEMOV_H #include <QMainWindow> +#include <QList> class QTabWidget; class FilesystemWidget; @@ -16,6 +17,7 @@ class QAction; class QLabel; class QItemSelection; class QSignalMapper; +class QMenu; class SheMov : public QMainWindow { Q_OBJECT @@ -28,11 +30,13 @@ class SheMov : public QMainWindow { void newWindowTitle(const QString &title); void statusbarMessage(const QString &message); void setTemplate(const QString &newTemplate); + void configure(); private: void createStatusbar(); void createActions(); void createMenus(); + void createExtractMenu(); //Statusbar Items QLabel *mSelectedItems; @@ -53,9 +57,14 @@ class SheMov : public QMainWindow { QAction *mRenameCoverBA; QAction *mRenameCoverCA; QAction *mTemplateA; + QAction *mConfigA; + QList<QAction*> mExtractToA; //EndActions QSignalMapper *mRenameMapper; + QSignalMapper *mExtractMapper; + + QMenu *mExtractMenu; QTabWidget *mTab; FilesystemWidget *mFSWidget; @@ -15,7 +15,8 @@ filesystemfileproxy.cpp \ helper.cpp \ shemoviconprovider.cpp \ messagedialog.cpp \ -configurationdialog.cpp +configurationdialog.cpp \ +extractordialog.cpp HEADERS = listitem.h \ listmodel.h \ movieitem.h \ @@ -29,6 +30,7 @@ filesystemfileproxy.h \ helper.h \ shemoviconprovider.h \ messagedialog.h \ -configurationdialog.h +configurationdialog.h \ +extractordialog.h LIBS += -lmagic RESOURCES = shemov.qrc diff --git a/shemoviconprovider.cpp b/shemoviconprovider.cpp index f0ea01e..ed3febb 100644 --- a/shemoviconprovider.cpp +++ b/shemoviconprovider.cpp @@ -14,9 +14,9 @@ SheMovIconProvider::SheMovIconProvider() {}; QIcon SheMovIconProvider::icon(const QFileInfo &info) const { - if(info.isDir()){ + /*if(info.isDir()){ return QIcon(":/dildo.png"); - } + }*/ QString type = Helper::mimeType(info.absoluteFilePath()); if(type.toLower().startsWith("video")){ return QIcon(":/movie.svg"); |