#include #include #include #include #include #include #include #include #include #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()); } }