summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoram <am@f440f766-f032-0410-8965-dc7d17de2ca0>2009-07-13 15:42:03 +0000
committeram <am@f440f766-f032-0410-8965-dc7d17de2ca0>2009-07-13 15:42:03 +0000
commit440f3fe87e9adc95f6155b924162e335f2b434e0 (patch)
tree35aae6cb701552252ced67b7ba7f17bcdc7b8c9b
parenta3dd54389f7b28431fc9853cd57af231bd6a3c9c (diff)
downloadSheMov-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.cpp31
-rw-r--r--configurationdialog.h7
-rw-r--r--extractordialog.cpp84
-rw-r--r--extractordialog.h38
-rw-r--r--filesystemwidget.cpp7
-rw-r--r--shemov.cpp19
-rw-r--r--shemov.h9
-rw-r--r--shemov.pro6
-rw-r--r--shemoviconprovider.cpp4
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);
diff --git a/shemov.cpp b/shemov.cpp
index f5d9e61..2ec0d7a 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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(){
+
+}
diff --git a/shemov.h b/shemov.h
index 3c2cb1b..e9bedcf 100644
--- a/shemov.h
+++ b/shemov.h
@@ -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;
diff --git a/shemov.pro b/shemov.pro
index fc1120e..786f1cb 100644
--- a/shemov.pro
+++ b/shemov.pro
@@ -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");