File indexing completed on 2024-04-28 04:02:32

0001 /***************************************************************************
0002                           dlgstatistics.cpp  -  Statistics dialog
0003                              -------------------
0004     begin                : Pi mar 14 2003
0005     copyright            : (C) 2003 by Tomas Mecir
0006     email                : kmuddy@kmuddy.com
0007  ***************************************************************************/
0008 
0009 /***************************************************************************
0010  *                                                                         *
0011  *   This program is free software; you can redistribute it and/or modify  *
0012  *   it under the terms of the GNU General Public License as published by  *
0013  *   the Free Software Foundation; either version 2 of the License, or     *
0014  *   (at your option) any later version.                                   *
0015  *                                                                         *
0016  ***************************************************************************/
0017 
0018 #include "dlgstatistics.h"
0019 
0020 #include "cactionmanager.h"
0021 #include "cconnection.h"
0022 #include "csessionmanager.h"
0023 #include "cstatus.h"
0024 #include "ctelnet.h"
0025 #include "ctextprocessor.h"
0026 #ifdef HAVE_MXP
0027 #include "cmxpmanager.h"
0028 #endif
0029 
0030 #include <QLabel>
0031 #include <QTreeWidget>
0032 #include <QTimer>
0033 #include <QVBoxLayout>
0034 #include <KLocalizedString>
0035 
0036 dlgStatistics::dlgStatistics (QWidget *parent)
0037   : QDockWidget (parent), cActionBase ("dialog-statistics", 0)
0038 {
0039   //initial size
0040   //setSize (QSize (250, 300));
0041   setWindowTitle (i18n ("Connection statistics"));
0042 
0043   //main widget
0044   QWidget *page = new QWidget (this);
0045   QVBoxLayout *layout = new QVBoxLayout (page);
0046   setWidget (page);
0047 
0048   setFocusPolicy (Qt::StrongFocus);
0049 
0050   QLabel *label = new QLabel (i18n ("&Statistics, updated every second:"), page);
0051   view = new QTreeWidget (page);
0052   label->setBuddy (view);
0053   view->setHeaderLabels (QStringList() << i18n ("Counter") << i18n ("Value"));
0054   view->setUniformRowHeights (true);
0055   view->setRootIsDecorated (false);
0056   view->setSelectionMode (QAbstractItemView::NoSelection);
0057   
0058   layout->setSpacing (5);
0059   layout->addWidget (label);
0060   layout->addWidget (view);
0061 
0062   //establish auto-updating of data
0063   updateTimer = new QTimer;
0064   connect (updateTimer, &QTimer::timeout, this, &dlgStatistics::update);
0065   updateTimer->start (1000);
0066 
0067   //no focus - we don't want this dialog to get focus
0068   setFocusPolicy (Qt::NoFocus);
0069   view->setFocusPolicy (Qt::NoFocus);
0070 
0071   addEventHandler ("session-activated", 50, PT_INT);
0072 }
0073 
0074 dlgStatistics::~dlgStatistics ()
0075 {
0076   removeEventHandler ("session-activated");
0077 
0078   updateTimer->stop ();
0079   delete updateTimer;
0080 }
0081 
0082 void dlgStatistics::eventIntHandler (QString event, int, int, int)
0083 {
0084   if (event == "session-activated")
0085     update ();
0086 }
0087 
0088 
0089 void dlgStatistics::update ()
0090 {
0091   view->clear ();
0092 
0093   //fetch required information
0094   int sess = cSessionManager::self()->activeSession();
0095   if (!sess) return;
0096   cActionManager *am = cActionManager::self();
0097   cTelnet *telnet = dynamic_cast<cTelnet *>(am->object ("telnet", sess));
0098   cConnection *connection = dynamic_cast<cConnection *>(am->object ("connection", sess));
0099   cStatus *status = dynamic_cast<cStatus *>(am->object ("status", sess));
0100   cTextProcessor *textproc = dynamic_cast<cTextProcessor *>(am->object ("textproc", sess));
0101   int compr = telnet->compressedBytes();
0102   int decompr = telnet->uncompressedBytes();
0103   QString connTime = status->connTimeString();
0104   int sentbytes = telnet->sentBytes();
0105   int sentcmds = connection->sentCommands();
0106   int recvlines = textproc->linesReceived();
0107   bool usingmccp = telnet->usingMCCP();
0108   int mccpver = telnet->MCCPVer();
0109   bool usingmsp = telnet->usingMSP();
0110 #ifdef HAVE_MXP
0111   cMXPManager *mxp = dynamic_cast<cMXPManager *>(am->object ("mxpmanager", sess));
0112   bool usingmxp = mxp->isMXPActive();
0113 #endif
0114   
0115   //fill in those information
0116 
0117   QList<QTreeWidgetItem *> items;
0118   items << new QTreeWidgetItem (view, QStringList() << i18n ("Using MCCP") << 
0119       (usingmccp ? i18n ("Yes") : i18n ("No")));
0120   items << new QTreeWidgetItem (view, QStringList() << i18n ("MCCP version") << 
0121       (usingmccp ? QString::number (mccpver) : i18n ("N/A")));
0122   items << new QTreeWidgetItem (view, QStringList() << i18n ("Using MSP") << 
0123       (usingmsp ? i18n ("Yes") : i18n ("No")));
0124 #ifdef HAVE_MXP
0125   items << new QTreeWidgetItem (view, QStringList() << i18n ("Using MXP") << 
0126       (usingmxp ? i18n ("Yes") : i18n ("No")));
0127 #endif
0128   items << new QTreeWidgetItem (view, QStringList() << i18n ("Sent bytes") << 
0129       QString::number (sentbytes));
0130   items << new QTreeWidgetItem (view, QStringList() << i18n ("Sent commands") << 
0131       QString::number (sentcmds));
0132   items << new QTreeWidgetItem (view, QStringList() << i18n ("Received bytes") << 
0133       QString::number (compr));
0134   items << new QTreeWidgetItem (view, QStringList() << i18n ("... after decompression") << 
0135       QString::number (decompr));
0136   items << new QTreeWidgetItem (view, QStringList() << i18n ("Received lines") << 
0137       QString::number (recvlines));
0138   items << new QTreeWidgetItem (view, QStringList() << i18n ("Connection time") << 
0139       connTime);
0140 
0141   view->addTopLevelItems (items);
0142 }
0143 
0144 #include "moc_dlgstatistics.cpp"