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
81
82
|
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>
#include <QStandardItemModel>
#include <QListView>
#include <QFileDialog>
#include <QDir>
#include "itemselectionwidget.h"
ItemSelectionWidget::ItemSelectionWidget(int mode, QString labelText, QWidget *parent) : QWidget(parent) {
QHBoxLayout *newItemL = new QHBoxLayout;
newItemL->addWidget(new QLabel(labelText));
mItem = new QLineEdit;
newItemL->addWidget(mItem);
if(mode == Directories){
QPushButton *browseBtn = new QPushButton(tr("Browse..."));
connect(browseBtn, &QPushButton::clicked, this, &ItemSelectionWidget::browseDir);
newItemL->addWidget(browseBtn);
mIcon = QIcon(":/folder.png");
}else{
mIcon = QIcon(":/curlybrackets.png");
}
QPushButton *addBtn = new QPushButton(tr("Add"));
connect(addBtn, &QPushButton::clicked, this, &ItemSelectionWidget::addItem);
QPushButton *removeBtn = new QPushButton(tr("Remove"));
connect(removeBtn, &QPushButton::clicked, this, &ItemSelectionWidget::removeItem);
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) { mItem->setText(cur.data().toString()); });
QVBoxLayout *newDirTabL = new QVBoxLayout;
newDirTabL->addLayout(newItemL);
newDirTabL->addLayout(addRemL);
newDirTabL->addWidget(mView);
setLayout(newDirTabL);
}
const QStringList ItemSelectionWidget::items() const {
QStringList retval;
for(int i = 0; i < mModel->rowCount(); ++i){
QStandardItem *item = mModel->item(i, 0);
retval << item->text();
}
return retval;
}
void ItemSelectionWidget::setItems(const QStringList &items){
mModel->clear();
for(const QString &d : items){
QStandardItem *newDir = new QStandardItem(mIcon, d);
mModel->insertRow(mModel->rowCount(), newDir);
}
}
void ItemSelectionWidget::browseDir(){
QString dir = QFileDialog::getExistingDirectory(this, tr("Select Directory"), QDir::homePath());
mItem->setText(QDir::toNativeSeparators(dir));
}
void ItemSelectionWidget::addItem(){
QString item = mItem->text();
QList<QStandardItem*> search = mModel->findItems(item);
if(search.isEmpty()){
QStandardItem *newDir = new QStandardItem(mIcon, item);
mModel->insertRow(mModel->rowCount(), newDir);
}
}
void ItemSelectionWidget::removeItem(){
QString item = mItem->text();
QList<QStandardItem*> search = mModel->findItems(item);
if(!search.isEmpty()){
mModel->removeRow(search.first()->row());
}
}
|