summaryrefslogtreecommitdiff
path: root/src/settings
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings')
-rw-r--r--src/settings/adblockwidget.cpp158
-rw-r--r--src/settings/adblockwidget.h56
-rw-r--r--src/settings/settings_adblock.ui167
-rw-r--r--src/settings/settingsdialog.cpp22
4 files changed, 393 insertions, 10 deletions
diff --git a/src/settings/adblockwidget.cpp b/src/settings/adblockwidget.cpp
new file mode 100644
index 00000000..45e5fd5c
--- /dev/null
+++ b/src/settings/adblockwidget.cpp
@@ -0,0 +1,158 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+#include "adblockwidget.h"
+#include "adblockwidget.moc"
+
+#include "rekonq.h"
+
+#include <KSharedConfig>
+#include <KIcon>
+#include <KDebug>
+
+#include <QString>
+#include <QWhatsThis>
+#include <QListWidgetItem>
+
+
+AdBlockWidget::AdBlockWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ setupUi(this);
+
+ hintLabel->setText( i18n("<qt>Filter expression (e.g. <tt>http://www.example.com/ad/*</tt>, <a href=\"filterhelp\">more information</a>):") );
+ connect( hintLabel, SIGNAL(linkActivated(const QString &)), this, SLOT(slotInfoLinkActivated(const QString &)) );
+
+ listWidget->setSortingEnabled(true);
+ listWidget->setSelectionMode(QAbstractItemView::SingleSelection);
+
+ searchLine->setListWidget(listWidget);
+
+ insertButton->setIcon( KIcon("list-add") );
+ connect( insertButton, SIGNAL( clicked() ), this, SLOT( insertRule() ) );
+
+ removeButton->setIcon( KIcon("list-remove") );
+ connect( removeButton, SIGNAL( clicked() ), this, SLOT( removeRule() ) );
+
+ load();
+}
+
+
+void AdBlockWidget::slotInfoLinkActivated(const QString &url)
+{
+ Q_UNUSED(url)
+
+ QString hintHelpString = i18n("<qt><p>Enter an expression to filter. Filters can be defined as either:"
+ "<ul><li>a shell-style wildcard, e.g. <tt>http://www.example.com/ads*</tt>, the wildcards <tt>*?[]</tt> may be used</li>"
+ "<li>a full regular expression by surrounding the string with '<tt>/</tt>', e.g. <tt>/\\/(ad|banner)\\./</tt></li></ul>"
+ "<p>Any filter string can be preceded by '<tt>@@</tt>' to whitelist (allow) any matching URL, "
+ "which takes priority over any blacklist (blocking) filter.");
+
+ QWhatsThis::showText( QCursor::pos(), hintHelpString );
+}
+
+
+void AdBlockWidget::insertRule()
+{
+ QString rule = addFilterLineEdit->text();
+ if(rule.isEmpty())
+ return;
+
+ listWidget->addItem( rule );
+ addFilterLineEdit->clear();
+}
+
+
+void AdBlockWidget::removeRule()
+{
+ listWidget->takeItem( listWidget->currentRow() );
+}
+
+
+void AdBlockWidget::load()
+{
+ bool isAdBlockEnabled = ReKonfig::adBlockEnabled();
+ checkEnableAdblock->setChecked(isAdBlockEnabled);
+
+ bool areImageFiltered = ReKonfig::hideAdsEnabled();
+ checkHideImages->setChecked(areImageFiltered);
+
+ QStringList subscriptions = ReKonfig::subscriptionNames();
+
+ // load automatic rules
+ foreach(QString sub, subscriptions)
+ {
+ QTreeWidgetItem *subItem = new QTreeWidgetItem(treeWidget);
+ subItem->setText(0, sub);
+ loadRules(subItem);
+ }
+
+ // load local rules
+ KSharedConfig::Ptr config = KGlobal::config();
+ KConfigGroup localGroup( config, "rules" );
+ QStringList rules = localGroup.readEntry( "local-rules" , QStringList() );
+ foreach(const QString &rule, rules)
+ {
+ listWidget->addItem( rule );
+ }
+}
+
+
+void AdBlockWidget::loadRules(QTreeWidgetItem *item)
+{
+ KSharedConfig::Ptr config = KGlobal::config();
+ KConfigGroup localGroup( config, "rules" );
+
+ QString str = item->text(0) + "-rules";
+ kDebug() << str;
+ QStringList rules = localGroup.readEntry( str , QStringList() );
+
+ foreach(const QString &rule, rules)
+ {
+ QTreeWidgetItem *subItem = new QTreeWidgetItem(item);
+ subItem->setText(0, rule);
+ }
+}
+
+
+void AdBlockWidget::save()
+{
+ int n;
+
+ // local rules
+ KSharedConfig::Ptr config = KGlobal::config();
+ KConfigGroup localGroup( config , "rules" );
+
+ QStringList localRules;
+
+ n = listWidget->count();
+ for(int i = 0; i < n; ++i)
+ {
+ QListWidgetItem *item = listWidget->takeItem(i);
+ localRules << item->text();
+ }
+ localGroup.writeEntry( "local-rules" , localRules );
+}
diff --git a/src/settings/adblockwidget.h b/src/settings/adblockwidget.h
new file mode 100644
index 00000000..67061800
--- /dev/null
+++ b/src/settings/adblockwidget.h
@@ -0,0 +1,56 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+#ifndef ADBLOCK_WIDGET_H
+#define ADBLOCK_WIDGET_H
+
+
+#include "ui_settings_adblock.h"
+
+#include <QWidget>
+#include <QTreeWidgetItem>
+
+
+class AdBlockWidget : public QWidget, private Ui::adblock
+{
+Q_OBJECT
+
+public:
+ AdBlockWidget(QWidget *parent = 0);
+
+ void save();
+
+private slots:
+ void slotInfoLinkActivated(const QString &);
+ void insertRule();
+ void removeRule();
+
+private:
+ void load();
+ void loadRules(QTreeWidgetItem *item);
+};
+
+#endif // ADBLOCK_WIDGET_H
diff --git a/src/settings/settings_adblock.ui b/src/settings/settings_adblock.ui
new file mode 100644
index 00000000..28e1f973
--- /dev/null
+++ b/src/settings/settings_adblock.ui
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>adblock</class>
+ <widget class="QWidget" name="adblock">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>601</width>
+ <height>507</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QCheckBox" name="checkEnableAdblock">
+ <property name="text">
+ <string>&amp;Enable AdBlock</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkHideImages">
+ <property name="text">
+ <string>&amp;Hide filtered Elements</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="KTabWidget" name="tabWidget">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tab_3">
+ <attribute name="title">
+ <string>Automatic Filters</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QTreeWidget" name="treeWidget">
+ <column>
+ <property name="text">
+ <string notr="true">1</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Automatic update interval:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox">
+ <property name="value">
+ <number>7</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
+ <string>Manual Filters</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Search:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="KListWidgetSearchLine" name="searchLine"/>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="KListWidget" name="listWidget"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="hintLabel">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="KLineEdit" name="addFilterLineEdit"/>
+ </item>
+ <item>
+ <widget class="QToolButton" name="insertButton">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="removeButton">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>KListWidget</class>
+ <extends>QListWidget</extends>
+ <header>klistwidget.h</header>
+ </customwidget>
+ <customwidget>
+ <class>KLineEdit</class>
+ <extends>QLineEdit</extends>
+ <header>klineedit.h</header>
+ </customwidget>
+ <customwidget>
+ <class>KTabWidget</class>
+ <extends>QTabWidget</extends>
+ <header>ktabwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>KListWidgetSearchLine</class>
+ <extends>KLineEdit</extends>
+ <header>klistwidgetsearchline.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/settings/settingsdialog.cpp b/src/settings/settingsdialog.cpp
index e7a9d1e8..fa1e8891 100644
--- a/src/settings/settingsdialog.cpp
+++ b/src/settings/settingsdialog.cpp
@@ -36,12 +36,14 @@
#include "application.h"
#include "mainwindow.h"
#include "webtab.h"
+#include "adblockwidget.h"
//Ui Includes
#include "ui_settings_general.h"
#include "ui_settings_tabs.h"
#include "ui_settings_fonts.h"
#include "ui_settings_webkit.h"
+#include "ui_settings_adblock.h"
// KDE Includes
#include <KConfig>
@@ -63,12 +65,14 @@ private:
Ui::tabs tabsUi;
Ui::fonts fontsUi;
Ui::webkit webkitUi;
+
+ AdBlockWidget *adBlockWidg;
KCModuleProxy *proxyModule;
KCModuleProxy *ebrowsingModule;
KCModuleProxy *cookiesModule;
KCModuleProxy *cacheModule;
- KCModuleProxy *adblockModule;
+
KShortcutsEditor *shortcutsEditor;
Private(SettingsDialog *parent);
@@ -123,10 +127,10 @@ Private::Private(SettingsDialog *parent)
KIcon webkitIcon = KIcon(QIcon(webkitIconPath));
pageItem->setIcon(webkitIcon);
- KCModuleInfo adblockInfo("khtml_filter.desktop");
- adblockModule = new KCModuleProxy(adblockInfo,parent);
- pageItem = parent->addPage(adblockModule, i18n(adblockInfo.moduleName().toLocal8Bit()));
- pageItem->setIcon(KIcon(adblockInfo.icon()));
+ adBlockWidg = new AdBlockWidget(parent);
+ adBlockWidg->layout()->setMargin(0);
+ pageItem = parent->addPage(adBlockWidg , i18n("Ad Block"));
+ pageItem->setIcon( KIcon("preferences-web-browser-adblock") );
shortcutsEditor = new KShortcutsEditor(Application::instance()->mainWindow()->actionCollection(), parent);
pageItem = parent->addPage(shortcutsEditor , i18n("Shortcuts"));
@@ -137,7 +141,7 @@ Private::Private(SettingsDialog *parent)
pageItem = parent->addPage(ebrowsingModule, i18n(ebrowsingInfo.moduleName().toLocal8Bit()));
pageItem->setIcon(KIcon(ebrowsingInfo.icon()));
- // WARNING remember wheh changing here that the smaller netbooks
+ // WARNING remember wheh changing here that the smallest netbooks
// have a 1024x576 resolution. So DON'T bother that limits!!
parent->setMinimumSize(700,525);
}
@@ -162,8 +166,7 @@ SettingsDialog::SettingsDialog(QWidget *parent)
connect(d->cookiesModule, SIGNAL(changed(bool)), this, SLOT(updateButtons()));
connect(d->proxyModule, SIGNAL(changed(bool)), this, SLOT(updateButtons()));
connect(d->cacheModule, SIGNAL(changed(bool)), this, SLOT(updateButtons()));
- connect(d->adblockModule, SIGNAL(changed(bool)), this, SLOT(updateButtons()));
-
+
connect(d->shortcutsEditor, SIGNAL(keyChange()), this, SLOT(updateButtons()));
connect(this, SIGNAL(applyClicked()), this, SLOT(saveSettings()));
@@ -213,7 +216,7 @@ void SettingsDialog::saveSettings()
d->proxyModule->save();
d->cacheModule->save();
d->shortcutsEditor->save();
- d->adblockModule->save();
+ d->adBlockWidg->save();
}
@@ -224,7 +227,6 @@ bool SettingsDialog::hasChanged()
|| d->cookiesModule->changed()
|| d->proxyModule->changed()
|| d->cacheModule->changed()
- || d->adblockModule->changed()
|| d->shortcutsEditor->isModified();
;
}