diff options
Diffstat (limited to 'src/modules/iograph')
-rw-r--r-- | src/modules/iograph/Makefile.am | 20 | ||||
-rw-r--r-- | src/modules/iograph/libkviiograph.cpp | 297 | ||||
-rw-r--r-- | src/modules/iograph/libkviiograph.h | 55 |
3 files changed, 372 insertions, 0 deletions
diff --git a/src/modules/iograph/Makefile.am b/src/modules/iograph/Makefile.am new file mode 100644 index 00000000..a9ea3928 --- /dev/null +++ b/src/modules/iograph/Makefile.am @@ -0,0 +1,20 @@ +############################################################################### +# KVirc IRC client Makefile - 10.03.2000 Szymon Stefanek <[email protected]> +############################################################################### + +AM_CPPFLAGS = -I$(SS_TOPSRCDIR)/src/kvilib/include/ -I$(SS_TOPSRCDIR)/src/kvirc/include/ \ +$(SS_INCDIRS) $(SS_CPPFLAGS) -DGLOBAL_KVIRC_DIR=\"$(globalkvircdir)\" + +pluglib_LTLIBRARIES = libkviiograph.la + +libkviiograph_la_LDFLAGS = -module -avoid-version $(SS_LDFLAGS) $(SS_LIBDIRS) + +libkviiograph_la_SOURCES = libkviiograph.cpp +libkviiograph_la_LIBADD = $(SS_LIBLINK) ../../kvilib/build/libkvilib.la + +noinst_HEADERS= libkviiograph.h + +%.moc: %.h + $(SS_QT_MOC) $< -o $@ + +libkviiograph.cpp: libkviiograph.moc diff --git a/src/modules/iograph/libkviiograph.cpp b/src/modules/iograph/libkviiograph.cpp new file mode 100644 index 00000000..ab9aa4f1 --- /dev/null +++ b/src/modules/iograph/libkviiograph.cpp @@ -0,0 +1,297 @@ +// +// File : kvi_iograph.cpp +// Creation date : Tue Oct 31 2000 00:14:12 CEST by Szymon Stefanek +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net) +// +// 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 2 +// of the License, or (at your opinion) 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, write to the Free Software Foundation, +// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// + + +#include "libkviiograph.h" +#include "kvi_module.h" + +#if 0 + + +#include "kvi_console.h" +#include "kvi_options.h" +#include "kvi_ircsocket.h" +#include "kvi_frame.h" +#include "kvi_locale.h" + +#include "kvi_pointerlist.h" +#include <qtooltip.h> +#include <qpointarray.h> +#include <qpainter.h> + + +extern QPixmap * g_pIccMemBuffer; + + +static KviPointerList<KviIOGraphDisplay> * g_pIOGraphWidgetList; + +KviIOGraphDisplay::KviIOGraphDisplay(KviIrcContextController * pController,bool sentGraph,bool recvGraph) +: KviIrcContextGraphicalApplet(pController,"iograph_display") +{ + g_pIOGraphWidgetList->append(this); + for(int i=0;i < KVI_IOGRAPH_NUMBER_POINTS;i++) + { + m_sendRates[i] = 0; + m_recvRates[i] = 0; + } + m_iNextPoint = 1; + m_uLastSentBytes = pController->console()->socket()->sentBytes(); + m_uLastRecvBytes = pController->console()->socket()->readBytes(); + m_bShowSentGraph = sentGraph; + m_bShowRecvGraph = recvGraph; + + KviStr tip; + if(sentGraph)tip = __tr("Outgoing traffic"); + if(recvGraph) + { + if(tip.hasData())tip.append("\n"); + tip.append(__tr("Incoming traffic")); + } + + QToolTip::add(this,tip.ptr()); + + startTimer(1000); +} + +KviIOGraphDisplay::~KviIOGraphDisplay() +{ + g_pIOGraphWidgetList->removeRef(this); +} + +void KviIOGraphDisplay::timerEvent(QTimerEvent *e) +{ + unsigned int sB = console()->socket()->sentBytes(); + unsigned int rB = console()->socket()->readBytes(); + int sDiff = (sB - m_uLastSentBytes) / 8; + int rDiff = (rB - m_uLastRecvBytes) / 32; +// debug("s:%d,r:%d",sDiff,rDiff); + if(sDiff < 0)sDiff = 0; + else if(sDiff > 30)sDiff = 30; + if(rDiff < 0)rDiff = 0; + else if(rDiff > 30)rDiff = 30; + m_uLastSentBytes = sB; + m_uLastRecvBytes = rB; + m_sendRates[m_iNextPoint] = sDiff; + m_recvRates[m_iNextPoint] = rDiff; + m_iNextPoint++; + if(m_iNextPoint >= KVI_IOGRAPH_NUMBER_POINTS)m_iNextPoint = 0; + update(); +} + +static QCOORD horizSegments[6 * 4]= +{ + 5 , 3 , KVI_IRCTOOLBARAPPLET_MAXIMUM_WIDTH - 4 , 3 , + 5 , 8 , KVI_IRCTOOLBARAPPLET_MAXIMUM_WIDTH - 4 , 8 , + 5 , 13 , KVI_IRCTOOLBARAPPLET_MAXIMUM_WIDTH - 4 , 13 , + 5 , 18 , KVI_IRCTOOLBARAPPLET_MAXIMUM_WIDTH - 4 , 18 , + 5 , 23 , KVI_IRCTOOLBARAPPLET_MAXIMUM_WIDTH - 4 , 23 , + 5 , 28 , KVI_IRCTOOLBARAPPLET_MAXIMUM_WIDTH - 4 , 28 +}; + +static QCOORD vertSegments[29 * 4]= +{ + 9 , 4 , 9 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 14 , 4 , 14 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 19 , 4 , 19 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 24 , 4 , 24 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 29 , 4 , 29 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 34 , 4 , 34 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 39 , 4 , 39 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 44 , 4 , 44 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 49 , 4 , 49 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 54 , 4 , 54 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 59 , 4 , 59 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 64 , 4 , 64 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 69 , 4 , 69 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 74 , 4 , 74 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 79 , 4 , 79 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 84 , 4 , 84 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 89 , 4 , 89 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 94 , 4 , 94 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 99 , 4 , 99 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 104 , 4 , 104 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 109 , 4 , 109 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 114 , 4 , 114 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 119 , 4 , 119 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 124 , 4 , 124 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 129 , 4 , 129 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 134 , 4 , 134 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 139 , 4 , 139 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 144 , 4 , 144 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 , + 149 , 4 , 149 , KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5 +}; + +void KviIOGraphDisplay::drawContents(QPainter * p) +{ + static QPointArray hp(6 * 4,horizSegments); + static QPointArray vp(29 * 4,vertSegments); + + p->setPen(KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletForegroundLowContrast)); + p->drawLineSegments(hp,0,6); + p->drawLineSegments(vp,0,29); + p->setPen(KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletForegroundMidContrast)); + + p->drawLine(4,33,KVI_IRCTOOLBARAPPLET_MAXIMUM_WIDTH - 4,33); + p->drawLine(4,3,4,KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT - 5); + + p->setPen(isActiveContext() ? + KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletForegroundHighContrastActive1) : + KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletForegroundHighContrastInactive1)); + + // the first point to draw is "m_iNextPoint" + // it will be drawn at X = 4 + + int leftPart = KVI_IOGRAPH_NUMBER_POINTS - m_iNextPoint; + + int i; + + if(m_bShowSentGraph) + { + for(i = 1;i < leftPart;i++) + { + p->drawLine(3 + i,33 - m_sendRates[m_iNextPoint + i - 1],4 + i,33 - m_sendRates[m_iNextPoint + i]); + } + + p->drawLine(3 + i,33 - m_sendRates[m_iNextPoint + i - 1],4 + i,33 - m_sendRates[0]); + + for(i = 1;i < m_iNextPoint;i++) + { + p->drawLine(leftPart + 3 + i,33 - m_sendRates[i - 1],leftPart + 4 + i,33 - m_sendRates[i]); + } + } + + if(m_bShowRecvGraph) + { + p->setPen(isActiveContext() ? + KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletForegroundHighContrastActive2) : + KVI_OPTION_COLOR(KviOption_colorIrcToolBarAppletForegroundHighContrastInactive2)); + + for(i = 1;i < leftPart;i++) + { + p->drawLine(3 + i,33 - m_recvRates[m_iNextPoint + i - 1],4 + i,33 - m_recvRates[m_iNextPoint + i]); + } + + p->drawLine(3 + i,33 - m_recvRates[m_iNextPoint + i - 1],4 + i,33 - m_recvRates[0]); + + for(i = 1;i < m_iNextPoint;i++) + { + p->drawLine(leftPart + 3 + i,33 - m_recvRates[i - 1],leftPart + 4 + i,33 - m_recvRates[i]); + } + } +} + +QSize KviIOGraphDisplay::sizeHint() const +{ + return QSize(KVI_IRCTOOLBARAPPLET_MAXIMUM_WIDTH,KVI_IRCTOOLBARAPPLET_MAXIMUM_HEIGHT); +} + + +/* + @doc: iograph.add + @type: + command + @title: + iograph.add + @short: + Adds an IOGraph applet + @syntax: + iograph.add [-i] [-o] + @description: + Adds an IOGraph applet to the current irc-context toolbar. It will + monitor the Incoming and Outgoing socket traffic.[br] + Since both graphs often are somewhat unreadable, + the -i switch will cause the IOGraph applet to show only + the incoming traffic, and the -o switch will cause it to show + only the outgoing traffic.[br] + Well...I agree...this is an amazing misuse of resources :) +*/ + + + +static bool iograph_module_cmd_add(KviModule *m,KviCommand *c) +{ + ENTER_STACK_FRAME(c,"iograph_module_cmd_add"); + + KviStr dummy; + if(!g_pUserParser->parseCmdFinalPart(c,dummy))return false; + + if(!c->window()->console())return c->noIrcContext(); + + bool bSentGraph = !(c->hasSwitch('i')); + bool bRecvGraph = !(c->hasSwitch('o')); + + if(!(bSentGraph || bRecvGraph))bRecvGraph = true; + + KviIOGraphDisplay * dpy = new KviIOGraphDisplay(c->window()->console()->icController(),bSentGraph,bRecvGraph); + c->window()->console()->icController()->addApplet(dpy); + dpy->show(); + + return c->leaveStackFrame(); +} +#endif + +static bool iograph_module_init(KviModule *m) +{ +#if 0 + g_pIOGraphWidgetList = new KviPointerList<KviIOGraphDisplay>; + g_pIOGraphWidgetList->setAutoDelete(false); + m->registerCommand("add",iograph_module_cmd_add); +#endif + return true; +} + +static bool iograph_module_cleanup(KviModule *m) +{ +#if 0 + while(g_pIOGraphWidgetList->first()) + { + KviIOGraphDisplay * dpy = g_pIOGraphWidgetList->first(); + dpy->controller()->removeApplet(dpy); // deleted path + } + delete g_pIOGraphWidgetList; +#endif + return true; +} + +static bool iograph_module_can_unload(KviModule *m) +{ +#if 0 + return g_pIOGraphWidgetList->isEmpty(); +#else + return true; +#endif +} + +KVIRC_MODULE( + "IOGraph", // module name + "1.0.0", // module version + "Copyright (C) 2000 Szymon Stefanek (pragma at kvirc dot net)", // author & (C) + "IRC socket traffic monitor", + iograph_module_init, + iograph_module_can_unload, + 0, + iograph_module_cleanup +) + +#if 0 +#include "libkviiograph.moc" +#endif diff --git a/src/modules/iograph/libkviiograph.h b/src/modules/iograph/libkviiograph.h new file mode 100644 index 00000000..9b134615 --- /dev/null +++ b/src/modules/iograph/libkviiograph.h @@ -0,0 +1,55 @@ +#ifndef _LIBKVIIOGRAPH_H_ +#define _LIBKVIIOGRAPH_H_ + +// +// File : kvi_iograph.cpp +// Creation date : Tue Oct 31 2000 00:14:12 CEST by Szymon Stefanek +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net) +// +// 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 2 +// of the License, or (at your opinion) 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, write to the Free Software Foundation, +// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// + +#if 0 + +#include "kvi_irctoolbar.h" + + +#define KVI_IOGRAPH_NUMBER_POINTS 148 + +class KviIOGraphDisplay : public KviIrcContextGraphicalApplet +{ + Q_OBJECT +public: + KviIOGraphDisplay(KviIrcContextController * pController,bool sentGraph,bool recvGraph); + ~KviIOGraphDisplay(); +protected: + unsigned int m_sendRates[KVI_IOGRAPH_NUMBER_POINTS]; + unsigned int m_recvRates[KVI_IOGRAPH_NUMBER_POINTS]; + int m_iNextPoint; + unsigned int m_uLastSentBytes; + unsigned int m_uLastRecvBytes; + bool m_bShowSentGraph; + bool m_bShowRecvGraph; +protected: + virtual void drawContents(QPainter *p); + virtual QSize sizeHint() const; + virtual void timerEvent(QTimerEvent *e); +}; + +#endif + +#endif |