You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.0 KiB
133 lines
4.0 KiB
/* ============================================================ |
|
* StatusBarIcons - Extra icons in statusbar for Falkon |
|
* Copyright (C) 2013-2017 David Rosca <nowrep@gmail.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 3 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* 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 "sbi_networkicon.h" |
|
#include "sbi_networkicondialog.h" |
|
#include "sbi_networkproxy.h" |
|
#include "sbi_networkmanager.h" |
|
#include "mainapplication.h" |
|
#include "browserwindow.h" |
|
|
|
#include <QMenu> |
|
#include <QNetworkConfigurationManager> |
|
|
|
SBI_NetworkIcon::SBI_NetworkIcon(BrowserWindow* window) |
|
: SBI_Icon(window) |
|
, m_networkConfiguration(new QNetworkConfigurationManager(this)) |
|
{ |
|
setObjectName(QSL("sbi_networkicon")); |
|
setCursor(Qt::PointingHandCursor); |
|
|
|
onlineStateChanged(m_networkConfiguration->isOnline()); |
|
|
|
connect(m_networkConfiguration, &QNetworkConfigurationManager::onlineStateChanged, this, &SBI_NetworkIcon::onlineStateChanged); |
|
connect(this, &ClickableLabel::clicked, this, &SBI_NetworkIcon::showMenu); |
|
} |
|
|
|
void SBI_NetworkIcon::onlineStateChanged(bool online) |
|
{ |
|
if (online) { |
|
setPixmap(QIcon(":sbi/data/network-online.png").pixmap(16)); |
|
} |
|
else { |
|
setPixmap(QIcon(":sbi/data/network-offline.png").pixmap(16)); |
|
} |
|
|
|
updateToolTip(); |
|
} |
|
|
|
void SBI_NetworkIcon::showDialog() |
|
{ |
|
SBI_NetworkIconDialog* dialog = new SBI_NetworkIconDialog(m_window); |
|
dialog->open(); |
|
} |
|
|
|
void SBI_NetworkIcon::showMenu(const QPoint &pos) |
|
{ |
|
QFont boldFont = font(); |
|
boldFont.setBold(true); |
|
|
|
QMenu menu; |
|
menu.addAction(QIcon::fromTheme("preferences-system-network", QIcon(":sbi/data/preferences-network.png")), tr("Proxy Configuration"))->setFont(boldFont); |
|
|
|
QMenu* proxyMenu = menu.addMenu(tr("Select proxy")); |
|
|
|
const QHash<QString, SBI_NetworkProxy*> &proxies = SBINetManager->proxies(); |
|
|
|
QHashIterator<QString, SBI_NetworkProxy*> it(proxies); |
|
while (it.hasNext()) { |
|
it.next(); |
|
QAction* act = proxyMenu->addAction(it.key(), this, &SBI_NetworkIcon::useProxy); |
|
act->setData(it.key()); |
|
act->setCheckable(true); |
|
act->setChecked(it.value() == SBINetManager->currentProxy()); |
|
} |
|
|
|
if (proxyMenu->actions().count() == 0) { |
|
proxyMenu->addAction(tr("Empty"))->setEnabled(false); |
|
} |
|
|
|
menu.addSeparator(); |
|
menu.addAction(tr("Manage proxies"), this, &SBI_NetworkIcon::showDialog); |
|
menu.exec(pos); |
|
} |
|
|
|
void SBI_NetworkIcon::useProxy() |
|
{ |
|
if (QAction* act = qobject_cast<QAction*>(sender())) { |
|
SBINetManager->setCurrentProxy(act->data().toString()); |
|
} |
|
} |
|
|
|
void SBI_NetworkIcon::updateToolTip() |
|
{ |
|
QString tooltip = tr("Shows network status and manages proxy<br/><br/><b>Network:</b><br/>%1<br/><br/><b>Proxy:</b><br/>%2"); |
|
|
|
if (m_networkConfiguration->isOnline()) { |
|
tooltip = tooltip.arg(tr("Connected")); |
|
} |
|
else { |
|
tooltip = tooltip.arg(tr("Offline")); |
|
} |
|
|
|
switch (QNetworkProxy::applicationProxy().type()) { |
|
case QNetworkProxy::DefaultProxy: |
|
tooltip = tooltip.arg(tr("System proxy")); |
|
break; |
|
|
|
case QNetworkProxy::NoProxy: |
|
tooltip = tooltip.arg(tr("No proxy")); |
|
break; |
|
|
|
default: |
|
tooltip = tooltip.arg(tr("User defined")); |
|
break; |
|
} |
|
|
|
if (SBINetManager->currentProxy()) { |
|
tooltip.append(QString(" (%1)").arg(SBINetManager->currentProxyName())); |
|
} |
|
|
|
setToolTip(tooltip); |
|
} |
|
|
|
void SBI_NetworkIcon::enterEvent(QEvent* event) |
|
{ |
|
updateToolTip(); |
|
|
|
SBI_Icon::enterEvent(event); |
|
}
|
|
|