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 }