From 7327127a7852704df9282a45a2995139aa862f4e Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Mon, 13 Feb 2012 21:54:54 +0100 Subject: Update adblock dialog --- src/adblock/adblockmanager.cpp | 7 +- src/adblock/adblockmanager.h | 2 - src/adblock/adblockwidget.cpp | 163 +++++++++++++++++++++++++--------------- src/adblock/adblockwidget.h | 14 +++- src/adblock/settings_adblock.ui | 47 ++++++------ 5 files changed, 139 insertions(+), 94 deletions(-) diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp index ff3aad6a..0c0a66db 100644 --- a/src/adblock/adblockmanager.cpp +++ b/src/adblock/adblockmanager.cpp @@ -112,6 +112,7 @@ void AdBlockManager::loadSettings() } // else + // load automatic and local rules KConfigGroup filtersGroup(_adblockConfig, "FiltersList"); for (int i = 1; i <= 60; ++i) { @@ -123,6 +124,10 @@ void AdBlockManager::loadSettings() loadRules(rulesFilePath); } } + + // load local rules + QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); + loadRules(localRulesFilePath); } @@ -328,7 +333,7 @@ void AdBlockManager::showSettings() dialog->setCaption(i18nc("@title:window", "Ad Block Settings")); dialog->setButtons(KDialog::Ok | KDialog::Cancel); - AdBlockWidget widget; + AdBlockWidget widget(_adblockConfig); dialog->setMainWidget(&widget); connect(dialog, SIGNAL(okClicked()), &widget, SLOT(save())); connect(dialog, SIGNAL(okClicked()), this, SLOT(loadSettings())); diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h index 6b7c225e..f853a8ed 100644 --- a/src/adblock/adblockmanager.h +++ b/src/adblock/adblockmanager.h @@ -165,8 +165,6 @@ private: void updateSubscriptions(); void loadRules(const QString &); - KSharedConfig::Ptr config(); - private: bool _isAdblockEnabled; bool _isHideAdsEnabled; diff --git a/src/adblock/adblockwidget.cpp b/src/adblock/adblockwidget.cpp index 8e6a81ae..5ada506e 100644 --- a/src/adblock/adblockwidget.cpp +++ b/src/adblock/adblockwidget.cpp @@ -33,8 +33,8 @@ // KDE Includes #include +#include #include -#include // Qt Includes #include @@ -42,19 +42,20 @@ #include -AdBlockWidget::AdBlockWidget(QWidget *parent) +AdBlockWidget::AdBlockWidget(KSharedConfig::Ptr config, QWidget *parent) : QWidget(parent) , _changed(false) + , _adblockConfig(config) { setupUi(this); hintLabel->setText(i18n("Filter expression (e.g. http://www.example.com/ad/*, more information):")); connect(hintLabel, SIGNAL(linkActivated(QString)), this, SLOT(slotInfoLinkActivated(QString))); - listWidget->setSortingEnabled(true); - listWidget->setSelectionMode(QAbstractItemView::SingleSelection); + manualFiltersListWidget->setSortingEnabled(true); + manualFiltersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); - searchLine->setListWidget(listWidget); + searchLine->setListWidget(manualFiltersListWidget); insertButton->setIcon(KIcon("list-add")); connect(insertButton, SIGNAL(clicked()), this, SLOT(insertRule())); @@ -72,6 +73,8 @@ AdBlockWidget::AdBlockWidget(QWidget *parent) connect(checkEnableAdblock, SIGNAL(stateChanged(int)), this, SLOT(hasChanged())); connect(checkHideAds, SIGNAL(stateChanged(int)), this, SLOT(hasChanged())); connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(hasChanged())); + + connect(automaticFiltersListWidget, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(hasChanged())); } @@ -80,8 +83,10 @@ void AdBlockWidget::slotInfoLinkActivated(const QString &url) Q_UNUSED(url) QString hintHelpString = i18n("

Enter an expression to filter. Filters can be defined as either:" - "

  • a shell-style wildcard, e.g. http://www.example.com/ads*, the wildcards *?[] may be used
  • " - "
  • a full regular expression by surrounding the string with '/', e.g. /\\/(ad|banner)\\./
" + "
  • a shell-style wildcard, e.g. http://www.example.com/ads*, " + "the wildcards *?[] may be used
  • " + "
  • a full regular expression by surrounding the string with '/', " + "e.g. /\\/(ad|banner)\\./
" "

Any filter string can be preceded by '@@' to whitelist (allow) any matching URL, " "which takes priority over any blacklist (blocking) filter."); @@ -95,64 +100,79 @@ void AdBlockWidget::insertRule() if (rule.isEmpty()) return; - listWidget->addItem(rule); + manualFiltersListWidget->addItem(rule); addFilterLineEdit->clear(); } void AdBlockWidget::removeRule() { - listWidget->takeItem(listWidget->currentRow()); + manualFiltersListWidget->takeItem(manualFiltersListWidget->currentRow()); } void AdBlockWidget::load() { -// const bool isAdBlockEnabled = ReKonfig::adBlockEnabled(); -// checkEnableAdblock->setChecked(isAdBlockEnabled); -// // update enabled status -// checkHideAds->setEnabled(checkEnableAdblock->isChecked()); -// tabWidget->setEnabled(checkEnableAdblock->isChecked()); -// -// const bool areImageFiltered = ReKonfig::hideAdsEnabled(); -// checkHideAds->setChecked(areImageFiltered); -// -// const int days = ReKonfig::updateInterval(); -// spinBox->setValue(days); -// -// const QStringList subscriptions = ReKonfig::subscriptionTitles(); -// -// // load automatic rules -// Q_FOREACH(const QString & sub, subscriptions) -// { -// QTreeWidgetItem *subItem = new QTreeWidgetItem(treeWidget); -// subItem->setText(0, sub); -// loadRules(subItem); -// } -// -// // load local rules -// KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); -// KConfigGroup localGroup(config, "rules"); -// const QStringList rules = localGroup.readEntry("local-rules" , QStringList()); -// Q_FOREACH(const QString & rule, rules) -// { -// listWidget->addItem(rule); -// } -} + // General settings + KConfigGroup settingsGroup(_adblockConfig, "Settings"); + const bool isAdBlockEnabled = settingsGroup.readEntry("adBlockEnabled", false); + checkEnableAdblock->setChecked(isAdBlockEnabled); -void AdBlockWidget::loadRules(QTreeWidgetItem *item) -{ - KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); - KConfigGroup localGroup(config, "rules"); + // update enabled status + checkHideAds->setEnabled(isAdBlockEnabled); + tabWidget->setEnabled(isAdBlockEnabled); + + const bool areImageFiltered = settingsGroup.readEntry("hideAdsEnabled", false); + checkHideAds->setChecked(areImageFiltered); + + const int days = settingsGroup.readEntry("updateInterval", 7); + spinBox->setValue(days); + + // ------------------------------------------------------------------------------ + + // automatic filters + KConfigGroup autoFiltersGroup(_adblockConfig, "FiltersList"); + + int i = 1; + QString n = QString::number(i); + + while (autoFiltersGroup.hasKey("FilterName-" + n)) + { + bool filterEnabled = autoFiltersGroup.readEntry("FilterEnabled-" + n, false); + QString filterName = autoFiltersGroup.readEntry("FilterName-" + n, QString()); + + QListWidgetItem *subItem = new QListWidgetItem(automaticFiltersListWidget); + subItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); + if (filterEnabled) + subItem->setCheckState(Qt::Checked); + else + subItem->setCheckState(Qt::Unchecked); + + subItem->setText(filterName); + + i++; + n = QString::number(i); + } + + // ------------------------------------------------------------------------------ - QString str = item->text(0) + "-rules"; - QStringList rules = localGroup.readEntry(str , QStringList()); + // local filters + QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); - Q_FOREACH(const QString & rule, rules) + QFile ruleFile(localRulesFilePath); + if (!ruleFile.open(QFile::ReadOnly | QFile::Text)) { - QTreeWidgetItem *subItem = new QTreeWidgetItem(item); - subItem->setText(0, rule); + kDebug() << "Unable to open rule file" << localRulesFilePath; + return; + } + + QTextStream in(&ruleFile); + while (!in.atEnd()) + { + QString stringRule = in.readLine(); + QListWidgetItem *subItem = new QListWidgetItem(manualFiltersListWidget); + subItem->setText(stringRule); } } @@ -162,24 +182,45 @@ void AdBlockWidget::save() if (!_changed) return; - // local rules - KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); - KConfigGroup localGroup(config , "rules"); + // General settings + KConfigGroup settingsGroup(_adblockConfig, "Settings"); + + settingsGroup.writeEntry("adBlockEnabled", checkEnableAdblock->isChecked()); + settingsGroup.writeEntry("hideAdsEnabled", checkHideAds->isChecked()); + settingsGroup.writeEntry("updateInterval", spinBox->value()); - QStringList localRules; + // automatic filters + KConfigGroup autoFiltersGroup(_adblockConfig, "FiltersList"); + for (int i = 0; i < automaticFiltersListWidget->count(); i++) + { + QListWidgetItem *subItem = automaticFiltersListWidget->item(i); + bool active = true; + if (subItem->checkState() == Qt::Unchecked) + active = false; + + QString n = QString::number(i + 1); + autoFiltersGroup.writeEntry("FilterEnabled-" + n, active); + } + + // local filters + QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); - const int n = listWidget->count(); - for (int i = 0; i < n; ++i) + QFile ruleFile(localRulesFilePath); + if (!ruleFile.open(QFile::WriteOnly | QFile::Text)) { - QListWidgetItem *item = listWidget->item(i); - localRules << item->text(); + kDebug() << "Unable to open rule file" << localRulesFilePath; + return; } - localGroup.writeEntry("local-rules" , localRules); -// ReKonfig::setAdBlockEnabled(checkEnableAdblock->isChecked()); -// ReKonfig::setHideAdsEnabled(checkHideAds->isChecked()); -// ReKonfig::setUpdateInterval(spinBox->value()); + QTextStream out(&ruleFile); + for (int i = 0; i < manualFiltersListWidget->count(); i++) + { + QListWidgetItem *subItem = manualFiltersListWidget->item(i); + QString stringRule = subItem->text(); + out << stringRule << '\n'; + } + // ------------------------------------------------------------------------------- _changed = false; emit changed(false); } diff --git a/src/adblock/adblockwidget.h b/src/adblock/adblockwidget.h index 3c7c667b..0f9e4d7f 100644 --- a/src/adblock/adblockwidget.h +++ b/src/adblock/adblockwidget.h @@ -28,12 +28,18 @@ #define ADBLOCK_WIDGET_H +// Rekonq Includes +#include "rekonq_defines.h" + // Ui Includes #include "ui_settings_adblock.h" +// KDE Includes +#include + // Qt Includes -#include -#include +#include +#include class AdBlockWidget : public QWidget, private Ui::adblock @@ -41,7 +47,7 @@ class AdBlockWidget : public QWidget, private Ui::adblock Q_OBJECT public: - AdBlockWidget(QWidget *parent = 0); + AdBlockWidget(KSharedConfig::Ptr config, QWidget *parent = 0); bool changed(); @@ -60,9 +66,9 @@ private Q_SLOTS: private: void load(); - void loadRules(QTreeWidgetItem *item); bool _changed; + KSharedConfig::Ptr _adblockConfig; }; #endif // ADBLOCK_WIDGET_H diff --git a/src/adblock/settings_adblock.ui b/src/adblock/settings_adblock.ui index 68fcf520..cf6c49d3 100644 --- a/src/adblock/settings_adblock.ui +++ b/src/adblock/settings_adblock.ui @@ -39,26 +39,14 @@ - - - false - - - false - - - - 1 - - - + - Update automatic filters every: + Update enabled automatic filters every: @@ -78,6 +66,13 @@ + + + + days + + + @@ -115,7 +110,7 @@ - + @@ -159,9 +154,14 @@ - KListWidget - QListWidget -

klistwidget.h
+ KListWidgetSearchLine + KLineEdit +
klistwidgetsearchline.h
+ + + KLineEdit + QLineEdit +
klineedit.h
KIntSpinBox @@ -169,9 +169,9 @@
knuminput.h
- KLineEdit - QLineEdit -
klineedit.h
+ KListWidget + QListWidget +
klistwidget.h
KTabWidget @@ -179,11 +179,6 @@
ktabwidget.h
1
- - KListWidgetSearchLine - KLineEdit -
klistwidgetsearchline.h
-
-- cgit v1.2.1