1 | /*************************************************************************** |
2 | * Copyright (C) 2005-2014 by the Quassel Project * |
3 | * devel@quassel-irc.org * |
4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) version 3. * |
9 | * * |
10 | * This program is distributed in the hope that it will be useful, * |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
13 | * GNU General Public License for more details. * |
14 | * * |
15 | * You should have received a copy of the GNU General Public License * |
16 | * along with this program; if not, write to the * |
17 | * Free Software Foundation, Inc., * |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * |
19 | ***************************************************************************/ |
20 | |
21 | #include "coreconnectionstatuswidget.h" |
22 | |
23 | #include "client.h" |
24 | #include "iconloader.h" |
25 | #include "signalproxy.h" |
26 | |
27 | CoreConnectionStatusWidget::CoreConnectionStatusWidget(CoreConnection *connection, QWidget *parent) |
28 | : QWidget(parent), |
29 | _coreConnection(connection) |
30 | { |
31 | ui.setupUi(this); |
32 | ui.lagLabel->hide(); |
33 | ui.sslLabel->hide(); |
34 | update(); |
35 | |
36 | connect(coreConnection(), SIGNAL(progressTextChanged(QString)), ui.messageLabel, SLOT(setText(QString))); |
37 | connect(coreConnection(), SIGNAL(progressValueChanged(int)), ui.progressBar, SLOT(setValue(int))); |
38 | connect(coreConnection(), SIGNAL(progressRangeChanged(int, int)), ui.progressBar, SLOT(setRange(int, int))); |
39 | connect(coreConnection(), SIGNAL(progressRangeChanged(int, int)), this, SLOT(progressRangeChanged(int, int))); |
40 | |
41 | connect(coreConnection(), SIGNAL(stateChanged(CoreConnection::ConnectionState)), SLOT(connectionStateChanged(CoreConnection::ConnectionState))); |
42 | connect(coreConnection(), SIGNAL(connectionError(QString)), ui.messageLabel, SLOT(setText(QString))); |
43 | connect(coreConnection(), SIGNAL(lagUpdated(int)), SLOT(updateLag(int))); |
44 | } |
45 | |
46 | |
47 | void CoreConnectionStatusWidget::update() |
48 | { |
49 | CoreConnection *conn = coreConnection(); |
50 | if (conn->progressMaximum() >= 0) { |
51 | ui.progressBar->setMinimum(conn->progressMinimum()); |
52 | ui.progressBar->setMaximum(conn->progressMaximum()); |
53 | ui.progressBar->setValue(conn->progressValue()); |
54 | ui.progressBar->show(); |
55 | } |
56 | else |
57 | ui.progressBar->hide(); |
58 | |
59 | ui.messageLabel->setText(conn->progressText()); |
60 | } |
61 | |
62 | |
63 | void CoreConnectionStatusWidget::updateLag(int msecs) |
64 | { |
65 | if (msecs >= 0) { |
66 | QString unit = msecs >= 100 ? tr("s" , "seconds" ) : tr("ms" , "milliseconds" ); |
67 | ui.lagLabel->setText(tr("(Lag: %1 %2)" ).arg(msecs >= 100 ? msecs / 1000. : msecs, 0, 'f', (int)(msecs >= 100)).arg(unit)); |
68 | if (!ui.lagLabel->isVisible()) |
69 | ui.lagLabel->show(); |
70 | } |
71 | else { |
72 | if (ui.lagLabel->isVisible()) |
73 | ui.lagLabel->hide(); |
74 | } |
75 | } |
76 | |
77 | |
78 | void CoreConnectionStatusWidget::connectionStateChanged(CoreConnection::ConnectionState state) |
79 | { |
80 | if (state >= CoreConnection::Connected) { |
81 | if (coreConnection()->isEncrypted()) { |
82 | ui.sslLabel->setPixmap(SmallIcon("security-high" )); |
83 | ui.sslLabel->setToolTip(tr("The connection to your core is encrypted with SSL." )); |
84 | } |
85 | else { |
86 | ui.sslLabel->setPixmap(SmallIcon("security-low" )); |
87 | ui.sslLabel->setToolTip(tr("The connection to your core is not encrypted." )); |
88 | } |
89 | ui.sslLabel->show(); |
90 | } |
91 | else |
92 | ui.sslLabel->hide(); |
93 | } |
94 | |
95 | |
96 | void CoreConnectionStatusWidget::progressRangeChanged(int min, int max) |
97 | { |
98 | Q_UNUSED(min) |
99 | ui.progressBar->setVisible(max >= 0); |
100 | } |
101 | |