File indexing completed on 2024-04-28 17:06:02

0001 /*
0002     SPDX-FileCopyrightText: 2005 Csaba Karai <krusader@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2005-2022 Krusader Krew <https://krusader.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "filterdialog.h"
0009 #include "filtertabs.h"
0010 #include "generalfilter.h"
0011 
0012 // QtWidgets
0013 #include <QDialogButtonBox>
0014 #include <QGridLayout>
0015 #include <QPushButton>
0016 
0017 #include <KI18n/KLocalizedString>
0018 #include <utility>
0019 
0020 FilterDialog::FilterDialog(QWidget *parent, const QString &caption, QStringList extraOptions, bool modal)
0021     : QDialog(parent)
0022 {
0023     setWindowTitle(caption.isNull() ? i18n("Krusader::Choose Files") : caption);
0024     setModal(modal);
0025 
0026     auto *mainLayout = new QVBoxLayout;
0027     setLayout(mainLayout);
0028 
0029     auto *filterWidget = new QTabWidget;
0030 
0031     filterTabs = FilterTabs::addTo(filterWidget, FilterTabs::HasProfileHandler, std::move(extraOptions));
0032     generalFilter = dynamic_cast<GeneralFilter *>(filterTabs->get("GeneralFilter"));
0033 
0034     mainLayout->addWidget(filterWidget);
0035 
0036     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Reset);
0037     mainLayout->addWidget(buttonBox);
0038 
0039     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
0040     okButton->setDefault(true);
0041     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0042     connect(buttonBox, &QDialogButtonBox::accepted, this, &FilterDialog::slotOk);
0043     connect(buttonBox, &QDialogButtonBox::rejected, this, &FilterDialog::reject);
0044     connect(buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &FilterDialog::slotReset);
0045     connect(filterTabs, &FilterTabs::closeRequest, this, &FilterDialog::slotCloseRequest);
0046 
0047     generalFilter->searchFor->setFocus();
0048 
0049     if (modal)
0050         exec();
0051 }
0052 
0053 void FilterDialog::applySettings(const FilterSettings &s)
0054 {
0055     filterTabs->applySettings(s);
0056 }
0057 
0058 KrQuery FilterDialog::getQuery()
0059 {
0060     return settings.toQuery();
0061 }
0062 
0063 bool FilterDialog::isExtraOptionChecked(QString name)
0064 {
0065     return filterTabs->isExtraOptionChecked(std::move(name));
0066 }
0067 
0068 void FilterDialog::checkExtraOption(QString name, bool check)
0069 {
0070     filterTabs->checkExtraOption(std::move(name), check);
0071 }
0072 
0073 void FilterDialog::slotCloseRequest(bool doAccept)
0074 {
0075     if (doAccept) {
0076         slotOk();
0077         accept();
0078     } else
0079         reject();
0080 }
0081 
0082 void FilterDialog::slotReset()
0083 {
0084     filterTabs->reset();
0085     generalFilter->searchFor->setFocus();
0086 }
0087 
0088 void FilterDialog::slotOk()
0089 {
0090     settings = filterTabs->getSettings();
0091     if (settings.isValid())
0092         accept();
0093 }