#include #include #include #include #include #include #include #include #include #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); } }