#include #include #include #include #include #include #include #include #include #include #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); mModel = new QStandardItemModel; QSortFilterProxyModel *proxy = new QSortFilterProxyModel(this); proxy->setSourceModel(mModel); mView = new QTreeView; mView->setModel(proxy); mView->setSortingEnabled(true); mView->sortByColumn(0, Qt::AscendingOrder); mView->setHeaderHidden(true); 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); 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->appendRow(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 search = mModel->findItems(item); if(search.isEmpty()){ QStandardItem *newDir = new QStandardItem(mIcon, item); mModel->appendRow(newDir); } } void ItemSelectionWidget::removeItem(){ QString item = mItem->text(); QList search = mModel->findItems(item); if(!search.isEmpty()){ mModel->removeRow(search.first()->row()); } }