File indexing completed on 2024-12-01 04:31:58

0001 /*
0002     This file is part of Choqok, the KDE micro-blogging client
0003 
0004     SPDX-FileCopyrightText: 2009-2010 Mehrdad Momeny <mehrdad.momeny@gmail.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0007 */
0008 
0009 #include "configurefilters.h"
0010 
0011 #include <QCheckBox>
0012 #include <QDialogButtonBox>
0013 #include <QPointer>
0014 #include <QPushButton>
0015 
0016 #include <KLocalizedString>
0017 
0018 #include "addeditfilter.h"
0019 #include "filtersettings.h"
0020 
0021 ConfigureFilters::ConfigureFilters(QWidget *parent):
0022     QDialog(parent)
0023 {
0024     QVBoxLayout *mainLayout = new QVBoxLayout;
0025     setLayout(mainLayout);
0026 
0027     ui.setupUi(this);
0028 
0029     mainLayout->addLayout(ui.horizontalLayout);
0030 
0031     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0032     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
0033     okButton->setDefault(true);
0034     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0035     connect(buttonBox, &QDialogButtonBox::accepted, this, &ConfigureFilters::accept);
0036     connect(buttonBox, &QDialogButtonBox::rejected, this, &ConfigureFilters::reject);
0037     mainLayout->addWidget(buttonBox);
0038 
0039     resize(500, 300);
0040 
0041     connect(ui.btnAdd, &QPushButton::clicked, this, &ConfigureFilters::slotAddFilter);
0042     connect(ui.btnEdit, &QPushButton::clicked, this, &ConfigureFilters::slotEditFilter);
0043     connect(ui.btnRemove, &QPushButton::clicked, this, &ConfigureFilters::slotRemoveFilter);
0044     connect(ui.cfg_hideRepliesNotRelatedToMe, &QCheckBox::toggled, this,
0045             &ConfigureFilters::slotHideRepliesNotRelatedToMeToggled);
0046     reloadFiltersTable();
0047 }
0048 
0049 ConfigureFilters::~ConfigureFilters()
0050 {
0051 }
0052 
0053 void ConfigureFilters::accept()
0054 {
0055     saveFiltersTable();
0056     QDialog::accept();
0057 }
0058 
0059 void ConfigureFilters::reloadFiltersTable()
0060 {
0061     ui.filters->clearContents();
0062     QList<Filter *> filters = FilterSettings::self()->filters();
0063     //qDebug() << filters.count();
0064     for (Filter *filter: filters) {
0065         addNewFilter(filter);
0066     }
0067     ui.cfg_hideNoneFriendsReplies->setChecked(FilterSettings::hideNoneFriendsReplies());
0068     ui.cfg_hideRepliesNotRelatedToMe->setChecked(FilterSettings::hideRepliesNotRelatedToMe());
0069 }
0070 
0071 void ConfigureFilters::saveFiltersTable()
0072 {
0073     QList<Filter *> list;
0074     int count = ui.filters->rowCount();
0075     for (int i = 0; i < count; ++i) {
0076         Filter::FilterField field = (Filter::FilterField) ui.filters->item(i, 0)->data(32).toInt();
0077         Filter::FilterType type = (Filter::FilterType) ui.filters->item(i, 1)->data(32).toInt();
0078         Filter::FilterAction action = (Filter::FilterAction) ui.filters->item(i, 3)->data(32).toInt();
0079         QString text = ui.filters->item(i, 2)->text();
0080         bool dontHideReplies = ui.filters->item(i, 2)->data(32).toBool();
0081         Filter *f = new Filter(text, field, type, action, dontHideReplies, FilterSettings::self());
0082         list << f;
0083     }
0084     FilterSettings::self()->setFilters(list);
0085     FilterSettings::setHideNoneFriendsReplies(ui.cfg_hideNoneFriendsReplies->isChecked());
0086     FilterSettings::setHideRepliesNotRelatedToMe(ui.cfg_hideRepliesNotRelatedToMe->isChecked());
0087     FilterSettings::self()->writeConfig();
0088 }
0089 
0090 void ConfigureFilters::slotAddFilter()
0091 {
0092     AddEditFilter *f = new AddEditFilter(this);
0093     connect(f, &AddEditFilter::newFilterRegistered, this, &ConfigureFilters::addNewFilter);
0094     f->show();
0095 }
0096 
0097 void ConfigureFilters::slotEditFilter()
0098 {
0099     if (ui.filters->selectedItems().count() > 0) {
0100         int row = ui.filters->currentRow();
0101         Filter::FilterField field = (Filter::FilterField) ui.filters->item(row, 0)->data(32).toInt();
0102         Filter::FilterType type = (Filter::FilterType) ui.filters->item(row, 1)->data(32).toInt();
0103         Filter::FilterAction action = (Filter::FilterAction) ui.filters->item(row, 3)->data(32).toInt();
0104         bool dontHideReplies = ui.filters->item(row, 2)->data(32).toBool();
0105         QString text = ui.filters->item(row, 2)->text();
0106         Filter *f = new Filter(text, field, type, action, dontHideReplies, this);
0107         QPointer<AddEditFilter> dialog = new AddEditFilter(this, f);
0108         connect(dialog, &AddEditFilter::filterUpdated, this, &ConfigureFilters::slotUpdateFilter);
0109         dialog->exec();
0110     }
0111 }
0112 
0113 void ConfigureFilters::slotRemoveFilter()
0114 {
0115     if (ui.filters->selectedItems().count() > 0) {
0116         int row = ui.filters->currentRow();
0117         ui.filters->removeRow(row);
0118     }
0119 }
0120 
0121 void ConfigureFilters::addNewFilter(Filter *filter)
0122 {
0123     int row = ui.filters->rowCount();
0124     ui.filters->insertRow(row);
0125     QTableWidgetItem *item1 = new QTableWidgetItem(FilterSettings::self()->filterFieldName(filter->filterField()));
0126     item1->setData(32, filter->filterField());
0127     ui.filters->setItem(row, 0, item1);
0128     QTableWidgetItem *item2 = new QTableWidgetItem(FilterSettings::self()->filterTypeName(filter->filterType()));
0129     item2->setData(32, filter->filterType());
0130     ui.filters->setItem(row, 1, item2);
0131     QTableWidgetItem *item3 = new QTableWidgetItem(filter->filterText());
0132     item3->setData(32, filter->dontHideReplies());
0133     ui.filters->setItem(row, 2, item3);
0134     QTableWidgetItem *item4 = new QTableWidgetItem(FilterSettings::self()->filterActionName(filter->filterAction()));
0135     item4->setData(32, filter->filterAction());
0136     ui.filters->setItem(row, 3, item4);
0137 }
0138 
0139 void ConfigureFilters::slotUpdateFilter(Filter *filter)
0140 {
0141     int row = ui.filters->currentRow();
0142     ui.filters->item(row, 0)->setText(FilterSettings::self()->filterFieldName(filter->filterField()));
0143     ui.filters->item(row, 0)->setData(32, filter->filterField());
0144 
0145     ui.filters->item(row, 1)->setText(FilterSettings::self()->filterTypeName(filter->filterType()));
0146     ui.filters->item(row, 1)->setData(32, filter->filterType());
0147 
0148     ui.filters->item(row, 2)->setText(filter->filterText());
0149     ui.filters->item(row, 2)->setData(32, filter->dontHideReplies());
0150 
0151     ui.filters->item(row, 3)->setText(FilterSettings::self()->filterActionName(filter->filterAction()));
0152     ui.filters->item(row, 3)->setData(32, filter->filterAction());
0153 }
0154 
0155 void ConfigureFilters::slotHideRepliesNotRelatedToMeToggled(bool enabled)
0156 {
0157     if (enabled) {
0158         ui.cfg_hideNoneFriendsReplies->setChecked(false);
0159         ui.cfg_hideNoneFriendsReplies->setEnabled(false);
0160     } else {
0161         ui.cfg_hideNoneFriendsReplies->setEnabled(true);
0162         ui.cfg_hideNoneFriendsReplies->setChecked(FilterSettings::hideNoneFriendsReplies());
0163     }
0164 }
0165 
0166 #include "moc_configurefilters.cpp"