diff options
author | am <am@f440f766-f032-0410-8965-dc7d17de2ca0> | 2009-07-18 17:54:27 +0000 |
---|---|---|
committer | am <am@f440f766-f032-0410-8965-dc7d17de2ca0> | 2009-07-18 17:54:27 +0000 |
commit | 80bf76dc318276f67eeec32b8f68e82cf4bb7e62 (patch) | |
tree | 262a57a754dcbe01f0a21dd9c69513807be3369b | |
parent | a477a1998c03bc0e7251463aff5486e3c0872d23 (diff) | |
download | SheMov-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.cpp | 165 | ||||
-rw-r--r-- | archiveeditwidget.h | 25 | ||||
-rw-r--r-- | archivefilewidget.cpp | 26 | ||||
-rw-r--r-- | archivefilewidget.h | 5 | ||||
-rw-r--r-- | configurationdialog.cpp | 17 | ||||
-rw-r--r-- | configurationdialog.h | 1 | ||||
-rw-r--r-- | covereditor.cpp | 28 | ||||
-rw-r--r-- | covereditor.h | 2 | ||||
-rw-r--r-- | coveritem.cpp | 10 | ||||
-rw-r--r-- | filesystemwidget.cpp | 23 | ||||
-rw-r--r-- | filesystemwidget.h | 4 | ||||
-rw-r--r-- | listeditor.cpp | 7 | ||||
-rw-r--r-- | shemov.cpp | 14 | ||||
-rw-r--r-- | shemov.h | 7 |
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(){ @@ -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); @@ -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 |