summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoram <am@f440f766-f032-0410-8965-dc7d17de2ca0>2009-07-18 17:54:27 +0000
committeram <am@f440f766-f032-0410-8965-dc7d17de2ca0>2009-07-18 17:54:27 +0000
commit80bf76dc318276f67eeec32b8f68e82cf4bb7e62 (patch)
tree262a57a754dcbe01f0a21dd9c69513807be3369b
parenta477a1998c03bc0e7251463aff5486e3c0872d23 (diff)
downloadSheMov-80bf76dc318276f67eeec32b8f68e82cf4bb7e62.tar.gz
SheMov-80bf76dc318276f67eeec32b8f68e82cf4bb7e62.tar.bz2
SheMov-80bf76dc318276f67eeec32b8f68e82cf4bb7e62.zip
Again huge changes (should go on vacation more often :))
-turned archive tab into a QDialog -fixed duplicate handling in ListModel -fixed html output in archive dialog -actually made archiving work -changed covertype to text in database -fixed bug with covertype in coveritem git-svn-id: file:///var/svn/repos2/shemov/trunk@390 f440f766-f032-0410-8965-dc7d17de2ca0
-rw-r--r--archiveeditwidget.cpp165
-rw-r--r--archiveeditwidget.h25
-rw-r--r--archivefilewidget.cpp26
-rw-r--r--archivefilewidget.h5
-rw-r--r--configurationdialog.cpp17
-rw-r--r--configurationdialog.h1
-rw-r--r--covereditor.cpp28
-rw-r--r--covereditor.h2
-rw-r--r--coveritem.cpp10
-rw-r--r--filesystemwidget.cpp23
-rw-r--r--filesystemwidget.h4
-rw-r--r--listeditor.cpp7
-rw-r--r--shemov.cpp14
-rw-r--r--shemov.h7
14 files changed, 286 insertions, 48 deletions
diff --git a/archiveeditwidget.cpp b/archiveeditwidget.cpp
index a404bc7..8f4d116 100644
--- a/archiveeditwidget.cpp
+++ b/archiveeditwidget.cpp
@@ -9,6 +9,17 @@
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLabel>
+#include <QApplication>
+#include <QPushButton>
+#include <QMessageBox>
+#include <QFileInfo>
+#include <QSettings>
+#include <QDir>
+#include <QList>
+#include <QVariant>
+#include <QFile>
+
+#include <QDebug>
#include "archiveeditwidget.h"
#include "archivefilewidget.h"
@@ -16,12 +27,13 @@
#include "covereditor.h"
#include "listmodel.h"
#include "moviemodel.h"
+#include "helper.h"
+#include "coveritem.h"
-ArchiveEditWidget::ArchiveEditWidget(QWidget *parent) : QWidget(parent){
+ArchiveEditDialog::ArchiveEditDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){
//init models
mGenreModel = new ListModel("genre", this);
mActorsModel = new ListModel("actor", this);
- mMovieModel = new MovieModel(this);
QSplitter *hSplitter = new QSplitter(Qt::Horizontal);
QWidget *editorWidget = new QWidget;
@@ -47,6 +59,7 @@ ArchiveEditWidget::ArchiveEditWidget(QWidget *parent) : QWidget(parent){
editorLayout->addStretch();
editorWidget->setLayout(editorLayout);
+ editorWidget->setMinimumWidth(300);
//archive editor
mFileWidget = new ArchiveFileWidget;
@@ -59,10 +72,156 @@ ArchiveEditWidget::ArchiveEditWidget(QWidget *parent) : QWidget(parent){
hSplitter->addWidget(editorWidget);
hSplitter->setStretchFactor(0, 2);
hSplitter->setStretchFactor(1, 1);
+
+ //button layout
+ QHBoxLayout *buttonLayout = new QHBoxLayout;
+ buttonLayout->addStretch();
+ mArchive = new QPushButton(tr("Archive"));
+ connect(mArchive, SIGNAL(clicked()), this, SLOT(archive()));
+ buttonLayout->addWidget(mArchive);
+ mClose = new QPushButton(tr("Close"));
+ connect(mClose, SIGNAL(clicked()), this, SLOT(reject()));
+ buttonLayout->addWidget(mClose);
- QHBoxLayout *mainLayout = new QHBoxLayout;
+ QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(hSplitter);
+ mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
+ QString winTitle = QString("%1 - Archive files").arg(qApp->applicationName());
+ setWindowTitle(winTitle);
+}
+
+void ArchiveEditDialog::setFiles(const QStringList &files){
+ mFileWidget->setFiles(files);
+ mCoverEditor->setCovers(files);
+}
+
+void ArchiveEditDialog::archive(){
+ const QHash<QString, QString> md5 = mFileWidget->md5Sums();
+ const QList<int> actors = mFileWidget->actorIds();
+ int genre = mFileWidget->genreId();
+ QString front = mCoverEditor->frontCover();
+ QString back = mCoverEditor->backCover();
+ QString general = mCoverEditor->covers();
+ QString file = mCoverEditor->movie();
+ QString title = mFileWidget->movieTitle().toLower();
+ int quality = mFileWidget->quality();
+ QStringList files;
+ files << front << back << general;
+ files.removeAll(QString());
+ files << file;
+ if(checkInput(genre, actors, files, title, file, quality) && checkMd5(md5, files)){
+ QSettings s;
+ QString archivePath = s.value("paths/archivedir").toString();
+ if(archivePath.isEmpty()){
+ QMessageBox::critical(this, tr("Error"), tr("No archive path found. Please set it via Edit->Configure!"));
+ return;
+ }
+ QFileInfo archiveInfo(archivePath);
+ if(!archiveInfo.exists()){
+ QDir root = QDir::root();
+ root.mkpath(archivePath);
+ }
+ archiveInfo = QFileInfo(archivePath);
+ if(!archiveInfo.isDir()){
+ QString msg = QString(tr("Archive path %1 is not a directory. Aborting!")).arg(archivePath);
+ QMessageBox::critical(this, tr("Error"), msg);
+ return;
+ }
+ QList<QVariant> data;
+ QFileInfo movie(file);
+ data << title << movie.fileName() << md5.value(file) << movie.size() << genre << quality << -1;
+ QList<CoverItem> covers;
+ if(!front.isEmpty()){
+ covers << coverItem(front, "front", md5.value(front));
+ }
+ if(!back.isEmpty()){
+ covers << coverItem(back, "back", md5.value(back));
+ }
+ if(!general.isEmpty()){
+ covers << coverItem(general, "general", md5.value(general));
+ }
+ QList<QVariant> vAList;
+ foreach(int a, actors){
+ vAList << a;
+ }
+ mMovieModel->addMovie(data, vAList, covers);
+ QStringList refreshDirs;
+ foreach(QString f, files){
+ QFileInfo file(f);
+ QString hash = md5.value(f);
+ QString destDirS = QString("%1/%2/%3").arg(archivePath).arg(hash[0]).arg(hash[1]);
+ QString destFileS = QString("%1/%2/%3/%4").arg(archivePath).arg(hash[0]).arg(hash[1]).arg(file.fileName());
+ QFileInfo dir(destDirS);
+ if(!dir.exists()){
+ QDir root = QDir::root();
+ root.mkpath(destDirS);
+ }
+ QFileInfo destFile(destFileS);
+ if(destFile.exists()){
+ destFileS = QString("%1/%2/%3/%4_%5.%6").arg(archivePath).arg(hash[0]).arg(hash[1]).arg(destFile.completeBaseName()).arg(hash).arg(destFile.suffix());
+ }
+ QFile::rename(f, destFileS);
+ QString refreshDir = file.absoluteFilePath();
+ if(!refreshDirs.contains(refreshDir)){
+ refreshDirs << refreshDir;
+ }
+ }
+ foreach(QString r, refreshDirs){
+ QModelIndex idx = mDirModel->index(r);
+ mDirModel->refresh(idx);
+ }
+ }
+}
+
+bool ArchiveEditDialog::checkInput(int genre, const QList<int> &actors, const QStringList &files, const QString &title, const QString &movie, int quality) {
+ if(genre < 0){
+ QMessageBox::critical(this, tr("Error"), tr("Genre is invalid"));
+ return false;
+ }
+ if(actors.isEmpty()){
+ int answer = QMessageBox::question(this, tr("Question"), tr("No actors selected. Continue anyway?"), QMessageBox::Yes | QMessageBox::No);
+ return (answer == QMessageBox::Yes);
+ }
+ foreach(QString f, files){
+ QFileInfo info(f);
+ if(!info.isFile()){
+ QString msg = QString(tr("%1 does not seem to be a file. Aborting")).arg(info.fileName());
+ QMessageBox::critical(this, tr("Error"), msg);
+ return false;
+ }
+ }
+ QString mt = Helper::mimeType(movie);
+ if(!mt.toLower().startsWith("video")){
+ QString msg = QString(tr("Movie %1 is not of MIME type video (%2). Continue anyway?")).arg(movie).arg(mt);
+ int answer = QMessageBox::question(this, tr("Question"), msg, QMessageBox::Yes | QMessageBox::No);
+ return (answer == QMessageBox::Yes);
+ }
+ if(title.isEmpty()){
+ QMessageBox::critical(this, tr("Error"), tr("No movie title given!"));
+ return false;
+ }
+ if(quality == 0){
+ int answer = QMessageBox::question(this, tr("Question"), tr("Quality is set to 0. Continue anyway?"), QMessageBox::Yes | QMessageBox::No);
+ return (answer == QMessageBox::Yes);
+ }
+ return true;
+}
+bool ArchiveEditDialog::checkMd5(const QHash<QString, QString> &md5sums, const QStringList &files){
+ foreach(QString f, files){
+ if(!md5sums.contains(f)){
+ QString msg = QString(tr("I don't have an MD5 hash for %1. Aborting!")).arg(f);
+ QMessageBox::critical(this, tr("Error"), msg);
+ return false;
+ }
+ }
+ return true;
}
+
+const CoverItem ArchiveEditDialog::coverItem(const QString &filePath, const QString type, const QString &md5) const{
+ QFileInfo info(filePath);
+ return CoverItem(info.fileName(), type, md5);
+}
+
diff --git a/archiveeditwidget.h b/archiveeditwidget.h
index 2f8b382..731214a 100644
--- a/archiveeditwidget.h
+++ b/archiveeditwidget.h
@@ -8,21 +8,35 @@
#ifndef ARCHIVEEDITWIDGET_H
#define ARCHIVEEDITWIDGET_H
-#include <QWidget>
+#include <QDialog>
+#include <QDirModel>
class ArchiveFileWidget;
class ListEditor;
class CoverEditor;
class ListModel;
class MovieModel;
+class QPushButton;
+class CoverItem;
-class ArchiveEditWidget : public QWidget {
+class ArchiveEditDialog : public QDialog {
Q_OBJECT
public:
- ArchiveEditWidget(QWidget *parent = 0);
- ~ArchiveEditWidget() {};
+ ArchiveEditDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
+ ~ArchiveEditDialog() {};
+
+ public:
+ void setFiles(const QStringList &files);
+ void setMovieModel(MovieModel *model) { mMovieModel = model; };
+ void setDirModel(QDirModel *model) { mDirModel = model; };
+
+ private slots:
+ void archive();
private:
+ bool checkInput(int genre, const QList<int> &actors, const QStringList &files, const QString &title, const QString &movie, int quality);
+ bool checkMd5(const QHash<QString, QString> &md5sums, const QStringList &files);
+ const CoverItem coverItem(const QString &filePath, const QString type, const QString &md5) const;
ArchiveFileWidget *mFileWidget;
ListEditor *mGenreEditor;
ListEditor *mActorsEditor;
@@ -30,6 +44,9 @@ class ArchiveEditWidget : public QWidget {
ListModel *mGenreModel;
ListModel *mActorsModel;
MovieModel *mMovieModel;
+ QDirModel *mDirModel;
+ QPushButton *mArchive;
+ QPushButton *mClose;
};
diff --git a/archivefilewidget.cpp b/archivefilewidget.cpp
index 8d7555c..c8c2644 100644
--- a/archivefilewidget.cpp
+++ b/archivefilewidget.cpp
@@ -12,7 +12,6 @@
#include <QFont>
#include <QComboBox>
#include <QPushButton>
-#include <QSpinBox>
#include <QColor>
#include <QLocale>
#include <QFileInfo>
@@ -84,15 +83,8 @@ ArchiveFileWidget::ArchiveFileWidget(MovieModel *model, QWidget *parent, Qt::Win
qualityTitleLayout->addWidget(mTitle);
mainLayout->addLayout(qualityTitleLayout);
- //archive button layout
- QHBoxLayout *archiveButtonLayout = new QHBoxLayout;
- mArchive = new QPushButton(tr("Archive"));
- connect(mArchive, SIGNAL(clicked()), this, SIGNAL(archive()));
- archiveButtonLayout->addStretch();
- archiveButtonLayout->addWidget(mArchive);
- mainLayout->addLayout(archiveButtonLayout);
-
setLayout(mainLayout);
+ setMinimumWidth(600);
}
void ArchiveFileWidget::setMovieModel(MovieModel *model){
@@ -114,8 +106,7 @@ void ArchiveFileWidget::setFiles(const QStringList &files){
mFiles->clear();
mMd5Sums.clear();
mActorIdMap.clear();
- QString tableStart("<html><body><table><th><td>Filename</td><td>Size</td><td>MD5-Sum</td><td>Mime type</td></th>");
- mFiles->append(tableStart);
+ QString html("<html><body style=\"color:#CD0003\"><table border=\"2\" cellspacing=\"5\" cellspacing=\"5\"><tr><th>Filename</th><th>Size</th><th>MD5-Sum</th><th>Mime type</th></tr>");
QLocale l;
foreach(QString f, files){
QFileInfo info(f);
@@ -124,11 +115,11 @@ void ArchiveFileWidget::setFiles(const QStringList &files){
QString filename = info.fileName();
QString mimeType = Helper::mimeType(f);
QString row = QString("<tr><td>%1</td><td>%2</td><td>%3</td><td>%4</td></tr>").arg(filename).arg(l.toString(size)).arg(md5).arg(mimeType);
- mFiles->append(row);
+ html.append(row);
mMd5Sums.insert(f, md5);
}
- QString tableEnd("</table></body></html>");
- mFiles->append(tableEnd);
+ html.append("</table></body></html>");
+ mFiles->setHtml(html);
}
const QList<int> ArchiveFileWidget::actorIds() const{
@@ -136,6 +127,7 @@ const QList<int> ArchiveFileWidget::actorIds() const{
QList<int> retval;
while(i != mActorIdMap.constEnd()){
retval << i.value();
+ ++i;
}
return retval;
}
@@ -180,13 +172,15 @@ void ArchiveFileWidget::removeActor(){
void ArchiveFileWidget::createActorList(){
mSelectedActors->clear();
+ QString html("<html><body style=\"color:#CD0003\"><ul>");
mSelectedActors->append("<html><body><ul>");
QHash<QString, int>::const_iterator i = mActorIdMap.constBegin();
while(i != mActorIdMap.constEnd()){
QString s = QString("<li>%1</li>").arg(i.key());
- mSelectedActors->append(s);
+ html.append(s);
++i;
}
- mSelectedActors->append("</ul></body></html>");
+ html.append("</ul></body></html>");
+ mSelectedActors->setHtml(html);
}
diff --git a/archivefilewidget.h b/archivefilewidget.h
index 8a9dbc9..57a9d52 100644
--- a/archivefilewidget.h
+++ b/archivefilewidget.h
@@ -12,10 +12,10 @@
#include <QHash>
#include <QList>
#include <QLineEdit>
+#include <QSpinBox>
class QTextEdit;
class QComboBox;
-class QSpinBox;
class QPushButton;
class QStringList;
class MovieModel;
@@ -32,7 +32,9 @@ class ArchiveFileWidget : public QWidget {
void setFiles(const QStringList &files);
const QList<int> actorIds() const;
int genreId() const;
+ int quality() const { return mQuality->value(); };
const QString movieTitle() const { return mTitle->text(); };
+ const QHash<QString, QString> md5Sums() const { return mMd5Sums; };
signals:
void statusbarMessage(const QString &message);
@@ -53,7 +55,6 @@ class ArchiveFileWidget : public QWidget {
QComboBox *mActors;
QPushButton *mAddActor;
QPushButton *mRemoveActor;
- QPushButton *mArchive;
QSpinBox *mQuality;
QLineEdit *mTitle;
QStringList mFileList;
diff --git a/configurationdialog.cpp b/configurationdialog.cpp
index 065e105..021d40b 100644
--- a/configurationdialog.cpp
+++ b/configurationdialog.cpp
@@ -62,16 +62,21 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q
l6->setBuddy(mArchiverArgs);
pathGrid->addWidget(l6, 5, 0);
pathGrid->addWidget(mArchiverArgs, 5, 1);
+ QLabel *l9 = 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"));
mArchivePaths = new QComboBox;
- pathGrid->addWidget(l7, 6, 0);
- pathGrid->addWidget(mArchivePaths);
+ pathGrid->addWidget(l7, 7, 0);
+ pathGrid->addWidget(mArchivePaths, 7, 1);
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);
+ pathGrid->addWidget(l8, 8, 0);
+ pathGrid->addWidget(mExtractPath, 8, 1);
mAddPath = new QPushButton(tr("Add path"));
connect(mAddPath, SIGNAL(clicked()), this, SLOT(addPath()));
mRemovePath = new QPushButton(tr("Remove path"));
@@ -80,7 +85,7 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q
pathButtonLayout->addStretch();
pathButtonLayout->addWidget(mAddPath);
pathButtonLayout->addWidget(mRemovePath);
- pathGrid->addLayout(pathButtonLayout, 8, 1);
+ pathGrid->addLayout(pathButtonLayout, 9, 1);
pathWidget->setLayout(pathGrid);
mTab->addTab(pathWidget, tr("Paths"));
@@ -231,6 +236,7 @@ void ConfigurationDialog::readSettings(){
QStringList extractPaths = s.value("paths/extractpaths").toStringList();
mArchivePaths->addItems(extractPaths);
mPaths = extractPaths;
+ mArchiveDir->setText(s.value("paths/archivedir").toString());
//read ui
QStringList expandPaths = s.value("ui/expandpaths").toStringList();
@@ -265,6 +271,7 @@ void ConfigurationDialog::writeSettings(){
QStringList aArgs = mArchiverArgs->text().split(splitAt, QString::SkipEmptyParts);
s.setValue("paths/archiverargs", aArgs);
s.setValue("paths/extractpaths", mPaths);
+ s.setValue("paths/archivedir", mArchiveDir->text());
//write ui
s.setValue("ui/expandpaths", mEPaths);
diff --git a/configurationdialog.h b/configurationdialog.h
index 968b6f8..9b11a49 100644
--- a/configurationdialog.h
+++ b/configurationdialog.h
@@ -50,6 +50,7 @@ class ConfigurationDialog : public QDialog {
QLineEdit *mArchiverArgs;
QLineEdit *mExtractPath;
QLineEdit *mExpandPath;
+ QLineEdit *mArchiveDir;
QLineEdit *mDatabaseHost;
QLineEdit *mDatabaseName;
QLineEdit *mDatabaseUsername;
diff --git a/covereditor.cpp b/covereditor.cpp
index 13bd461..618c0a9 100644
--- a/covereditor.cpp
+++ b/covereditor.cpp
@@ -26,17 +26,21 @@ CoverEditor::CoverEditor(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f
mCovers = new QComboBox;
mainLayout->addWidget(l3, 2, 0);
mainLayout->addWidget(mCovers, 2, 1);
+ QLabel *l4 = new QLabel(tr("Movie file"));
+ mMovie = new QComboBox;
+ mainLayout->addWidget(l4, 3, 0);
+ mainLayout->addWidget(mMovie, 3, 1);
setLayout(mainLayout);
}
void CoverEditor::setCovers(const QStringList &covers){
mCoverPaths = covers;
QStringList coverNames("-");
- QString front, back;
+ QString front, back, movie;
int idx(-1);
foreach(QString c, mCoverPaths){
if((idx = c.lastIndexOf('/')) != -1){
- c.remove(0, idx);
+ c.remove(0, idx + 1);
}
if(c.toLower().contains("front")){
front = c;
@@ -44,6 +48,9 @@ void CoverEditor::setCovers(const QStringList &covers){
if(c.toLower().contains("back")){
back = c;
}
+ if(c.toLower().endsWith(".avi")){
+ movie = c;
+ }
coverNames << c;
}
mFrontCover->clear();
@@ -52,6 +59,8 @@ void CoverEditor::setCovers(const QStringList &covers){
mBackCover->addItems(coverNames);
mCovers->clear();
mCovers->addItems(coverNames);
+ mMovie->clear();
+ mMovie->addItems(coverNames);
if(!front.isEmpty()){
int idx = mFrontCover->findText(front);
if(idx != -1){
@@ -64,6 +73,12 @@ void CoverEditor::setCovers(const QStringList &covers){
mBackCover->setCurrentIndex(idx);
}
}
+ if(!movie.isEmpty()){
+ int idx = mMovie->findText(movie);
+ if(idx != -1){
+ mMovie->setCurrentIndex(idx);
+ }
+ }
}
const QString CoverEditor::frontCover() const{
@@ -91,6 +106,15 @@ const QString CoverEditor::covers() const{
}
+const QString CoverEditor::movie() const{
+ QString sel = mMovie->currentText();
+ if(sel.isEmpty() || (sel == "-")){
+ return QString();
+ }
+ return findPath(sel);
+
+}
+
const QString CoverEditor::findPath(const QString &name) const{
QString retval;
foreach(QString s, mCoverPaths){
diff --git a/covereditor.h b/covereditor.h
index 39246cd..c702ef8 100644
--- a/covereditor.h
+++ b/covereditor.h
@@ -22,12 +22,14 @@ class CoverEditor : public QWidget {
const QString frontCover() const;
const QString backCover() const;
const QString covers() const;
+ const QString movie() const;
private:
const QString findPath(const QString &name) const;
QComboBox *mFrontCover;
QComboBox *mBackCover;
QComboBox *mCovers;
+ QComboBox *mMovie;
QStringList mCoverPaths;
};
diff --git a/coveritem.cpp b/coveritem.cpp
index 658c630..f29e81c 100644
--- a/coveritem.cpp
+++ b/coveritem.cpp
@@ -9,12 +9,4 @@
#include "coveritem.h"
-CoverItem::CoverItem(const QString &filename, const QString &type, const QString &md5) : mFilename(filename), mMd5(md5) {
- bool valid = false;
- if((type == "front") || (type == "back")){
- valid = true;
- }
- if(!valid){
- qWarning("Invalid covertype: %s", qPrintable(type));
- }
-}
+CoverItem::CoverItem(const QString &filename, const QString &type, const QString &md5) : mFilename(filename), mType(type), mMd5(md5) {};
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp
index 349176b..d72d175 100644
--- a/filesystemwidget.cpp
+++ b/filesystemwidget.cpp
@@ -32,6 +32,7 @@
#include "helper.h"
#include "messagedialog.h"
#include "extractordialog.h"
+#include "archiveeditwidget.h"
FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) {
mModel = new QDirModel;
@@ -117,6 +118,11 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) {
setLayout(mainLayout);
}
+void FilesystemWidget::setArchiveDialog(ArchiveEditDialog *dlg){
+ mAEDialog = dlg;
+ mAEDialog->setDirModel(mModel);
+}
+
void FilesystemWidget::directoryChanged(const QModelIndex &selected, const QModelIndex &deselected){
QModelIndex real = mDirProxy->mapToSource(selected);
if(!real.isValid()){
@@ -366,6 +372,23 @@ void FilesystemWidget::extract(const QString &destDir){
dlg.exec();
}
+void FilesystemWidget::archiveFiles(){
+ QModelIndexList selected = fileView()->selectionModel()->selectedRows();
+ if(selected.isEmpty()){
+ return;
+ }
+ QSortFilterProxyModel *proxy = static_cast<QSortFilterProxyModel*>(mFileView->model());
+ QStringList files;
+ foreach(QModelIndex idx, selected){
+ QModelIndex src = proxy->mapToSource(idx);
+ files << mModel->filePath(src);
+ }
+ mAEDialog->setFiles(files);
+ mAEDialog->show();
+ mAEDialog->raise();
+ mAEDialog->activateWindow();
+}
+
void FilesystemWidget::setWindowTitle(const QString &dir){
mWindowTitle = QString("%1 - %2").arg(qApp->applicationName()).arg(dir);
emit windowTitle(mWindowTitle);
diff --git a/filesystemwidget.h b/filesystemwidget.h
index 2c41390..3fee9be 100644
--- a/filesystemwidget.h
+++ b/filesystemwidget.h
@@ -21,6 +21,7 @@ class QFileInfo;
class QAction;
class QVariant;
class MessageDialog;
+class ArchiveEditDialog;
class FilesystemWidget : public QWidget {
Q_OBJECT
@@ -29,6 +30,7 @@ class FilesystemWidget : public QWidget {
~FilesystemWidget() {};
FileView *fileView() { return mFileView; };
const QString windowTitle() const { return mWindowTitle; };
+ void setArchiveDialog(ArchiveEditDialog *dlg); // { mAEDialog = dlg; };
signals:
void windowTitle(const QString &);
@@ -47,6 +49,7 @@ class FilesystemWidget : public QWidget {
void renameCover(const QString &infix);
void setTemplate();
void extract(const QString &destDir);
+ void archiveFiles();
private slots:
void doRenameFile();
@@ -66,6 +69,7 @@ class FilesystemWidget : public QWidget {
QString mWindowTitle;
MessageDialog *mRenameDialog;
QString mTemplate;
+ ArchiveEditDialog *mAEDialog;
};
#endif
diff --git a/listeditor.cpp b/listeditor.cpp
index d3d2caf..df63e15 100644
--- a/listeditor.cpp
+++ b/listeditor.cpp
@@ -45,8 +45,11 @@ void ListEditor::addItem(){
if(mEdit->text().isEmpty()){
return;
}
- QString newItem = mEdit->text().toLower();
- mModel->addItem(newItem);
+ QString newItem = mEdit->text().toLower().trimmed();
+ QModelIndex idx = mModel->index(newItem);
+ if(idx == QModelIndex()){
+ mModel->addItem(newItem);
+ }
}
void ListEditor::removeItem(){
diff --git a/shemov.cpp b/shemov.cpp
index 0844cce..28e4924 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -26,6 +26,7 @@
#include "fileview.h"
#include "configurationdialog.h"
#include "archiveeditwidget.h"
+#include "moviemodel.h"
SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) {
qApp->setWindowIcon(QIcon(":/shemov.png"));
@@ -44,15 +45,17 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla
QMessageBox::critical(this, tr("Error"), tr("Could not open database. Please configure the database and restart the program"));
}
+ mMovieModel = new MovieModel(this);
+
mFSWidget = new FilesystemWidget;
setWindowTitle(mFSWidget->windowTitle());
- mAEWidget = new ArchiveEditWidget;
mTab = new QTabWidget;
mTab->addTab(mFSWidget, tr("Filemanager"));
- mTab->addTab(mAEWidget, tr("Archive editor"));
-
+ mAEdit = new ArchiveEditDialog(this);
+ mAEdit->setMovieModel(mMovieModel);
+ mFSWidget->setArchiveDialog(mAEdit);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(mTab);
@@ -157,6 +160,10 @@ void SheMov::createActions(){
mFSWidget->fileView()->addAction(mRenameA);
mConfigA = new QAction(tr("Configure..."), this);
connect(mConfigA, SIGNAL(triggered()), this, SLOT(configure()));
+ mArchiveA = new QAction(tr("Archive files..."), this);
+ mArchiveA->setShortcut(tr("CTRL+a"));
+ connect(mArchiveA, SIGNAL(triggered()), mFSWidget, SLOT(archiveFiles()));
+ mFSWidget->fileView()->addAction(mArchiveA);
//Edit menu rename submenu
mTemplateA = new QAction(tr("Set as template"), this);
@@ -207,6 +214,7 @@ void SheMov::createMenus(){
editMenu->addAction(mCopyA);
editMenu->addAction(mMoveA);
editMenu->addAction(mRenameA);
+ editMenu->addAction(mArchiveA);
QMenu *renameMenu = new QMenu(tr("&Rename..."), this);
renameMenu->addAction(mTemplateA);
renameMenu->addAction(mRenameCoverFA);
diff --git a/shemov.h b/shemov.h
index 52aa192..b59f865 100644
--- a/shemov.h
+++ b/shemov.h
@@ -19,6 +19,8 @@ class QLabel;
class QItemSelection;
class QSignalMapper;
class QMenu;
+class ArchiveEditDialog;
+class MovieModel;
class SheMov : public QMainWindow {
Q_OBJECT
@@ -59,6 +61,7 @@ class SheMov : public QMainWindow {
QAction *mRenameCoverCA;
QAction *mTemplateA;
QAction *mConfigA;
+ QAction *mArchiveA;
QList<QAction*> mExtractToA;
//EndActions
@@ -69,8 +72,8 @@ class SheMov : public QMainWindow {
QTabWidget *mTab;
FilesystemWidget *mFSWidget;
- ArchiveEditWidget *mAEWidget;
-
+ ArchiveEditDialog *mAEdit;
+ MovieModel *mMovieModel;
};
#endif