From 8bf09265592487ffb797ff741b92eb1c90fa7f6e Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 21 Jul 2017 11:07:26 +0200 Subject: [PATCH] Simplified adblock dialog. --- src/definitions/definitions.h | 1 + .../adblock/adblockaddsubscriptiondialog.cpp | 5 + .../adblock/adblockaddsubscriptiondialog.ui | 2 +- src/network-web/adblock/adblockdialog.cpp | 176 ++++++++++-------- src/network-web/adblock/adblockdialog.h | 4 +- src/network-web/adblock/adblockdialog.ui | 117 ++---------- src/network-web/adblock/adblockicon.cpp | 14 +- src/network-web/adblock/adblockmanager.cpp | 19 +- src/network-web/adblock/adblockmanager.h | 5 +- 9 files changed, 128 insertions(+), 215 deletions(-) diff --git a/src/definitions/definitions.h b/src/definitions/definitions.h index 9c5f96513..822ce60e3 100755 --- a/src/definitions/definitions.h +++ b/src/definitions/definitions.h @@ -26,6 +26,7 @@ #define ARGUMENTS_LIST_SEPARATOR "\n" +#define ADBLOCK_HOWTO_FILTERS "http://adblockplus.org/en/filters" #define ADBLOCK_UPDATE_DAYS_INTERVAL 5 #define ADBLOCK_ICON_ACTIVE "adblock" #define ADBLOCK_ICON_DISABLED "adblock-disabled" diff --git a/src/network-web/adblock/adblockaddsubscriptiondialog.cpp b/src/network-web/adblock/adblockaddsubscriptiondialog.cpp index 12d74f6bc..adc2c1709 100755 --- a/src/network-web/adblock/adblockaddsubscriptiondialog.cpp +++ b/src/network-web/adblock/adblockaddsubscriptiondialog.cpp @@ -19,6 +19,8 @@ #include "network-web/adblock/adblockaddsubscriptiondialog.h" #include "definitions/definitions.h" +#include "miscellaneous/application.h" +#include "miscellaneous/iconfactory.h" #include #include @@ -58,6 +60,9 @@ AdBlockAddSubscriptionDialog::AdBlockAddSubscriptionDialog(QWidget* parent) m_ui->m_cbUsePredefined->setChecked(true); indexChanged(0); + + setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint); + setWindowIcon(qApp->icons()->miscIcon(ADBLOCK_ICON_ACTIVE)); } QString AdBlockAddSubscriptionDialog::title() const { diff --git a/src/network-web/adblock/adblockaddsubscriptiondialog.ui b/src/network-web/adblock/adblockaddsubscriptiondialog.ui index c59e2bc69..12ca7870e 100755 --- a/src/network-web/adblock/adblockaddsubscriptiondialog.ui +++ b/src/network-web/adblock/adblockaddsubscriptiondialog.ui @@ -11,7 +11,7 @@ - Add Subscription + Add subscription diff --git a/src/network-web/adblock/adblockdialog.cpp b/src/network-web/adblock/adblockdialog.cpp index 113758623..9a3eea7ac 100755 --- a/src/network-web/adblock/adblockdialog.cpp +++ b/src/network-web/adblock/adblockdialog.cpp @@ -17,12 +17,16 @@ // along with RSS Guard. If not, see . #include "network-web/adblock/adblockdialog.h" + #include "network-web/adblock/adblockmanager.h" #include "network-web/adblock/adblocksubscription.h" #include "network-web/adblock/adblocktreewidget.h" #include "network-web/adblock/adblockaddsubscriptiondialog.h" #include "network-web/webfactory.h" +#include "miscellaneous/application.h" +#include "miscellaneous/iconfactory.h" +#include "definitions/definitions.h" #include #include @@ -31,125 +35,139 @@ AdBlockDialog::AdBlockDialog(QWidget* parent) - : QWidget(parent), m_ui(new Ui::AdBlockDialog), m_manager(AdBlockManager::instance()), m_currentTreeWidget(0), m_currentSubscription(0), - m_loaded(false) { - setAttribute(Qt::WA_DeleteOnClose); - m_ui->setupUi(this); -#ifdef Q_OS_MACOS - m_ui->tabWidget->setDocumentMode(false); + : QDialog(parent), m_ui(new Ui::AdBlockDialog), m_manager(AdBlockManager::instance()), m_currentTreeWidget(0), m_currentSubscription(0), + m_loaded(false) { + setAttribute(Qt::WA_DeleteOnClose); + setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint); + setWindowIcon(qApp->icons()->miscIcon(ADBLOCK_ICON_ACTIVE)); + + m_ui->setupUi(this); + m_ui->m_cbEnable->setChecked(m_manager->isEnabled()); + +#if defined(Q_OS_MACOS) + m_ui->m_tabSubscriptions->setDocumentMode(false); #endif - m_ui->adblockCheckBox->setChecked(m_manager->isEnabled()); - QMenu* menu = new QMenu(m_ui->buttonOptions); - m_actionAddRule = menu->addAction(tr("Add rule"), this, SLOT(addRule())); - m_actionRemoveRule = menu->addAction(tr("Remove rule"), this, SLOT(removeRule())); - menu->addSeparator(); - m_actionAddSubscription = menu->addAction(tr("Add subscription"), this, SLOT(addSubscription())); - m_actionRemoveSubscription = menu->addAction(tr("Remove subscription"), this, SLOT(removeSubscription())); - menu->addAction(tr("Update subscriptions"), m_manager, SLOT(updateAllSubscriptions())); - menu->addSeparator(); - menu->addAction(tr("Learn about writing rules..."), this, SLOT(learnAboutRules())); - m_ui->buttonOptions->setMenu(menu); - connect(menu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowMenu())); - connect(m_ui->adblockCheckBox, SIGNAL(toggled(bool)), this, SLOT(enableAdBlock(bool))); - connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentChanged(int))); - connect(m_ui->buttonBox, &QDialogButtonBox::clicked, this, &AdBlockDialog::close); - load(); - m_ui->buttonBox->setFocus(); + + QPushButton* btn_options = m_ui->m_buttonBox->addButton(QDialogButtonBox::FirstButton); + btn_options->setText(tr("Options")); + + QMenu* menu = new QMenu(btn_options); + + m_actionAddRule = menu->addAction(tr("Add rule"), this, &AdBlockDialog::addRule); + m_actionRemoveRule = menu->addAction(tr("Remove rule"), this, &AdBlockDialog::removeRule); + + menu->addSeparator(); + + m_actionAddSubscription = menu->addAction(tr("Add subscription"), this, &AdBlockDialog::addSubscription); + m_actionRemoveSubscription = menu->addAction(tr("Remove subscription"), this, &AdBlockDialog::removeSubscription); + + menu->addAction(tr("Update subscriptions"), m_manager, &AdBlockManager::updateAllSubscriptions); + menu->addSeparator(); + menu->addAction(tr("Learn about writing rules..."), this, &AdBlockDialog::learnAboutRules); + btn_options->setMenu(menu); + + + + connect(menu, &QMenu::aboutToShow, this, &AdBlockDialog::aboutToShowMenu); + connect(m_ui->m_cbEnable, &QCheckBox::toggled, this, &AdBlockDialog::enableAdBlock); + connect(m_ui->m_tabSubscriptions, &QTabWidget::currentChanged, this, &AdBlockDialog::currentChanged); + connect(m_ui->m_buttonBox, &QDialogButtonBox::rejected, this, &AdBlockDialog::close); + load(); + + m_ui->m_buttonBox->setFocus(); } void AdBlockDialog::showRule(const AdBlockRule* rule) const { - AdBlockSubscription* subscription = rule->subscription(); + AdBlockSubscription* subscription = rule->subscription(); - if (!subscription) { - return; - } + if (subscription) { + for (int i = 0; i < m_ui->m_tabSubscriptions->count(); ++i) { + AdBlockTreeWidget* treeWidget = qobject_cast(m_ui->m_tabSubscriptions->widget(i)); - for (int i = 0; i < m_ui->tabWidget->count(); ++i) { - AdBlockTreeWidget* treeWidget = qobject_cast(m_ui->tabWidget->widget(i)); - - if (subscription == treeWidget->subscription()) { - treeWidget->showRule(rule); - m_ui->tabWidget->setCurrentIndex(i); - break; - } - } + if (subscription == treeWidget->subscription()) { + treeWidget->showRule(rule); + m_ui->m_tabSubscriptions->setCurrentIndex(i); + break; + } + } + } } void AdBlockDialog::addRule() { - m_currentTreeWidget->addRule(); + m_currentTreeWidget->addRule(); } void AdBlockDialog::removeRule() { - m_currentTreeWidget->removeRule(); + m_currentTreeWidget->removeRule(); } void AdBlockDialog::addSubscription() { - AdBlockAddSubscriptionDialog dialog(this); + AdBlockAddSubscriptionDialog dialog(this); - if (dialog.exec() != QDialog::Accepted) { - return; - } + if (dialog.exec() != QDialog::Accepted) { + return; + } - QString title = dialog.title(); - QString url = dialog.url(); + QString title = dialog.title(); + QString url = dialog.url(); - if (AdBlockSubscription* subscription = m_manager->addSubscription(title, url)) { - AdBlockTreeWidget* tree = new AdBlockTreeWidget(subscription, m_ui->tabWidget); - int index = m_ui->tabWidget->insertTab(m_ui->tabWidget->count() - 1, tree, subscription->title()); - m_ui->tabWidget->setCurrentIndex(index); - } + if (AdBlockSubscription* subscription = m_manager->addSubscription(title, url)) { + AdBlockTreeWidget* tree = new AdBlockTreeWidget(subscription, m_ui->m_tabSubscriptions); + int index = m_ui->m_tabSubscriptions->insertTab(m_ui->m_tabSubscriptions->count() - 1, tree, subscription->title()); + m_ui->m_tabSubscriptions->setCurrentIndex(index); + } } void AdBlockDialog::removeSubscription() { - if (m_manager->removeSubscription(m_currentSubscription)) { - delete m_currentTreeWidget; - } + if (m_manager->removeSubscription(m_currentSubscription)) { + delete m_currentTreeWidget; + } } void AdBlockDialog::currentChanged(int index) { - if (index != -1) { - m_currentTreeWidget = qobject_cast(m_ui->tabWidget->widget(index)); - m_currentSubscription = m_currentTreeWidget->subscription(); - } + if (index != -1) { + m_currentTreeWidget = qobject_cast(m_ui->m_tabSubscriptions->widget(index)); + m_currentSubscription = m_currentTreeWidget->subscription(); + } } void AdBlockDialog::enableAdBlock(bool state) { - m_manager->setEnabled(state); + m_manager->setEnabled(state); - if (state) { - load(); - } + if (state) { + load(); + } } void AdBlockDialog::aboutToShowMenu() { - bool subscriptionEditable = m_currentSubscription && m_currentSubscription->canEditRules(); - bool subscriptionRemovable = m_currentSubscription && m_currentSubscription->canBeRemoved(); - m_actionAddRule->setEnabled(subscriptionEditable); - m_actionRemoveRule->setEnabled(subscriptionEditable); - m_actionRemoveSubscription->setEnabled(subscriptionRemovable); + bool subscriptionEditable = m_currentSubscription && m_currentSubscription->canEditRules(); + bool subscriptionRemovable = m_currentSubscription && m_currentSubscription->canBeRemoved(); + m_actionAddRule->setEnabled(subscriptionEditable); + m_actionRemoveRule->setEnabled(subscriptionEditable); + m_actionRemoveSubscription->setEnabled(subscriptionRemovable); } void AdBlockDialog::learnAboutRules() { - WebFactory::instance()->openUrlInExternalBrowser(QSL("http://adblockplus.org/en/filters")); + WebFactory::instance()->openUrlInExternalBrowser(QSL(ADBLOCK_HOWTO_FILTERS)); } void AdBlockDialog::loadSubscriptions() { - for (int i = 0; i < m_ui->tabWidget->count(); ++i) { - AdBlockTreeWidget* treeWidget = qobject_cast(m_ui->tabWidget->widget(i)); - treeWidget->refresh(); - } + for (int i = 0; i < m_ui->m_tabSubscriptions->count(); ++i) { + AdBlockTreeWidget* treeWidget = qobject_cast(m_ui->m_tabSubscriptions->widget(i)); + treeWidget->refresh(); + } } void AdBlockDialog::load() { - if (m_loaded || !m_ui->adblockCheckBox->isChecked()) { - return; - } + if (m_loaded || !m_ui->m_cbEnable->isChecked()) { + return; + } - foreach (AdBlockSubscription* subscription, m_manager->subscriptions()) { - AdBlockTreeWidget* tree = new AdBlockTreeWidget(subscription, m_ui->tabWidget); - m_ui->tabWidget->addTab(tree, subscription->title()); - } + foreach (AdBlockSubscription* subscription, m_manager->subscriptions()) { + AdBlockTreeWidget* tree = new AdBlockTreeWidget(subscription, m_ui->m_tabSubscriptions); + m_ui->m_tabSubscriptions->addTab(tree, subscription->title()); + } - m_loaded = true; - QTimer::singleShot(50, this, SLOT(loadSubscriptions())); + m_loaded = true; + QTimer::singleShot(50, this, SLOT(loadSubscriptions())); } diff --git a/src/network-web/adblock/adblockdialog.h b/src/network-web/adblock/adblockdialog.h index f6f9f7118..eabd641c3 100755 --- a/src/network-web/adblock/adblockdialog.h +++ b/src/network-web/adblock/adblockdialog.h @@ -19,7 +19,7 @@ #ifndef ADBLOCKDIALOG_H #define ADBLOCKDIALOG_H -#include +#include #include "ui_adblockdialog.h" @@ -29,7 +29,7 @@ class AdBlockTreeWidget; class AdBlockManager; class AdBlockRule; -class AdBlockDialog : public QWidget { +class AdBlockDialog : public QDialog { Q_OBJECT public: diff --git a/src/network-web/adblock/adblockdialog.ui b/src/network-web/adblock/adblockdialog.ui index ad061e236..22dd3b248 100755 --- a/src/network-web/adblock/adblockdialog.ui +++ b/src/network-web/adblock/adblockdialog.ui @@ -9,8 +9,8 @@ 0 0 - 546 - 462 + 438 + 424 @@ -18,7 +18,7 @@ - + Enable AdBlock @@ -28,110 +28,27 @@ - - + + + -1 + + true - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Options - - - - :/icons/other/adblock.png:/icons/other/adblock.png - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - AdBlock - - - - - - - - - -1 - - - true - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Close - - - - + + + Qt::Horizontal + + + QDialogButtonBox::Close + + - - - adblockCheckBox - toggled(bool) - adblockWidget - setEnabled(bool) - - - 106 - 39 - - - 349 - 74 - - - - + diff --git a/src/network-web/adblock/adblockicon.cpp b/src/network-web/adblock/adblockicon.cpp index 7dbf08637..a33060f5a 100755 --- a/src/network-web/adblock/adblockicon.cpp +++ b/src/network-web/adblock/adblockicon.cpp @@ -82,7 +82,7 @@ QAction* AdBlockIcon::menuAction() { m_menuAction = new QAction(tr("AdBlock"), this); m_menuAction->setMenu(new QMenu(this)); connect(m_menuAction->menu(), SIGNAL(aboutToShow()), this, SLOT(createMenu())); - connect(m_menuAction, &QAction::triggered, AdBlockManager::instance(), &AdBlockManager::showDialog); + connect(m_menuAction, &QAction::triggered, AdBlockManager::instance(), &AdBlockManager::showDialog); } m_menuAction->setIcon(m_enabled ? qApp->icons()->miscIcon(ADBLOCK_ICON_ACTIVE) : qApp->icons()->miscIcon(ADBLOCK_ICON_DISABLED)); @@ -122,18 +122,6 @@ void AdBlockIcon::createMenu(QMenu* menu) { connect(act, SIGNAL(triggered()), this, SLOT(toggleCustomFilter())); menu->addSeparator(); } - - if (!m_blockedPopups.isEmpty()) { - menu->addAction(tr("Blocked popup windows"))->setEnabled(false); - - for (int i = 0; i < m_blockedPopups.count(); i++) { - const QPair& pair = m_blockedPopups.at(i); - QString address = pair.second.toString().right(55); - QString actionText = tr("%1 with (%2)").arg(address, pair.first->filter()).replace(QL1C('&'), QL1S("&&")); - QAction* action = menu->addAction(actionText, manager, SLOT(showRule())); - action->setData(QVariant::fromValue((void*)pair.first)); - } - } } void AdBlockIcon::showMenu(const QPoint& pos) { diff --git a/src/network-web/adblock/adblockmanager.cpp b/src/network-web/adblock/adblockmanager.cpp index 1aee6ae7b..e930e5bda 100755 --- a/src/network-web/adblock/adblockmanager.cpp +++ b/src/network-web/adblock/adblockmanager.cpp @@ -357,23 +357,10 @@ AdBlockSubscription* AdBlockManager::subscriptionByName(const QString& name) con return 0; } -AdBlockDialog* AdBlockManager::showDialog() { +void AdBlockManager::showDialog() { if (!m_adBlockDialog) { - m_adBlockDialog = new AdBlockDialog; + m_adBlockDialog = new AdBlockDialog(); } - m_adBlockDialog.data()->show(); - m_adBlockDialog.data()->raise(); - m_adBlockDialog.data()->activateWindow(); - return m_adBlockDialog.data(); -} - -void AdBlockManager::showRule() { - if (QAction* action = qobject_cast(sender())) { - const AdBlockRule* rule = static_cast(action->data().value()); - - if (rule) { - showDialog()->showRule(rule); - } - } + m_adBlockDialog.data()->exec(); } diff --git a/src/network-web/adblock/adblockmanager.h b/src/network-web/adblock/adblockmanager.h index 309d57bed..2a9343109 100755 --- a/src/network-web/adblock/adblockmanager.h +++ b/src/network-web/adblock/adblockmanager.h @@ -75,12 +75,9 @@ class AdBlockManager : public QObject { public slots: void setEnabled(bool enabled); - void showRule(); - void updateMatcher(); void updateAllSubscriptions(); - - AdBlockDialog* showDialog(); + void showDialog(); private: inline bool canBeBlocked(const QUrl& url) const;