You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
298 lines
9.0 KiB
298 lines
9.0 KiB
//
|
|
// 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 <tqtooltip.h>
|
|
#include <tqpointarray.h>
|
|
#include <tqpainter.h>
|
|
|
|
|
|
extern TQPixmap * 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"));
|
|
}
|
|
|
|
TQToolTip::add(this,tip.ptr());
|
|
|
|
startTimer(1000);
|
|
}
|
|
|
|
KviIOGraphDisplay::~KviIOGraphDisplay()
|
|
{
|
|
g_pIOGraphWidgetList->removeRef(this);
|
|
}
|
|
|
|
void KviIOGraphDisplay::timerEvent(TQTimerEvent *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 TQCOORD 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 TQCOORD 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(TQPainter * p)
|
|
{
|
|
static TQPointArray hp(6 * 4,horizSegments);
|
|
static TQPointArray 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]);
|
|
}
|
|
}
|
|
}
|
|
|
|
TQSize KviIOGraphDisplay::tqsizeHint() const
|
|
{
|
|
return TQSize(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
|