summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fswidget.cpp57
-rw-r--r--fswidget.h4
2 files changed, 46 insertions, 15 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);
}
}
+
diff --git a/fswidget.h b/fswidget.h
index 024a965..bc405e9 100644
--- a/fswidget.h
+++ b/fswidget.h
@@ -17,8 +17,8 @@ class FSWidget : public QWidget {
void writeSettings();
private slots:
- void addDir();
- void removeDir();
+ void insertItem(QComboBox *cb, const QString &text);
+ void removeItem(QComboBox *cb);
private:
void setupWidget();