summaryrefslogtreecommitdiffstats
path: root/dirselectionwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dirselectionwidget.cpp')
-rw-r--r--dirselectionwidget.cpp80
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());
+ }
+}