diff options
author | Arno <arno@disconnect.de> | 2018-01-04 08:04:10 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2018-01-04 08:04:10 +0100 |
commit | 3c648fed56a6c7a9f40353d95f4eff5baaecaf76 (patch) | |
tree | 6e9aca61b614bc45e9c81078cd01cb7b1784bcd1 | |
parent | 73eaf29a9fcc501adb66c08bc2741ecdc10251f8 (diff) | |
download | ShemovCleaner-3c648fed56a6c7a9f40353d95f4eff5baaecaf76.tar.gz ShemovCleaner-3c648fed56a6c7a9f40353d95f4eff5baaecaf76.tar.bz2 ShemovCleaner-3c648fed56a6c7a9f40353d95f4eff5baaecaf76.zip |
Implement DirSelectionWidget
This Widget lets you select a list of directories. It's basically about
code reuse. We're gonna need this later when implementing the favorite
directories feature.
-rw-r--r-- | ShemovCleaner.pro | 6 | ||||
-rw-r--r-- | configurationwidget.cpp | 73 | ||||
-rw-r--r-- | configurationwidget.h | 11 | ||||
-rw-r--r-- | dirselectionwidget.cpp | 80 | ||||
-rw-r--r-- | dirselectionwidget.h | 29 |
5 files changed, 120 insertions, 79 deletions
diff --git a/ShemovCleaner.pro b/ShemovCleaner.pro index cc357f6..f3f298b 100644 --- a/ShemovCleaner.pro +++ b/ShemovCleaner.pro @@ -36,7 +36,8 @@ HEADERS += actorwidget.h \ torrentparser.h \ torrentwidget.h \ viewer.h \ - cachedfiledata.h + cachedfiledata.h \ + dirselectionwidget.h SOURCES += actorwidget.cpp \ configurationwidget.cpp \ filecopier.cpp \ @@ -54,5 +55,6 @@ SOURCES += actorwidget.cpp \ torrentparser.cpp \ torrentwidget.cpp \ viewer.cpp \ - cachedfiledata.cpp + cachedfiledata.cpp \ + dirselectionwidget.cpp RESOURCES += shemovcleaner.qrc diff --git a/configurationwidget.cpp b/configurationwidget.cpp index b68a069..1f12377 100644 --- a/configurationwidget.cpp +++ b/configurationwidget.cpp @@ -7,11 +7,9 @@ #include <QVBoxLayout> #include <QLineEdit> #include <QFileDialog> -#include <QStandardItemModel> -#include <QListView> -#include <QItemSelectionModel> #include "configurationwidget.h" +#include "dirselectionwidget.h" ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { //database setup @@ -58,31 +56,7 @@ ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : Q extWidget->setLayout(extL); //copy directories - QHBoxLayout *newDirL = new QHBoxLayout; - newDirL->addWidget(new QLabel(tr("Directory"))); - mDir = new QLineEdit; - newDirL->addWidget(mDir); - QPushButton *browseCopyDirBtn = new QPushButton(tr("Browse...")); - connect(browseCopyDirBtn, SIGNAL(clicked()), this, SLOT(browseCopyDir())); - newDirL->addWidget(browseCopyDirBtn); - QPushButton *addDir = new QPushButton(tr("Add")); - connect(addDir, SIGNAL(clicked()), this, SLOT(addCopyDir())); - QPushButton *removeDir = new QPushButton(tr("Remove")); - connect(removeDir, SIGNAL(clicked()), this, SLOT(removeCopyDir())); - QHBoxLayout *addRemL = new QHBoxLayout; - addRemL->addStretch(); - addRemL->addWidget(addDir); - addRemL->addWidget(removeDir); - mCopyDirM = new QStandardItemModel; - mCopyDirV = new QListView; - mCopyDirV->setModel(mCopyDirM); - connect(mCopyDirV->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(selectCopyDir(QModelIndex,QModelIndex))); - QVBoxLayout *newDirTabL = new QVBoxLayout; - newDirTabL->addLayout(newDirL); - newDirTabL->addLayout(addRemL); - newDirTabL->addWidget(mCopyDirV); - QWidget *dirWidget = new QWidget; - dirWidget->setLayout(newDirTabL); + mCopyDirW = new DirSelectionWidget; //buttons mAccept = new QPushButton(tr("Save")); @@ -100,7 +74,7 @@ ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : Q QTabWidget *tab = new QTabWidget; tab->addTab(dbWidget, tr("Database")); tab->addTab(extWidget, tr("Programs")); - tab->addTab(dirWidget, tr("Copy dirs")); + tab->addTab(mCopyDirW, tr("Copy dirs")); mainLayout->addWidget(tab); mainLayout->addLayout(bLayout); readSettings(); @@ -117,11 +91,7 @@ void ConfigurationWidget::accept(){ s.setValue("ext/ffprobe", mFfProbe->text()); s.setValue("ext/ffmpeg", mFfMpeg->text()); s.setValue("ext/mkvinfo", mMkvInfo->text()); - QStringList copyDirs; - for(int i = 0; i < mCopyDirM->rowCount(); ++i){ - auto item = mCopyDirM->item(i); - copyDirs << item->text(); - } + QStringList copyDirs = mCopyDirW->directories(); s.setValue("copydirs", copyDirs); QDialog::accept(); } @@ -141,36 +111,6 @@ void ConfigurationWidget::browseMkvInfo(){ mMkvInfo->setText(QDir::toNativeSeparators(mkvinfo)); } -void ConfigurationWidget::browseCopyDir(){ - QString copyDir = QFileDialog::getExistingDirectory(this, tr("Select Directory"), QDir::homePath()); - mDir->setText(QDir::toNativeSeparators(copyDir)); -} - -void ConfigurationWidget::addCopyDir(){ - QString dir = mDir->text(); - QFileInfo dinfo(dir); - if(dinfo.exists() && dinfo.isDir()){ - auto search = mCopyDirM->findItems(dir); - if(search.isEmpty()){ - QStandardItem *newDir = new QStandardItem(QIcon(":/folder.png"), dir); - mCopyDirM->insertRow(mCopyDirM->rowCount(), newDir); - } - } -} - -void ConfigurationWidget::removeCopyDir(){ - QString dir = mDir->text(); - auto search = mCopyDirM->findItems(dir); - if(!search.isEmpty()){ - mCopyDirM->removeRow(search.first()->row()); - } -} - -void ConfigurationWidget::selectCopyDir(const QModelIndex &cur, const QModelIndex &prev){ - Q_UNUSED(prev); - mDir->setText(cur.data().toString()); -} - void ConfigurationWidget::readSettings(){ QSettings s; mDbHost->setText(s.value("dbhost").toString()); @@ -181,8 +121,5 @@ void ConfigurationWidget::readSettings(){ mFfMpeg->setText(s.value("ext/ffmpeg").toString()); mMkvInfo->setText(s.value("ext/mkvinfo").toString()); QStringList copyDirs = s.value("copydirs").toStringList(); - foreach(auto d, copyDirs){ - mDir->setText(d); - addCopyDir(); - } + mCopyDirW->setDirectories(copyDirs); } diff --git a/configurationwidget.h b/configurationwidget.h index df69652..9dacde9 100644 --- a/configurationwidget.h +++ b/configurationwidget.h @@ -5,8 +5,7 @@ class QLineEdit; class QPushButton; -class QListView; -class QStandardItemModel; +class DirSelectionWidget; class ConfigurationWidget : public QDialog { Q_OBJECT @@ -20,10 +19,6 @@ class ConfigurationWidget : public QDialog { void browseFfProbe(); void browseFfMpeg(); void browseMkvInfo(); - void browseCopyDir(); - void addCopyDir(); - void removeCopyDir(); - void selectCopyDir(const QModelIndex &cur, const QModelIndex &prev); private: void readSettings(); @@ -34,11 +29,9 @@ class ConfigurationWidget : public QDialog { QLineEdit *mFfProbe; QLineEdit *mFfMpeg; QLineEdit *mMkvInfo; - QLineEdit *mDir; QPushButton *mAccept; QPushButton *mCancel; - QListView *mCopyDirV; - QStandardItemModel *mCopyDirM; + DirSelectionWidget *mCopyDirW; }; #endif // CONFIGURATIONWIDGET_H diff --git a/dirselectionwidget.cpp b/dirselectionwidget.cpp new file mode 100644 index 0000000..c23bd04 --- /dev/null +++ b/dirselectionwidget.cpp @@ -0,0 +1,80 @@ +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QLineEdit> +#include <QPushButton> +#include <QLabel> +#include <QStandardItemModel> +#include <QListView> +#include <QFileDialog> +#include <QDir> + +#include "dirselectionwidget.h" + +DirSelectionWidget::DirSelectionWidget(QWidget *parent) : QWidget(parent) { + QHBoxLayout *newDirL = new QHBoxLayout; + newDirL->addWidget(new QLabel(tr("Directory"))); + mDir = new QLineEdit; + newDirL->addWidget(mDir); + QPushButton *browseBtn = new QPushButton(tr("Browse...")); + connect(browseBtn, &QPushButton::clicked, this, &DirSelectionWidget::browseDir); + newDirL->addWidget(browseBtn); + QPushButton *addBtn = new QPushButton(tr("Add")); + connect(addBtn, &QPushButton::clicked, this, &DirSelectionWidget::addDir); + QPushButton *removeBtn = new QPushButton(tr("Remove")); + connect(removeBtn, &QPushButton::clicked, this, &DirSelectionWidget::removeDir); + QHBoxLayout *addRemL = new QHBoxLayout; + addRemL->addStretch(); + addRemL->addWidget(addBtn); + addRemL->addWidget(removeBtn); + mModel = new QStandardItemModel; + mView = new QListView; + mView->setModel(mModel); + connect(mView->selectionModel(), &QItemSelectionModel::currentChanged, [=](const QModelIndex &cur) { mDir->setText(cur.data().toString()); }); + QVBoxLayout *newDirTabL = new QVBoxLayout; + newDirTabL->addLayout(newDirL); + newDirTabL->addLayout(addRemL); + newDirTabL->addWidget(mView); + setLayout(newDirTabL); +} + +const QStringList DirSelectionWidget::directories() const { + QStringList retval; + for(int i = 0; i < mModel->rowCount(); ++i){ + QStandardItem *item = mModel->item(i, 0); + retval << item->text(); + } + return retval; +} + +void DirSelectionWidget::setDirectories(const QStringList &dirs){ + mModel->clear(); + for(const QString &d : dirs){ + QStandardItem *newDir = new QStandardItem(QIcon(":/folder.png"), d); + mModel->insertRow(mModel->rowCount(), newDir); + } +} + +void DirSelectionWidget::browseDir(){ + QString dir = QFileDialog::getExistingDirectory(this, tr("Select Directory"), QDir::homePath()); + mDir->setText(QDir::toNativeSeparators(dir)); +} + +void DirSelectionWidget::addDir(){ + QString dir = mDir->text(); + QFileInfo dinfo(dir); + if(dinfo.exists() && dinfo.isDir()){ + auto search = mModel->findItems(dir); + if(search.isEmpty()){ + QStandardItem *newDir = new QStandardItem(QIcon(":/folder.png"), dir); + mModel->insertRow(mModel->rowCount(), newDir); + } + } +} + +void DirSelectionWidget::removeDir(){ + QString dir = mDir->text(); + auto search = mModel->findItems(dir); + if(!search.isEmpty()){ + mModel->removeRow(search.first()->row()); + } +} diff --git a/dirselectionwidget.h b/dirselectionwidget.h new file mode 100644 index 0000000..7d43326 --- /dev/null +++ b/dirselectionwidget.h @@ -0,0 +1,29 @@ +#ifndef DIRSELECTIONWIDGET_H +#define DIRSELECTIONWIDGET_H + +#include <QWidget> + +class QStandardItemModel; +class QListView; +class QLineEdit; + +class DirSelectionWidget : public QWidget +{ + Q_OBJECT + public: + explicit DirSelectionWidget(QWidget *parent = nullptr); + const QStringList directories() const; + void setDirectories(const QStringList &dirs); + + public slots: + void browseDir(); + void addDir(); + void removeDir(); + + private: + QStandardItemModel *mModel; + QListView *mView; + QLineEdit *mDir; +}; + +#endif // DIRSELECTIONWIDGET_H |