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 /dirselectionwidget.cpp | |
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.
Diffstat (limited to 'dirselectionwidget.cpp')
-rw-r--r-- | dirselectionwidget.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
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()); + } +} |