author | mickeyl <mickeyl> | 2004-02-23 13:37:46 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-02-23 13:37:46 (UTC) |
commit | 1f362cd77a2b39eae2abca6da28efa5118d2c347 (patch) (side-by-side diff) | |
tree | ddc796d7505b2ec0f20e9b74154316d3f818d16c | |
parent | 12ce268e3f75e4f07699b8e0c368f2112e651f7f (diff) | |
download | opie-1f362cd77a2b39eae2abca6da28efa5118d2c347.zip opie-1f362cd77a2b39eae2abca6da28efa5118d2c347.tar.gz opie-1f362cd77a2b39eae2abca6da28efa5118d2c347.tar.bz2 |
start with the long awaited wireless applet overhaul
-rw-r--r-- | noncore/applets/wirelessapplet/wireless.cpp | 55 | ||||
-rw-r--r-- | noncore/applets/wirelessapplet/wireless.h | 1 | ||||
-rw-r--r-- | noncore/applets/wirelessapplet/wirelessapplet.pro | 8 | ||||
-rw-r--r-- | noncore/applets/wirelessapplet/wirelessappletimpl.cpp | 66 | ||||
-rw-r--r-- | noncore/applets/wirelessapplet/wirelessappletimpl.h | 43 |
5 files changed, 39 insertions, 134 deletions
diff --git a/noncore/applets/wirelessapplet/wireless.cpp b/noncore/applets/wirelessapplet/wireless.cpp index 763aab8..cbaf5d6 100644 --- a/noncore/applets/wirelessapplet/wireless.cpp +++ b/noncore/applets/wirelessapplet/wireless.cpp @@ -1,115 +1,113 @@ /********************************************************************** -** Copyright (C) 2002 Michael 'Mickey' Lauer -** <mickey@tm.informatik.uni-frankfurt.de> -** http://www.Vanille.de +** Copyright (C) 2002-2004 Michael 'Mickey' Lauer <mickey@vanille.de> ** ** 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 "wireless.h" +#include "networkinfo.h" +#include "mgraph.h" +#include "advancedconfig.h" +#include "connect0.xpm" +#include "connect1.xpm" +#include "connect2.xpm" +#include "connect3.xpm" +#include "connect4.xpm" +#include "connect5.xpm" +#include "nowireless.xpm" -#include <qapplication.h> +/* OPIE */ +#include <opie2/otaskbarapplet.h> #include <qpe/qpeapplication.h> #include <qpe/config.h> +/* QT */ #include <qpoint.h> #include <qradiobutton.h> #include <qpushbutton.h> #include <qpainter.h> #include <qlabel.h> #include <qslider.h> #include <qbuttongroup.h> #include <qlayout.h> #include <qframe.h> #include <qpixmap.h> #include <qstring.h> #include <qfile.h> #include <qtextstream.h> +/* STD */ #include <sys/types.h> #include <signal.h> -#include "networkinfo.h" -#include "mgraph.h" - -#include "advancedconfig.h" - -#include "connect0.xpm" -#include "connect1.xpm" -#include "connect2.xpm" -#include "connect3.xpm" -#include "connect4.xpm" -#include "connect5.xpm" -#include "nowireless.xpm" - #define STYLE_BARS 0 #define STYLE_ANTENNA 1 //#define MDEBUG #undef MDEBUG WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const char *name ) : QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), applet( applet ) { readConfig(); writeConfigEntry( "UpdateFrequency", updateFrequency ); writeConfigEntry( "DisplayStyle", displayStyle ); setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); QGridLayout *grid = new QGridLayout( this, 3, 2, 6, 2, "top layout" ); /* status label */ statusLabel = new QLabel( this, "statuslabel" ); QString text( "Wireless Status:<br>" "*** Unknown ***<br>" "Card not inserted ?<br>" "Or Sharp ROM ?<br>" "CELL: 00:00:00:00:00:00" ); /* QString text( "Station: Unknown<br>" "ESSID: Unknown<br>" "MODE: Unknown<br>" "FREQ: Unknown<br>" "CELL: AA:BB:CC:DD:EE:FF" ); */ statusLabel->setText( text ); statusLabel->setFixedSize( statusLabel->sizeHint() ); grid->addWidget( statusLabel, 0, 0 ); /* visualization group box */ QButtonGroup* group = new QButtonGroup( 1, Qt::Horizontal, "Visualization", this ); QRadioButton* r1 = new QRadioButton( "Color Bars", group ); QRadioButton* r2 = new QRadioButton( "Antenna", group ); r1->setFocusPolicy( QWidget::NoFocus ); r2->setFocusPolicy( QWidget::NoFocus ); group->setFocusPolicy( QWidget::NoFocus ); group->setButton( displayStyle ); grid->addWidget( group, 0, 1 ); /* quality graph */ mgraph = new MGraph( this ); mgraph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); mgraph->setMin( 0 ); mgraph->setMax( 92 ); grid->addWidget( mgraph, 1, 0 ); mgraph->setFocusPolicy( QWidget::NoFocus ); /* advanced configuration Button */ QPushButton* advanced = new QPushButton( "Advanced...", this ); advanced->setFocusPolicy( QWidget::NoFocus ); grid->addWidget( advanced, 2, 0, Qt::AlignCenter ); connect( advanced, SIGNAL( clicked() ), this, SLOT( advancedConfigClicked() ) ); /* update Frequency Label */ @@ -165,241 +163,243 @@ void WirelessControl::updateDelayChange( int delay ) writeConfigEntry( "UpdateFrequency", delay ); } void WirelessControl::displayStyleChange( int style ) { applet->displayStyleChange( style ); writeConfigEntry( "DisplayStyle", style ); } void WirelessControl::show ( bool ) { QPoint curPos = applet->mapToGlobal( QPoint ( 0, 0 ) ); int w = sizeHint().width(); int x = curPos.x() - ( w / 2 ); if ( ( x + w ) > QPEApplication::desktop()->width() ) x = QPEApplication::desktop ( )-> width ( ) - w; move( x, curPos.y () - sizeHint().height () ); QFrame::show(); } void WirelessControl::readConfig() { Config cfg( "qpe" ); cfg.setGroup( "Wireless" ); updateFrequency = cfg.readNumEntry( "UpdateFrequency", 2 ); displayStyle = cfg.readNumEntry( "DisplayStyle", STYLE_ANTENNA ); rocESSID = cfg.readBoolEntry( "renew_dhcp_on_essid_change", false ); rocFREQ = cfg.readBoolEntry( "renew_dhcp_on_freq_change", false ); rocAP = cfg.readBoolEntry( "renew_dhcp_on_ap_change", false ); rocMODE = cfg.readBoolEntry( "renew_dhcp_on_mode_change", false ); } void WirelessControl::writeConfigEntry( const char *entry, int val ) { Config cfg( "qpe" ); cfg.setGroup( "Wireless" ); cfg.writeEntry( entry, val ); } //=========================================================================== WirelessApplet::WirelessApplet( QWidget *parent, const char *name ) : QWidget( parent, name ), visualStyle( STYLE_ANTENNA ), timer( 0 ), interface( 0 ), rocESSID( false ), rocFREQ( false ), rocAP( false ), rocMODE( false ) { setFixedHeight( 18 ); setFixedWidth( 14 ); network = new MWirelessNetwork(); status = new WirelessControl( this, this, "wireless status" ); } void WirelessApplet::checkInterface() { interface = network->getFirstInterface(); if ( interface ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: using interface '%s'", (const char*) interface->getName() ); #endif + } else { #ifdef MDEBUG qDebug( "WIFIAPPLET: D'oh! No Wireless interface present... :(" ); #endif hide(); } } void WirelessApplet::renewDHCP() { #ifdef MDEBUG qDebug( "WIFIAPPLET: Going to request a DHCP configuration renew." ); #endif QString pidfile; if ( !interface ) return; QString ifacename( interface->getName() ); // At first we are trying dhcpcd pidfile.sprintf( "/var/run/dhcpcd-%s.pid", (const char* ) ifacename ); #ifdef MDEBUG qDebug( "WIFIAPPLET: dhcpcd pidfile is '%s'", (const char*) pidfile ); #endif int pid; QFile pfile( pidfile ); bool hasFile = pfile.open( IO_ReadOnly ); QTextStream s( &pfile ); if ( hasFile ) { s >> pid; #ifdef MDEBUG qDebug( "WIFIAPPLET: sent SIGALARM to pid %d", pid ); #endif kill( pid, SIGALRM ); return; } // No dhcpcd, so we are trying udhcpc #ifdef MDEBUG qDebug( "WIFIAPPLET: dhcpcd not available." ); #endif pidfile.sprintf( "/var/run/udhcpc.%s.pid", (const char*) ifacename ); #ifdef MDEBUG qDebug( "WIFIAPPLET: udhcpc pidfile is '%s'", (const char*) pidfile ); #endif QFile pfile2( pidfile ); hasFile = pfile2.open( IO_ReadOnly ); QTextStream s2( &pfile2 ); if ( hasFile ) { s2 >> pid; #ifdef MDEBUG qDebug( "WIFIAPPLET: sent SIGUSR1 to pid %d", pid ); #endif kill( pid, SIGUSR1 ); return; } } void WirelessApplet::updateDHCPConfig( bool ESSID, bool FREQ, bool AP, bool MODE ) { rocESSID = ESSID; rocFREQ = FREQ; rocAP = AP; rocMODE = MODE; } void WirelessApplet::updateDelayChange( int delay ) { if ( timer ) killTimer( timer ); delay *= 1000; if ( delay == 0 ) delay = 50; timer = startTimer( delay ); } void WirelessApplet::displayStyleChange( int style ) { visualStyle = style; repaint(); } WirelessApplet::~WirelessApplet() -{ -} +{} void WirelessApplet::timerEvent( QTimerEvent* ) { MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface; if ( iface ) { bool statResult = iface->updateStatistics(); if ( !statResult ) { interface = 0; mustRepaint(); return; - } else + } + else if ( mustRepaint() ) { //qDebug( "WIFIAPPLET: A value has changed -> repainting." ); repaint(); } if ( status->isVisible() ) updatePopupWindow(); - } else checkInterface(); + } + else checkInterface(); } void WirelessApplet::mousePressEvent( QMouseEvent *) { if ( status->isVisible() ) status->hide(); else status->show( true ); } bool WirelessApplet::mustRepaint() { MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface; // check if there are enough changes to justify a (flickering) repaint // has the interface changed? if ( iface != oldiface ) { oldiface = iface; if ( iface ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: We had no interface but now we have one! :-)" ); #endif show(); } else { #ifdef MDEBUG qDebug( "WIFIAPPLET: We had a interface but now we don't have one! ;-(" ); #endif hide(); return true; } } const char** pixmap = getQualityPixmap(); if ( pixmap && ( pixmap != oldpixmap ) ) { oldpixmap = pixmap; return true; } int noiseH = iface->noisePercent() * ( height() - 3 ) / 100; int signalH = iface->signalPercent() * ( height() - 3 ) / 100; int qualityH = iface->qualityPercent() * ( height() - 3 ) / 100; if ( ( noiseH != oldnoiseH ) || ( signalH != oldsignalH ) || ( qualityH != oldqualityH ) ) { oldnoiseH = noiseH; oldsignalH = signalH; oldqualityH = qualityH; return true; } if ( rocESSID && ( oldESSID != iface->essid ) ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: ESSID has changed."); @@ -476,64 +476,77 @@ const char** WirelessApplet::getQualityPixmap() } void WirelessApplet::paintEvent( QPaintEvent* ) { MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface; QPainter p(this); QColor color; const char** pixmap = getQualityPixmap(); if ( pixmap ) p.drawPixmap( 0, 1, pixmap ); else { int noiseH = iface->noisePercent() * ( height() - 3 ) / 100; int signalH = iface->signalPercent() * ( height() - 3 ) / 100; int qualityH = iface->qualityPercent() * ( height() - 3 ) / 100; double intensity; int pixelHeight; int pixelWidth = 2; int Hue; int barSpace = 3; int leftoffset = 0; int bottomoffset = 2; // draw noise indicator pixelHeight = noiseH; Hue = 50; for ( int i = 0; i < pixelHeight; ++i ) { intensity = 50 + ( (double) i / (double) pixelHeight ) * 205; color.setHsv( Hue, 255, intensity ); p.setPen ( color ); p.drawLine( leftoffset, height()-bottomoffset-i, pixelWidth+leftoffset, height()-bottomoffset-i ); } // draw signal indicator pixelHeight = signalH; Hue = 100; leftoffset += pixelWidth + barSpace; for ( int i = 0; i < pixelHeight; ++i ) { intensity = 50 + ( (double) i / (double) pixelHeight ) * 205; color.setHsv( Hue, 255, intensity ); p.setPen ( color ); p.drawLine( leftoffset, height()-bottomoffset-i, pixelWidth+leftoffset, height()-bottomoffset-i ); } // draw quality indicator pixelHeight = qualityH; Hue = 250; leftoffset += pixelWidth + barSpace; for ( int i = 0; i < pixelHeight; ++i ) { intensity = 50 + ( (double) i / (double) pixelHeight ) * 205; color.setHsv( Hue, 255, intensity ); p.setPen ( color ); p.drawLine( leftoffset, height()-bottomoffset-i, pixelWidth+leftoffset, height()-bottomoffset-i ); } } } + + +int WirelessApplet::position() +{ + return 6; +} + + +Q_EXPORT_INTERFACE() +{ + Q_CREATE_INSTANCE( OTaskbarAppletWrapper<WirelessApplet> ); +} + diff --git a/noncore/applets/wirelessapplet/wireless.h b/noncore/applets/wirelessapplet/wireless.h index 51a3fab..644be26 100644 --- a/noncore/applets/wirelessapplet/wireless.h +++ b/noncore/applets/wirelessapplet/wireless.h @@ -4,110 +4,111 @@ ** ** 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 __WIRELESS_APPLET_H__ #define __WIRELESS_APPLET_H__ #include <qwidget.h> #include <qframe.h> #include <qpixmap.h> class MNetwork; class MWirelessNetwork; class MNetworkInterface; class MWirelessNetworkInterface; class Y; class QLabel; class WirelessApplet; class MGraph; class WirelessControl : public QFrame { Q_OBJECT public: WirelessControl( WirelessApplet* icon, QWidget *parent=0, const char *name=0 ); void show( bool ); void readConfig(); void writeConfigEntry( const char* entry, int val ); MGraph* mgraph; QLabel* statusLabel; QLabel* updateLabel; public slots: void updateDelayChange( int ); void displayStyleChange( int ); void advancedConfigClicked(); private: WirelessApplet* applet; int displayStyle; int updateFrequency; bool rocESSID; bool rocFREQ; bool rocAP; bool rocMODE; }; class WirelessApplet : public QWidget { Q_OBJECT public: WirelessApplet( QWidget *parent = 0, const char *name=0 ); ~WirelessApplet(); + static int position(); WirelessControl* status; virtual void timerEvent( QTimerEvent* ); void updateDelayChange( int delay ); void displayStyleChange( int style ); void updateDHCPConfig( bool, bool, bool, bool ); private: void mousePressEvent( QMouseEvent * ); void paintEvent( QPaintEvent* ); void checkInterface(); void renewDHCP(); bool mustRepaint(); void updatePopupWindow(); const char** getQualityPixmap(); private: QPixmap snapshotPixmap; int visualStyle; int timer; MWirelessNetwork* network; MNetworkInterface* interface; private: const char** oldpixmap; MWirelessNetworkInterface* oldiface; int oldqualityH; int oldsignalH; int oldnoiseH; QString oldESSID; QString oldAP; QString oldMODE; double oldFREQ; bool rocESSID; bool rocFREQ; bool rocAP; bool rocMODE; }; #endif // __WIRELESS_APPLET_H__ diff --git a/noncore/applets/wirelessapplet/wirelessapplet.pro b/noncore/applets/wirelessapplet/wirelessapplet.pro index 411a039..38cb475 100644 --- a/noncore/applets/wirelessapplet/wirelessapplet.pro +++ b/noncore/applets/wirelessapplet/wirelessapplet.pro @@ -1,13 +1,13 @@ TEMPLATE = lib CONFIG += qt plugin warn_on release -HEADERS = wireless.h wirelessappletimpl.h networkinfo.h mgraph.h advancedconfig.h -SOURCES = wireless.cpp wirelessappletimpl.cpp networkinfo.cpp mgraph.cpp advancedconfig.cpp +HEADERS = wireless.h networkinfo.h mgraph.h advancedconfig.h +SOURCES = wireless.cpp networkinfo.cpp mgraph.cpp advancedconfig.cpp INTERFACES = advancedconfigbase.ui TARGET = wirelessapplet DESTDIR = $(OPIEDIR)/plugins/applets INCLUDEPATH += $(OPIEDIR)/include -DEPENDPATH += ../$(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -VERSION = 0.1.0 +VERSION = 0.1.1 include ( $(OPIEDIR)/include.pro ) diff --git a/noncore/applets/wirelessapplet/wirelessappletimpl.cpp b/noncore/applets/wirelessapplet/wirelessappletimpl.cpp deleted file mode 100644 index de70714..0000000 --- a/noncore/applets/wirelessapplet/wirelessappletimpl.cpp +++ b/dev/null @@ -1,66 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia 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. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ -#include "wireless.h" -#include "wirelessappletimpl.h" - - -WirelessAppletImpl::WirelessAppletImpl() - : wireless(0) -{ -} - -WirelessAppletImpl::~WirelessAppletImpl() -{ - delete wireless; -} - -QWidget *WirelessAppletImpl::applet( QWidget *parent ) -{ - if ( !wireless ) - wireless = new WirelessApplet( parent ); - return wireless; -} - -int WirelessAppletImpl::position() const -{ - return 6; -} - -QRESULT WirelessAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ) -{ - *iface = 0; - if ( uuid == IID_QUnknown ) - *iface = this; - else if ( uuid == IID_TaskbarApplet ) - *iface = this; - else - return QS_FALSE; - - if ( *iface ) - (*iface)->addRef(); - return QS_OK; -} - -Q_EXPORT_INTERFACE() -{ - Q_CREATE_INSTANCE( WirelessAppletImpl ) -} - - diff --git a/noncore/applets/wirelessapplet/wirelessappletimpl.h b/noncore/applets/wirelessapplet/wirelessappletimpl.h deleted file mode 100644 index 1bf4507..0000000 --- a/noncore/applets/wirelessapplet/wirelessappletimpl.h +++ b/dev/null @@ -1,43 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia 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. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ -#ifndef WIRELESSAPPLETIMPL_H -#define WIRELESSAPPLETIMPL_H - -#include <qpe/taskbarappletinterface.h> - -class WirelessApplet; - -class WirelessAppletImpl : public TaskbarAppletInterface -{ -public: - WirelessAppletImpl(); - virtual ~WirelessAppletImpl(); - - QRESULT queryInterface( const QUuid&, QUnknownInterface** ); - Q_REFCOUNT - - virtual QWidget *applet( QWidget *parent ); - virtual int position() const; - -private: - WirelessApplet *wireless; -}; - -#endif |