File indexing completed on 2024-04-28 17:06:03
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 "filtertabs.h" 0009 #include "../krglobal.h" 0010 #include "advancedfilter.h" 0011 #include "filterdialog.h" 0012 #include "generalfilter.h" 0013 0014 // QtWidgets 0015 #include <QTabWidget> 0016 0017 #include <KConfigCore/KSharedConfig> 0018 #include <KI18n/KLocalizedString> 0019 #include <KWidgetsAddons/KMessageBox> 0020 #include <utility> 0021 0022 FilterTabs::FilterTabs(int properties, QTabWidget *tabWidget, QObject *parent, QStringList extraOptions) 0023 : QObject(parent) 0024 { 0025 this->tabWidget = tabWidget; 0026 0027 GeneralFilter *generalFilter = new GeneralFilter(this, properties, tabWidget, std::move(extraOptions)); 0028 tabWidget->addTab(generalFilter, i18n("&General")); 0029 filterList.append(generalFilter); 0030 pageNumbers.append(tabWidget->indexOf(generalFilter)); 0031 0032 auto *advancedFilter = new AdvancedFilter(this, tabWidget); 0033 tabWidget->addTab(advancedFilter, i18n("&Advanced")); 0034 filterList.append(advancedFilter); 0035 pageNumbers.append(tabWidget->indexOf(advancedFilter)); 0036 0037 reset(); // apply defaults 0038 } 0039 0040 bool FilterTabs::isExtraOptionChecked(QString name) 0041 { 0042 return dynamic_cast<GeneralFilter *>(get("GeneralFilter"))->isExtraOptionChecked(std::move(name)); 0043 } 0044 0045 void FilterTabs::checkExtraOption(QString name, bool check) 0046 { 0047 dynamic_cast<GeneralFilter *>(get("GeneralFilter"))->checkExtraOption(std::move(name), check); 0048 } 0049 0050 FilterTabs *FilterTabs::addTo(QTabWidget *tabWidget, int props, QStringList extraOptions) 0051 { 0052 return new FilterTabs(props, tabWidget, tabWidget, std::move(extraOptions)); 0053 } 0054 0055 FilterSettings FilterTabs::getSettings() 0056 { 0057 FilterSettings s; 0058 0059 for (int i = 0; i != filterList.count(); i++) { 0060 if (!filterList[i]->getSettings(s)) { 0061 tabWidget->setCurrentIndex(pageNumbers[i]); 0062 return FilterSettings(); 0063 } 0064 } 0065 0066 s.valid = true; 0067 acceptQuery(); 0068 0069 return s; 0070 } 0071 0072 void FilterTabs::applySettings(const FilterSettings &s) 0073 { 0074 if (s.isValid()) { 0075 QListIterator<FilterBase *> it(filterList); 0076 while (it.hasNext()) 0077 it.next()->applySettings(s); 0078 } 0079 } 0080 0081 void FilterTabs::reset() 0082 { 0083 FilterSettings s; // default settings 0084 s.valid = true; 0085 applySettings(s); 0086 } 0087 0088 void FilterTabs::saveToProfile(const QString &name) 0089 { 0090 FilterSettings s(getSettings()); 0091 if (s.isValid()) 0092 s.save(KConfigGroup(krConfig, name)); 0093 krConfig->sync(); 0094 } 0095 0096 void FilterTabs::loadFromProfile(const QString &name) 0097 { 0098 FilterSettings s; 0099 s.load(KConfigGroup(krConfig, name)); 0100 if (!s.isValid()) 0101 KMessageBox::error(tabWidget, i18n("Could not load profile.")); 0102 else 0103 applySettings(s); 0104 } 0105 0106 void FilterTabs::acceptQuery() 0107 { 0108 QListIterator<FilterBase *> it(filterList); 0109 while (it.hasNext()) { 0110 FilterBase *filter = it.next(); 0111 0112 filter->queryAccepted(); 0113 } 0114 } 0115 0116 bool FilterTabs::fillQuery(KrQuery *query) 0117 { 0118 *query = getSettings().toQuery(); 0119 0120 return !query->isNull(); 0121 } 0122 0123 FilterBase *FilterTabs::get(const QString &name) 0124 { 0125 QListIterator<FilterBase *> it(filterList); 0126 while (it.hasNext()) { 0127 FilterBase *filter = it.next(); 0128 0129 if (filter->name() == name) 0130 return filter; 0131 } 0132 0133 return nullptr; 0134 } 0135 0136 KrQuery FilterTabs::getQuery(QWidget *parent) 0137 { 0138 FilterDialog dialog(parent); 0139 return dialog.getQuery(); 0140 }