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 }