diff options
Diffstat (limited to 'fswidget.cpp')
-rw-r--r-- | fswidget.cpp | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/fswidget.cpp b/fswidget.cpp index 3fa1cd1..deefddf 100644 --- a/fswidget.cpp +++ b/fswidget.cpp @@ -5,6 +5,7 @@ #include <QVBoxLayout> #include <QTreeView> #include <QFileDialog> +#include <QInputDialog> #include <QSettings> #include "fswidget.h" @@ -31,17 +32,27 @@ void FSWidget::setupWidget(){ mDirCB->setInsertPolicy(QComboBox::InsertAlphabetically); mDirCB->setSizeAdjustPolicy(QComboBox::AdjustToContents); QAction *addDirA = new QAction(QIcon(":/gaping_ass.png"), tr("Add dir..."), this); - connect(addDirA, &QAction::triggered, this, &FSWidget::addDir); + connect(addDirA, &QAction::triggered, [=] { + QString newDir = QFileDialog::getExistingDirectory(this, tr("Select directory"), QDir::homePath()); + insertItem(mDirCB, newDir); + } ); QAction *removeDirA = new QAction(QIcon(":/hourglass_figure.png"), tr("Remove dir."), this); - connect(removeDirA, &QAction::triggered, this, &FSWidget::removeDir); + connect(removeDirA, &QAction::triggered, [=] { removeItem(mDirCB);} ); QToolBar *dirTB = new QToolBar; dirTB->addAction(addDirA); dirTB->addAction(removeDirA); QLabel *filterL = new QLabel(tr("Filter")); mFilterCB = new QComboBox; + mFilterCB->setInsertPolicy(QComboBox::InsertAlphabetically); + mFilterCB->setSizeAdjustPolicy(QComboBox::AdjustToContents); QAction *addFilterA = new QAction(QIcon(":/gaping_ass.png"), tr("Add filter..."), this); + connect(addFilterA, &QAction::triggered, [=] { + QString filter = QInputDialog::getText(this, tr("Mime filter"), tr("Filter")); + insertItem(mFilterCB, filter); + } ); QAction *removeFilterA = new QAction(QIcon(":/hourglass_figure.png"), tr("Remove filter"), this); + connect(removeFilterA, &QAction::triggered, [=] { removeItem(mFilterCB); }); QToolBar *filterTB = new QToolBar; filterTB->addAction(addFilterA); filterTB->addAction(removeFilterA); @@ -80,32 +91,52 @@ void FSWidget::readSettings(){ mDirCB->addItems(dirs); QString cDir = s.value("fs/curdir").toString(); mDirCB->setCurrentText(cDir); + QStringList filters = s.value("fs/filters").toStringList(); + mFilterCB->addItems(filters); + QString cFilter = s.value("fs/curfilter").toString(); + mFilterCB->setCurrentText(cFilter); } void FSWidget::writeSettings(){ + QSettings s; QString curDir = mDirCB->currentText(); QStringList dirs; for(int i = 0 ; i < mDirCB->count(); ++i){ dirs << mDirCB->itemText(i); } - QSettings s; s.setValue("fs/dirs", dirs); s.setValue("fs/curdir", curDir); + QString curFilter = mFilterCB->currentText(); + QStringList filters; + for(int i = 0; i < mFilterCB->count(); ++i){ + filters << mFilterCB->itemText(i); + } + s.setValue("fs/filters", filters); + s.setValue("fs/curfilter", curFilter); } -void FSWidget::addDir(){ - QString newDir = QFileDialog::getExistingDirectory(this, tr("Select directory"), QDir::homePath()); - if(!newDir.isEmpty()){ - int fIdx = mDirCB->findText(newDir); - if(fIdx == -1){ - mDirCB->addItem(newDir); +void FSWidget::insertItem(QComboBox *cb, const QString &text){ + if(text.isEmpty()){ + return; + } + int idx = 0; + while(idx != cb->count()){ + QString curT = cb->itemText(idx); + if(text == curT){ + return; + } + if(cb->itemText(idx) > text){ + break; } + ++idx; } + cb->insertItem(idx, text); } -void FSWidget::removeDir(){ - int curIdx = mDirCB->currentIndex(); - if(curIdx != -1){ - mDirCB->removeItem(curIdx); +void FSWidget::removeItem(QComboBox *cb){ + int toRemove = cb->findText(cb->currentText()); + if(toRemove != -1){ + cb->removeItem(toRemove); } } + |