1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>
#include <QStandardItemModel>
#include <QListView>
#include <QFileDialog>
#include <QDir>
#include "itemselectionwidget.h"
ItemSelectionWidget::ItemSelectionWidget(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, &ItemSelectionWidget::browseDir);
newDirL->addWidget(browseBtn);
QPushButton *addBtn = new QPushButton(tr("Add"));
connect(addBtn, &QPushButton::clicked, this, &ItemSelectionWidget::addDir);
QPushButton *removeBtn = new QPushButton(tr("Remove"));
connect(removeBtn, &QPushButton::clicked, this, &ItemSelectionWidget::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 ItemSelectionWidget::directories() const {
QStringList retval;
for(int i = 0; i < mModel->rowCount(); ++i){
QStandardItem *item = mModel->item(i, 0);
retval << item->text();
}
return retval;
}
void ItemSelectionWidget::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 ItemSelectionWidget::browseDir(){
QString dir = QFileDialog::getExistingDirectory(this, tr("Select Directory"), QDir::homePath());
mDir->setText(QDir::toNativeSeparators(dir));
}
void ItemSelectionWidget::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 ItemSelectionWidget::removeDir(){
QString dir = mDir->text();
auto search = mModel->findItems(dir);
if(!search.isEmpty()){
mModel->removeRow(search.first()->row());
}
}
|