diff options
Diffstat (limited to 'src/adblock')
| -rw-r--r-- | src/adblock/adblockmanager.cpp | 15 | ||||
| -rw-r--r-- | src/adblock/adblockmanager.h | 1 | ||||
| -rw-r--r-- | src/adblock/adblockwidget.cpp | 200 | ||||
| -rw-r--r-- | src/adblock/adblockwidget.h | 66 | ||||
| -rw-r--r-- | src/adblock/settings_adblock.ui | 190 | 
5 files changed, 472 insertions, 0 deletions
| diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp index 6a4a3827..ff09fdc7 100644 --- a/src/adblock/adblockmanager.cpp +++ b/src/adblock/adblockmanager.cpp @@ -33,6 +33,7 @@  // Local Includes  #include "adblocknetworkreply.h" +#include "adblockwidget.h"  #include "webpage.h"  // KDE Includes @@ -362,3 +363,17 @@ void AdBlockManager::addSubscription(const QString &title, const QString &locati      ReKonfig::setSubscriptionTitles(titles);      ReKonfig::setSubscriptionLocations(locations);  } + + +void AdBlockManager::showSettings() +{ +    QPointer<KDialog> dialog = new KDialog(); +    dialog->setCaption(i18nc("@title:window", "Ad Block Settings")); +    dialog->setButtons(KDialog::Ok); + +    AdBlockWidget widget; +    dialog->setMainWidget(&widget); +    dialog->exec(); + +    dialog->deleteLater(); +} diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h index 1f716c6d..ac62c508 100644 --- a/src/adblock/adblockmanager.h +++ b/src/adblock/adblockmanager.h @@ -142,6 +142,7 @@ public:  public slots:      void loadSettings(bool checkUpdateDate = true); +    void showSettings();  private:      void updateNextSubscription(); diff --git a/src/adblock/adblockwidget.cpp b/src/adblock/adblockwidget.cpp new file mode 100644 index 00000000..ad8bd599 --- /dev/null +++ b/src/adblock/adblockwidget.cpp @@ -0,0 +1,200 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010-2011 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/>. +* +* ============================================================ */ + + +// Self Includes +#include "adblockwidget.h" +#include "adblockwidget.moc" + +// Auto Includes +#include "rekonq.h" + +// KDE Includes +#include <KSharedConfig> +#include <KIcon> +#include <KDebug> + +// Qt Includes +#include <QString> +#include <QWhatsThis> +#include <QListWidgetItem> + + +AdBlockWidget::AdBlockWidget(QWidget *parent) +    : QWidget(parent) +    , _changed(false) +{ +    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(); + +    spinBox->setSuffix(ki18np(" day", " days")); + +    // emit changed signal +    connect(insertButton,       SIGNAL(clicked()),           this, SLOT(hasChanged())); +    connect(removeButton,       SIGNAL(clicked()),           this, SLOT(hasChanged())); +    connect(checkEnableAdblock, SIGNAL(stateChanged(int)),   this, SLOT(hasChanged())); +    connect(checkHideAds,       SIGNAL(stateChanged(int)),   this, SLOT(hasChanged())); +    connect(spinBox,            SIGNAL(valueChanged(int)),   this, SLOT(hasChanged())); +} + + +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); +    // update enabled status +    checkHideAds->setEnabled(checkEnableAdblock->isChecked()); +    tabWidget->setEnabled(checkEnableAdblock->isChecked()); + +    bool areImageFiltered = ReKonfig::hideAdsEnabled(); +    checkHideAds->setChecked(areImageFiltered); + +    int days = ReKonfig::updateInterval(); +    spinBox->setValue(days); + +    QStringList subscriptions = ReKonfig::subscriptionTitles(); + +    // load automatic rules +    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"); +    QStringList rules = localGroup.readEntry("local-rules" , QStringList()); +    foreach(const QString & rule, rules) +    { +        listWidget->addItem(rule); +    } +} + + +void AdBlockWidget::loadRules(QTreeWidgetItem *item) +{ +    KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); +    KConfigGroup localGroup(config, "rules"); + +    QString str = item->text(0) + "-rules"; +    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 = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); +    KConfigGroup localGroup(config , "rules"); + +    QStringList localRules; + +    n = listWidget->count(); +    for (int i = 0; i < n; ++i) +    { +        QListWidgetItem *item = listWidget->item(i); +        localRules << item->text(); +    } +    localGroup.writeEntry("local-rules" , localRules); + +    ReKonfig::setAdBlockEnabled(checkEnableAdblock->isChecked()); +    ReKonfig::setHideAdsEnabled(checkHideAds->isChecked()); +    ReKonfig::setUpdateInterval(spinBox->value()); + +    _changed = false; +    emit changed(false); +} + + +void AdBlockWidget::hasChanged() +{ +    // update enabled status +    checkHideAds->setEnabled(checkEnableAdblock->isChecked()); +    tabWidget->setEnabled(checkEnableAdblock->isChecked()); +    _changed = true; +    emit changed(true); +} + + +bool AdBlockWidget::changed() +{ +    return _changed; +} diff --git a/src/adblock/adblockwidget.h b/src/adblock/adblockwidget.h new file mode 100644 index 00000000..08194ada --- /dev/null +++ b/src/adblock/adblockwidget.h @@ -0,0 +1,66 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010-2011 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 + + +// Ui Includes +#include "ui_settings_adblock.h" + +// Qt Includes +#include <QtGui/QWidget> +#include <QtGui/QTreeWidgetItem> + + +class AdBlockWidget : public QWidget, private Ui::adblock +{ +    Q_OBJECT + +public: +    AdBlockWidget(QWidget *parent = 0); + +    void save(); +    bool changed(); + +signals: +    void changed(bool); + +private slots: +    void hasChanged(); + +    void slotInfoLinkActivated(const QString &); +    void insertRule(); +    void removeRule(); + +private: +    void load(); +    void loadRules(QTreeWidgetItem *item); + +    bool _changed; +}; + +#endif // ADBLOCK_WIDGET_H diff --git a/src/adblock/settings_adblock.ui b/src/adblock/settings_adblock.ui new file mode 100644 index 00000000..68fcf520 --- /dev/null +++ b/src/adblock/settings_adblock.ui @@ -0,0 +1,190 @@ +<?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> +  <layout class="QVBoxLayout" name="verticalLayout"> +   <item> +    <widget class="QCheckBox" name="checkEnableAdblock"> +     <property name="text"> +      <string>&Enable Ad Block</string> +     </property> +    </widget> +   </item> +   <item> +    <widget class="QCheckBox" name="checkHideAds"> +     <property name="text"> +      <string>&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"> +         <attribute name="headerVisible"> +          <bool>false</bool> +         </attribute> +         <attribute name="headerVisible"> +          <bool>false</bool> +         </attribute> +         <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>Update automatic filters every:</string> +           </property> +          </widget> +         </item> +         <item> +          <widget class="KIntSpinBox" name="spinBox"> +           <property name="minimumSize"> +            <size> +             <width>120</width> +             <height>0</height> +            </size> +           </property> +           <property name="suffix"> +            <string/> +           </property> +           <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 comment="KDE::DoNotExtract">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="toolTip"> +            <string>Add filter expression</string> +           </property> +           <property name="text"> +            <string>...</string> +           </property> +          </widget> +         </item> +         <item> +          <widget class="QToolButton" name="removeButton"> +           <property name="toolTip"> +            <string>Remove filter expression</string> +           </property> +           <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>KIntSpinBox</class> +   <extends>QSpinBox</extends> +   <header>knuminput.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> | 
