summaryrefslogtreecommitdiffstats
path: root/kppp/conwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kppp/conwindow.cpp')
-rw-r--r--kppp/conwindow.cpp340
1 files changed, 340 insertions, 0 deletions
diff --git a/kppp/conwindow.cpp b/kppp/conwindow.cpp
new file mode 100644
index 00000000..ae63de85
--- /dev/null
+++ b/kppp/conwindow.cpp
@@ -0,0 +1,340 @@
+/*
+ * kPPP: A pppd front end for the KDE project
+ *
+ * $Id$
+ *
+ * Copyright (C) 1997 Bernd Johannes Wuebben
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <qtooltip.h>
+#include "conwindow.h"
+#include "docking.h"
+#include "pppdata.h"
+#include "pppstats.h"
+#include <klocale.h>
+#include <kglobal.h>
+
+extern PPPData gpppdata;
+
+ConWindow::ConWindow(QWidget *parent, const char *name,QWidget *mainwidget,
+ PPPStats *st)
+ : QWidget(parent, name, 0),
+ minutes(0),
+ seconds(0),
+ hours(0),
+ days(0),
+ tl1(0),
+ stats(st),
+ accountingEnabled(false),
+ volumeAccountingEnabled(false)
+{
+ info1 = new QLabel(i18n("Connected at:"), this);
+ info2 = new QLabel("", this);
+
+ timelabel1 = new QLabel(i18n("Time connected:"), this);
+ timelabel2 = new QLabel("000:00:00", this);
+
+ vollabel = new QLabel(i18n("Volume:"), this);
+ volinfo = new QLabel("", this);
+
+ // now the stuff for accounting
+ session_bill_l = new QLabel(i18n("Session bill:"), this);
+ session_bill = new QLabel("", this);
+ total_bill_l = new QLabel(i18n("Total bill:"), this);
+ total_bill = new QLabel("", this);
+
+ setCaption("kppp");
+
+ cancelbutton = new QPushButton(this);
+ cancelbutton->setText(i18n("&Disconnect"));
+ connect(cancelbutton, SIGNAL(clicked()), mainwidget, SLOT(disconnect()));
+
+ statsbutton = new QPushButton(this);
+ statsbutton->setText(i18n("De&tails"));
+ statsbutton->setFocus();
+ connect(statsbutton, SIGNAL(clicked()), mainwidget, SLOT(showStats()));
+
+ clocktimer = new QTimer(this);
+ connect(clocktimer, SIGNAL(timeout()), SLOT(timeclick()));
+
+ // read window position from config file
+ int p_x, p_y;
+ gpppdata.winPosConWin(p_x, p_y);
+ setGeometry(p_x, p_y, 320, 110);
+}
+
+ConWindow::~ConWindow() {
+ stopClock();
+}
+
+// save window position when window was closed
+bool ConWindow::event(QEvent *e) {
+ if (e->type() == QEvent::Hide)
+ {
+ gpppdata.setWinPosConWin(x(), y());
+ return true;
+ }
+ else
+ return QWidget::event(e);
+}
+
+QString ConWindow::prettyPrintVolume(unsigned int n) {
+ int idx = 0;
+ const QString quant[] = {i18n("Byte"), i18n("KB"),
+ i18n("MB"), i18n("GB"), QString::null};
+
+ float n1 = n;
+ while(n >= 1024 && !quant[idx].isNull()) {
+ idx++;
+ n /= 1024;
+ }
+
+ int i = idx;
+ while(i--)
+ n1 = n1 / 1024.0;
+
+ QString s = KGlobal::locale()->formatNumber( n1, idx==0 ? 0 : 1 );
+ s += " " + quant[idx];
+ return s;
+}
+
+void ConWindow::accounting(bool on) {
+ // cache accounting settings
+ accountingEnabled = on;
+ volumeAccountingEnabled = gpppdata.VolAcctEnabled();
+
+ // delete old layout
+ if(tl1 != 0)
+ delete tl1;
+
+ // add layout now
+ tl1 = new QVBoxLayout(this, 10, 10);
+ tl1->addSpacing(5);
+ QHBoxLayout *tl = new QHBoxLayout;
+ tl1->addLayout(tl);
+ tl->addSpacing(20);
+ QGridLayout *l1;
+
+ int vol_lines = 0;
+ if(gpppdata.VolAcctEnabled())
+ vol_lines = 1;
+
+ if(accountingEnabled)
+ l1 = new QGridLayout(4 + vol_lines, 2, 5);
+ else
+ l1 = new QGridLayout(2 + vol_lines, 2, 5);
+ tl->addLayout(l1);
+ l1->setColStretch(0, 0);
+ l1->setColStretch(1, 1);
+
+ info2->setAlignment(AlignRight|AlignVCenter);
+ timelabel2->setAlignment(AlignRight|AlignVCenter);
+ session_bill->setAlignment(AlignRight|AlignVCenter);
+ total_bill->setAlignment(AlignRight|AlignVCenter);
+ volinfo->setAlignment(AlignRight|AlignVCenter);
+ // make sure that there's enough space for the bills
+ QString s1 = session_bill->text();
+ QString s2 = total_bill->text();
+ QString s3 = volinfo->text();
+
+ session_bill->setText("888888.88 XXX");
+ total_bill->setText("888888.88 XXX");
+ volinfo->setText("8888.8 MB");
+ session_bill->setFixedSize(session_bill->sizeHint());
+ total_bill->setFixedSize(total_bill->sizeHint());
+ volinfo->setFixedSize(volinfo->sizeHint());
+ session_bill->setText(s1);
+ total_bill->setText(s2);
+ volinfo->setText(s3);
+
+ l1->addWidget(info1, 0, 0);
+ l1->addWidget(info2, 0, 1);
+ l1->addWidget(timelabel1, 1, 0);
+ l1->addWidget(timelabel2, 1, 1);
+ if(accountingEnabled) {
+ session_bill_l->show();
+ session_bill->show();
+ total_bill_l->show();
+ total_bill->show();
+ l1->addWidget(session_bill_l, 2, 0);
+ l1->addWidget(session_bill, 2, 1);
+ l1->addWidget(total_bill_l, 3, 0);
+ l1->addWidget(total_bill, 3, 1);
+
+ if(volumeAccountingEnabled) {
+ vollabel->show();
+ volinfo->show();
+ l1->addWidget(vollabel, 4, 0);
+ l1->addWidget(volinfo, 4, 1);
+ } else {
+ vollabel->hide();
+ volinfo->hide();
+ }
+
+ } else {
+ session_bill_l->hide();
+ session_bill->hide();
+ total_bill_l->hide();
+ total_bill->hide();
+
+ if(volumeAccountingEnabled) {
+ vollabel->show();
+ volinfo->show();
+ l1->addWidget(vollabel, 2, 0);
+ l1->addWidget(volinfo, 2, 1);
+ } else {
+ vollabel->hide();
+ volinfo->hide();
+ }
+ }
+
+ tl->addSpacing(10);
+ QVBoxLayout *l2 = new QVBoxLayout(5);
+ tl->addLayout(l2);
+ l2->addStretch(1);
+ l2->addWidget(statsbutton);
+ l2->addWidget(cancelbutton);
+
+ l2->addStretch(1);
+
+ tl1->addSpacing(5);
+
+ setFixedSize(sizeHint());
+/*
+ do not overwrite position read from config
+ // If this gets re-enabled, fix it for Xinerama before committing to CVS.
+ setGeometry((QApplication::desktop()->width() - width()) / 2,
+ (QApplication::desktop()->height() - height())/2,
+ width(),
+ height());
+*/
+}
+
+
+void ConWindow::dock() {
+ DockWidget::dock_widget->show();
+ hide();
+}
+
+
+void ConWindow::startClock() {
+ minutes = 0;
+ seconds = 0;
+ hours = 0;
+ QString title ;
+
+ title = gpppdata.accname();
+
+ if(gpppdata.get_show_clock_on_caption()){
+ title += " 00:00" ;
+ }
+ setCaption(title);
+
+ timelabel2->setText("00:00:00");
+ clocktimer->start(1000);
+}
+
+
+void ConWindow::setConnectionSpeed(const QString &speed) {
+ info2->setText(speed);
+}
+
+
+void ConWindow::stopClock() {
+ clocktimer->stop();
+}
+
+
+void ConWindow::timeclick() {
+ QString tooltip = i18n("Connection: %1\n"
+ "Connected at: %2\n"
+ "Time connected: %3")
+ .arg(gpppdata.accname()).arg(info2->text())
+ .arg(time_string2);
+
+ if(accountingEnabled)
+ tooltip += i18n("\nSession Bill: %1\nTotal Bill: %2")
+ .arg(session_bill->text()).arg(total_bill->text());
+ // volume accounting
+ if(volumeAccountingEnabled) {
+
+ volinfo->setEnabled(TRUE);
+ int bytes = gpppdata.totalBytes();
+ volinfo->setText(prettyPrintVolume(bytes));
+ }
+
+ seconds++;
+
+ if(seconds >= 60 ) {
+ minutes ++;
+ seconds = 0;
+ }
+
+ if (minutes >= 60){
+ minutes = 0;
+ hours ++;
+ }
+
+ if( hours >= 24){
+ days ++;
+ hours = 0;
+ }
+
+ time_string.sprintf("%02d:%02d",hours,minutes);
+ time_string2 = "";
+ if (days)
+ time_string2.sprintf("%d d %02d:%02d:%02d",
+ days,hours,minutes,seconds);
+
+ else
+ time_string2.sprintf("%02d:%02d:%02d",hours,minutes,seconds);
+
+ caption_string = gpppdata.accname();
+ caption_string += " ";
+ caption_string += time_string;
+
+
+ timelabel2->setText(time_string2);
+
+ if(gpppdata.get_show_clock_on_caption() && (seconds == 1)){
+ // we update the Caption only once per minute not every second
+ // otherwise I get a flickering icon
+ setCaption(caption_string);
+ }
+
+ QToolTip::add(DockWidget::dock_widget, tooltip);
+}
+
+
+void ConWindow::closeEvent( QCloseEvent *e ){
+ // we don't want to lose the
+ // conwindow since this is our last connection kppp.
+ // if we lost it we could only kill the program by hand to get on with life.
+ e->ignore();
+
+ if(gpppdata.get_dock_into_panel())
+ dock();
+}
+
+
+void ConWindow::slotAccounting(QString total, QString session) {
+ total_bill->setText(total);
+ session_bill->setText(session);
+}
+
+#include "conwindow.moc"