File indexing completed on 2024-05-19 04:59:18

0001 /* ============================================================
0002 * StatusBarIcons - Extra icons in statusbar for Falkon
0003 * Copyright (C) 2013-2018 David Rosca <nowrep@gmail.com>
0004 *
0005 * This program is free software: you can redistribute it and/or modify
0006 * it under the terms of the GNU General Public License as published by
0007 * the Free Software Foundation, either version 3 of the License, or
0008 * (at your option) any later version.
0009 *
0010 * This program is distributed in the hope that it will be useful,
0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0013 * GNU General Public License for more details.
0014 *
0015 * You should have received a copy of the GNU General Public License
0016 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0017 * ============================================================ */
0018 #include "sbi_iconsmanager.h"
0019 #include "sbi_imagesicon.h"
0020 #include "sbi_javascripticon.h"
0021 #include "sbi_zoomwidget.h"
0022 #include "sbi_networkicon.h"
0023 #include "sbi_networkmanager.h"
0024 #include "browserwindow.h"
0025 #include "statusbar.h"
0026 
0027 #include <QSettings>
0028 
0029 SBI_IconsManager::SBI_IconsManager(const QString &settingsPath, QObject* parent)
0030     : QObject(parent)
0031     , m_settingsPath(settingsPath)
0032     , m_showImagesIcon(false)
0033     , m_showJavaScriptIcon(false)
0034     , m_showNetworkIcon(false)
0035     , m_showZoomWidget(false)
0036     , m_networkManager(nullptr)
0037 {
0038     loadSettings();
0039 }
0040 
0041 void SBI_IconsManager::loadSettings()
0042 {
0043     QSettings settings(m_settingsPath + QL1S("/extensions.ini"), QSettings::IniFormat);
0044     settings.beginGroup("StatusBarIcons");
0045     m_showImagesIcon = settings.value("showImagesIcon", true).toBool();
0046     m_showJavaScriptIcon = settings.value("showJavaScriptIcon", true).toBool();
0047     m_showNetworkIcon = settings.value("showNetworkIcon", true).toBool();
0048     m_showZoomWidget = settings.value("showZoomWidget", true).toBool();
0049     settings.endGroup();
0050 }
0051 
0052 bool SBI_IconsManager::showImagesIcon() const
0053 {
0054     return m_showImagesIcon;
0055 }
0056 
0057 void SBI_IconsManager::setShowImagesIcon(bool show)
0058 {
0059     QSettings settings(m_settingsPath + QL1S("/extensions.ini"), QSettings::IniFormat);
0060     settings.setValue("StatusBarIcons/showImagesIcon", show);
0061 
0062     m_showImagesIcon = show;
0063 }
0064 
0065 bool SBI_IconsManager::showJavaScriptIcon() const
0066 {
0067     return m_showJavaScriptIcon;
0068 }
0069 
0070 void SBI_IconsManager::setShowJavaScriptIcon(bool show)
0071 {
0072     QSettings settings(m_settingsPath + QL1S("/extensions.ini"), QSettings::IniFormat);
0073     settings.setValue("StatusBarIcons/showJavaScriptIcon", show);
0074 
0075     m_showJavaScriptIcon = show;
0076 }
0077 
0078 bool SBI_IconsManager::showNetworkIcon() const
0079 {
0080     return m_showNetworkIcon;
0081 }
0082 
0083 void SBI_IconsManager::setShowNetworkIcon(bool show)
0084 {
0085     QSettings settings(m_settingsPath + QL1S("/extensions.ini"), QSettings::IniFormat);
0086     settings.setValue("StatusBarIcons/showNetworkIcon", show);
0087 
0088     m_showNetworkIcon = show;
0089 }
0090 
0091 bool SBI_IconsManager::showZoomWidget() const
0092 {
0093     return m_showZoomWidget;
0094 }
0095 
0096 void SBI_IconsManager::setShowZoomWidget(bool show)
0097 {
0098     QSettings settings(m_settingsPath + QL1S("/extensions.ini"), QSettings::IniFormat);
0099     settings.setValue("StatusBarIcons/showZoomWidget", show);
0100 
0101     m_showZoomWidget = show;
0102 }
0103 
0104 void SBI_IconsManager::reloadIcons()
0105 {
0106     QHashIterator<BrowserWindow*, QWidgetList> it(m_windows);
0107 
0108     while (it.hasNext()) {
0109         it.next();
0110         mainWindowDeleted(it.key());
0111         mainWindowCreated(it.key());
0112     }
0113 }
0114 
0115 void SBI_IconsManager::destroyIcons()
0116 {
0117     QHashIterator<BrowserWindow*, QWidgetList> it(m_windows);
0118 
0119     while (it.hasNext()) {
0120         it.next();
0121         mainWindowDeleted(it.key());
0122     }
0123 }
0124 
0125 void SBI_IconsManager::mainWindowCreated(BrowserWindow* window)
0126 {
0127     if (m_showImagesIcon) {
0128         auto* w = new SBI_ImagesIcon(window, m_settingsPath);
0129         window->statusBar()->addPermanentWidget(w);
0130         m_windows[window].append(w);
0131     }
0132 
0133     if (m_showJavaScriptIcon) {
0134         auto* w = new SBI_JavaScriptIcon(window);
0135         window->statusBar()->addPermanentWidget(w);
0136         m_windows[window].append(w);
0137     }
0138 
0139     if (m_showNetworkIcon) {
0140         if (!m_networkManager) {
0141             m_networkManager = new SBI_NetworkManager(m_settingsPath, this);
0142         }
0143 
0144         auto* w = new SBI_NetworkIcon(window);
0145         window->statusBar()->addPermanentWidget(w);
0146         m_windows[window].append(w);
0147     }
0148 
0149     if (m_showZoomWidget) {
0150         auto* w = new SBI_ZoomWidget(window);
0151         window->statusBar()->addPermanentWidget(w);
0152         m_windows[window].append(w);
0153     }
0154 }
0155 
0156 void SBI_IconsManager::mainWindowDeleted(BrowserWindow* window)
0157 {
0158     const auto windows = m_windows[window];
0159     for (QWidget* w : windows) {
0160         window->statusBar()->removeWidget(w);
0161         delete w;
0162     }
0163 
0164     m_windows[window].clear();
0165 }
0166 
0167 SBI_IconsManager::~SBI_IconsManager()
0168 {
0169     delete m_networkManager;
0170 }