Event backend porting
[quassel.git] / src / qtui / coreconnectionstatuswidget.cpp
1 /***************************************************************************
2  *   Copyright (C) 2009 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  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, 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 void CoreConnectionStatusWidget::update() {
47   CoreConnection *conn = coreConnection();
48   if(conn->progressMaximum() >= 0) {
49     ui.progressBar->setMinimum(conn->progressMinimum());
50     ui.progressBar->setMaximum(conn->progressMaximum());
51     ui.progressBar->setValue(conn->progressValue());
52     ui.progressBar->show();
53   } else
54     ui.progressBar->hide();
55
56   ui.messageLabel->setText(conn->progressText());
57 }
58
59 void CoreConnectionStatusWidget::updateLag(int msecs) {
60   if(msecs >= 0) {
61     QString unit = msecs >= 100 ? tr("s", "seconds") : tr("ms", "milliseconds");
62     ui.lagLabel->setText(tr("(Lag: %1 %2)").arg(msecs >= 100 ? msecs / 1000. : msecs, 0, 'f', (int)(msecs >= 100)).arg(unit));
63     if(!ui.lagLabel->isVisible())
64       ui.lagLabel->show();
65   } else {
66     if(ui.lagLabel->isVisible())
67       ui.lagLabel->hide();
68   }
69 }
70
71 void CoreConnectionStatusWidget::connectionStateChanged(CoreConnection::ConnectionState state) {
72   if(state >= CoreConnection::Connected) {
73     if(coreConnection()->isEncrypted()) {
74       ui.sslLabel->setPixmap(SmallIcon("security-high"));
75       ui.sslLabel->setToolTip(tr("The connection to your core is encrypted with SSL."));
76     } else {
77       ui.sslLabel->setPixmap(SmallIcon("security-low"));
78       ui.sslLabel->setToolTip(tr("The connection to your core is not encrypted."));
79     }
80     ui.sslLabel->show();
81   } else
82     ui.sslLabel->hide();
83 }
84
85 void CoreConnectionStatusWidget::progressRangeChanged(int min, int max) {
86   Q_UNUSED(min)
87   ui.progressBar->setVisible(max >= 0);
88 }