summaryrefslogtreecommitdiffstats
path: root/fswidget.cpp
blob: deefddf8b4e5337d648efa1f1ef1859c2a713e3b (plain)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <QToolBar>
#include <QLabel>
#include <QComboBox>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTreeView>
#include <QFileDialog>
#include <QInputDialog>
#include <QSettings>

#include "fswidget.h"

FSWidget::FSWidget(QWidget *parent) : QWidget(parent) {
    setupWidget();
}

void FSWidget::setupWidget(){
    QToolBar *toolbar = new QToolBar;
    QPixmap buttplug(":/butt_plug.png");
    QMatrix rotatematrix;
    rotatematrix.rotate(90);
    QIcon buttplugRight(buttplug.transformed(rotatematrix));
    rotatematrix.rotate(-180);
    QIcon buttplugLeft(buttplug.transformed(rotatematrix));
    QAction *backA = new QAction(buttplugLeft, tr("Prev. dir"), this);
    toolbar->addAction(backA);
    QAction *forwardA = new QAction(buttplugRight, tr("Next dir"), this);
    toolbar->addAction(forwardA);

    QLabel *dirL = new QLabel(tr("Dir"));
    mDirCB = new QComboBox;
    mDirCB->setInsertPolicy(QComboBox::InsertAlphabetically);
    mDirCB->setSizeAdjustPolicy(QComboBox::AdjustToContents);
    QAction *addDirA = new QAction(QIcon(":/gaping_ass.png"), tr("Add dir..."), this);
    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, [=] { 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);

    QHBoxLayout *topWL = new QHBoxLayout;
    topWL->addWidget(dirL);
    topWL->addWidget(mDirCB);
    topWL->addWidget(dirTB);
    topWL->addWidget(filterL);
    topWL->addWidget(mFilterCB);
    topWL->addWidget(filterTB);
    topWL->addWidget(toolbar);
    topWL->addStretch();

    mFileView = new QTreeView;
    mFileView->setSortingEnabled(true);
    mFileView->setUniformRowHeights(true);
    mFileView->setSelectionBehavior(QAbstractItemView::SelectRows);
    mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(topWL);
    mainLayout->addWidget(mFileView);
    setLayout(mainLayout);

    readSettings();
}

FSWidget::~FSWidget(){
    writeSettings();
}

void FSWidget::readSettings(){
    QSettings s;
    QStringList dirs = s.value("fs/dirs").toStringList();
    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);
    }
    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::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::removeItem(QComboBox *cb){
    int toRemove = cb->findText(cb->currentText());
    if(toRemove != -1){
        cb->removeItem(toRemove);
    }
}