-rw-r--r-- | noncore/net/wellenreiter/gui/graphwindow.cpp | 159 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/graphwindow.h | 118 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/gui.pro | 6 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 7 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiterbase.cpp | 9 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiterbase.h | 2 | ||||
-rw-r--r-- | noncore/net/wellenreiter/opie-wellenreiter.control | 2 |
7 files changed, 299 insertions, 4 deletions
diff --git a/noncore/net/wellenreiter/gui/graphwindow.cpp b/noncore/net/wellenreiter/gui/graphwindow.cpp new file mode 100644 index 0000000..c620fe2 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/graphwindow.cpp @@ -0,0 +1,159 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include "graphwindow.h" + +#include <qpainter.h> +#include <qpixmap.h> +#include <qtimer.h> + +MFrequencySpectrum::MFrequencySpectrum( int channels, QWidget* parent, const char* name, WFlags f) + :QWidget( parent, name,f ), _channels( channels ) +{ + _values = new int[_channels]; + _dirty = new bool[_channels]; + for ( int i = 0; i < channels; ++i ) + { _values[i] = 0; + _dirty[i] = true; + } + + // we draw everything alone + setBackgroundMode( QWidget::NoBackground ); +} + + +void MFrequencySpectrum::drawLine( QPainter* p, int x, int y, int width, const QColor& c ) +{ + p->setPen( c.light() ); + p->drawPoint( x++, y ); + p->setPen( c ); + p->drawLine( x, y, x+width-2, y ); + p->setPen( c.dark() ); + p->drawPoint( x+width-1, y ); +} + + +void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int height, int maxheight ) +{ +/* int h1 = 133; int h2 = 0; + int s1 = 200; int s2 = 255; + int v1 = 140; int v2 = 255; */ + + int h1 = 196; int h2 = 194; + int s1 = 85; int s2 = 15; + int v1 = 95; int v2 = 237; + + QColor c( 120, 60, 200 ); + for ( int i = 0; i < height; ++i ) + { + int h = (h2-h1)*i/maxheight + h1; + int s = (s2-s1)*i/maxheight + s1; + int v = (v2-v1)*i/maxheight + v1; + drawLine( p, x, y-i, width, QColor( h,s,v, QColor::Hsv ) ); + } + + /*for ( int i = height; i < maxheight; ++i ) + drawLine( p, x, y-i, width, QColor( 47, 68, 76 ) );*/ + +} + + +void MFrequencySpectrum::paintEvent( QPaintEvent* e ) +{ + QPixmap pm( size() ); + QPainter p; + p.begin( &pm ); + p.drawTiledPixmap( 0, 0, size().width(), size().height(), QPixmap( (const char**) &background ) ); + + int xmargin = 5; + int ymargin = 2; + int y = size().height() - 2 * ymargin; + int x = 0; + int width = ( size().width() - 2 * xmargin ) / _channels; + + for ( int i = 0; i < _channels; ++i ) + { + if ( _dirty[i] ) + { + drawBar( &p, xmargin + x, y - ymargin, width-3, _values[i]*y/100, y ); + _dirty[i] = false; + } + x+= width; + } + + p.end(); + bitBlt( this, 0, 0, &pm ); +} + + +Legende::Legende( int channels, QWidget* parent, const char* name, WFlags f ) + :QFrame( parent, name, f ), _channels( channels ) +{ + setLineWidth( 2 ); + setFrameStyle( Panel + Sunken ); + setFixedHeight( 16 ); + +} + + +void Legende::drawContents( QPainter* p ) +{ + int xmargin = 5; + int ymargin = 2; + int x = 0; + int width = ( contentsRect().width() - 2 * xmargin ) / _channels; + + for ( int i = 0; i < _channels; ++i ) + p->drawText( xmargin + (width*i), 12, QString().sprintf( "%02d", i+1 ) ); +} + + +MGraphWindow::MGraphWindow( QWidget* parent, const char* name, WFlags f ) + :QVBox( parent, name, f ) +{ + spectrum = new MFrequencySpectrum( 14, this ); + legende = new Legende( 14, this ); + startTimer( 50 ); + + //testGraph(); + +}; + + +void MGraphWindow::testGraph() +{ + static int i = 0; + spectrum->setValue( i++, 100 ); + if ( i == 14 ) i = 0; + QTimer::singleShot( 2000, this, SLOT( testGraph() ) ); + +} + + +void MGraphWindow::timerEvent( QTimerEvent* e ) +{ + for ( int i = 0; i < 14; i++ ) + { + spectrum->decrease( i, 4 ); + } + spectrum->repaint(); +} + + +void MGraphWindow::traffic( int channel, int signal ) +{ + spectrum->setValue( channel-1, signal ); +} + diff --git a/noncore/net/wellenreiter/gui/graphwindow.h b/noncore/net/wellenreiter/gui/graphwindow.h new file mode 100644 index 0000000..4050065 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/graphwindow.h @@ -0,0 +1,118 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef GRAPHWINDOW_H +#define GRAPHWINDOW_H + +#include <qwidget.h> +#include <qvbox.h> + +class MFrequencySpectrum : public QWidget +{ + public: + MFrequencySpectrum( int channels, QWidget* parent = 0, const char* name = "MFrequencySpectrum", WFlags f = 0 ); + int value( int channel ) const { return _values[channel]; }; + void setValue( int channel, int value ) + { + if ( value > _values[channel] ) + { + _values[channel] = value; + _dirty[channel] = true; + } + }; + void decrease( int channel, int amount ) + { + if ( _values[channel] >= amount ) + { + _values[channel] -= amount; + _dirty[channel] = true; + } + }; + + protected: + virtual void paintEvent( QPaintEvent* ); + + void drawLine( QPainter* p, int x, int y, int width, const QColor& c ); + void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int height, int maxheight ); + + private: + int _channels; + int* _values; + bool* _dirty; +}; + + +class Legende : public QFrame +{ + public: + Legende( int channels, QWidget* parent = 0, const char* name = "Legende", WFlags f = 0 ); + + protected: + virtual void drawContents( QPainter* ); + + private: + int _channels; +}; + + +class MGraphWindow : public QVBox +{ + Q_OBJECT + + public: + MGraphWindow( QWidget* parent = 0, const char* name = "MGraphWindow", WFlags f = 0 ); + void traffic( int channel, int signal ); + + protected: + virtual void timerEvent( QTimerEvent* e ); + + protected slots: + virtual void testGraph(); + + protected: + MFrequencySpectrum* spectrum; + Legende* legende; + +}; + +/* XPM */ +static char * background[] = { +"16 16 6 1", +" c None", +". c #52676E", +"+ c #3F545B", +"@ c #394E56", +"# c #2F454C", +"$ c #364B52", +".+++++++++++++++", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############"}; + + +#endif + diff --git a/noncore/net/wellenreiter/gui/gui.pro b/noncore/net/wellenreiter/gui/gui.pro index 476518a..927f4b7 100644 --- a/noncore/net/wellenreiter/gui/gui.pro +++ b/noncore/net/wellenreiter/gui/gui.pro @@ -14,3 +14,4 @@ HEADERS = wellenreiterbase.h \ configwindow.h \ - manufacturers.h + manufacturers.h \ + graphwindow.h @@ -25,3 +26,4 @@ SOURCES = main.cpp \ configwindow.cpp \ - manufacturers.cpp + manufacturers.cpp \ + graphwindow.cpp diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index 4b82c9a..c061319 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp @@ -60,2 +60,3 @@ using namespace Opie; #include "statwindow.h" +#include "graphwindow.h" #include "manufacturers.h" @@ -168,2 +169,8 @@ void Wellenreiter::receivePacket(OPacket* p) netView()->addNewItem( type, essid, header->macAddress2().toString(), beacon->canPrivacy(), channel, 0 ); + + // do we have a prism header? + OPrismHeaderPacket* prism = static_cast<OPrismHeaderPacket*>( p->child( "Prism" ) ); + if ( ds && prism ) + graphwindow->traffic( ds->channel(), prism->signalStrength() ); + return; diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.cpp b/noncore/net/wellenreiter/gui/wellenreiterbase.cpp index 9745069..36fbb9a 100644 --- a/noncore/net/wellenreiter/gui/wellenreiterbase.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiterbase.cpp @@ -33,2 +33,3 @@ #include "statwindow.h" +#include "graphwindow.h" @@ -81,2 +82,6 @@ WellenreiterBase::WellenreiterBase( QWidget* parent, const char* name, WFlags f + //--------- GRAPH TAB -------------- + + graphwindow = new MGraphWindow( TabWidget, "Graph" ); + //--------- LOG TAB -------------- @@ -131,2 +136,3 @@ WellenreiterBase::WellenreiterBase( QWidget* parent, const char* name, WFlags f TabWidget->addTab( ap, "wellenreiter/networks", tr( "Nets" ) ); + TabWidget->addTab( graphwindow, "wellenreiter/graph", tr( "Graph" ) ); TabWidget->addTab( logwindow, "wellenreiter/log", tr( "Log" ) ); @@ -137,2 +143,3 @@ WellenreiterBase::WellenreiterBase( QWidget* parent, const char* name, WFlags f TabWidget->addTab( ap, /* "wellenreiter/networks", */ tr( "Networks" ) ); + TabWidget->addTab( graphwindow, /* "wellenreiter/graph", */ tr( "Graph" ) ); TabWidget->addTab( logwindow, /* "wellenreiter/log", */ tr( "Log" ) ); @@ -173,3 +180,3 @@ bool WellenreiterBase::event( QEvent* ev ) TextLabel1_4_2_font.setPointSize( 10 ); - TextLabel1_4_2->setFont( TextLabel1_4_2_font ); + TextLabel1_4_2->setFont( TextLabel1_4_2_font ); } diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.h b/noncore/net/wellenreiter/gui/wellenreiterbase.h index ad2e96c..e8dc924 100644 --- a/noncore/net/wellenreiter/gui/wellenreiterbase.h +++ b/noncore/net/wellenreiter/gui/wellenreiterbase.h @@ -30,2 +30,3 @@ class MHexWindow; class MStatWindow; +class MGraphWindow; @@ -55,2 +56,3 @@ public: MStatWindow* statwindow; + MGraphWindow* graphwindow; QWidget* about; diff --git a/noncore/net/wellenreiter/opie-wellenreiter.control b/noncore/net/wellenreiter/opie-wellenreiter.control index f7267b4..8bb5b1c 100644 --- a/noncore/net/wellenreiter/opie-wellenreiter.control +++ b/noncore/net/wellenreiter/opie-wellenreiter.control @@ -6,3 +6,3 @@ Maintainer: Michael 'Mickey' Lauer <mickeyl@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION +Version: 0.9.9-$SUB_VERSION Depends: task-opie-minimal, libpcap0, libopie2 (1.8.1) |