Diffstat (limited to 'noncore/net/wellenreiter/gui/graphwindow.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/wellenreiter/gui/graphwindow.cpp | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/noncore/net/wellenreiter/gui/graphwindow.cpp b/noncore/net/wellenreiter/gui/graphwindow.cpp index b4174d3..d53421c 100644 --- a/noncore/net/wellenreiter/gui/graphwindow.cpp +++ b/noncore/net/wellenreiter/gui/graphwindow.cpp @@ -1,45 +1,72 @@ /********************************************************************** ** Copyright (C) 2002-2004 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Wellenreiter II. ** ** 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> +/* XPM */ +static char * background[] = { +"16 16 6 1", +" c None", +". c #52676E", +"+ c #3F545B", +"@ c #394E56", +"# c #2F454C", +"$ c #364B52", +".+++++++++++++++", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############", +"+$$$$$$$$$$$$$$$", +"@###############"}; + + 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 on our own setBackgroundMode( QWidget::NoBackground ); } void MFrequencySpectrum::drawTopLine( QPainter* p, int x, int y, int width, const QColor& c ) { p->setPen( c.light() ); p->drawLine( x, y, x+width-1, y ); } void MFrequencySpectrum::drawBottomLine( QPainter* p, int x, int y, int width, const QColor& c ) { @@ -64,124 +91,121 @@ void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int heig 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; if ( i == 0 ) drawBottomLine( p, x, y-i, width, QColor( h,s,v, QColor::Hsv ) ); else if ( i == height-1 ) drawTopLine( p, x, y-i, width, QColor( h,s,v, QColor::Hsv ) ); else drawLine( p, x, y-i, width, QColor( h,s,v, QColor::Hsv ) ); } } -void MFrequencySpectrum::paintEvent( QPaintEvent* e ) +void MFrequencySpectrum::paintEvent( QPaintEvent* ) { 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 ); } void MFrequencySpectrum::mousePressEvent( QMouseEvent* e ) { int xmargin = 5; int ymargin = 2; int y = size().height() - 2 * ymargin; - int x = 0; int width = ( size().width() - 2 * xmargin ) / _channels; QPoint pos = e->pos(); int channel = ( pos.x()-xmargin ) / width; int height = 100 - ( pos.y()-ymargin )*100/y; if ( channel < 15 ) _values[channel] = height; } 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 ); }; 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 ) +void MGraphWindow::timerEvent( QTimerEvent* ) { for ( int i = 0; i < 14; i++ ) { spectrum->decrease( i, 1 ); } spectrum->repaint(); } void MGraphWindow::traffic( int channel, int signal ) { spectrum->setValue( channel-1, signal ); } |