author | mickeyl <mickeyl> | 2002-08-31 10:43:26 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2002-08-31 10:43:26 (UTC) |
commit | cd33eed8d5eccebdc37dcd0e30d7917b91765222 (patch) (side-by-side diff) | |
tree | cec3d088b58501bcc660686f468c4a968dc2d729 /noncore/applets/wirelessapplet/wireless.cpp | |
parent | 3b720187b21a3b9b3d17fc2b26489723febdaec2 (diff) | |
download | opie-cd33eed8d5eccebdc37dcd0e30d7917b91765222.zip opie-cd33eed8d5eccebdc37dcd0e30d7917b91765222.tar.gz opie-cd33eed8d5eccebdc37dcd0e30d7917b91765222.tar.bz2 |
- debug output is now #ifdef'd
- wireless applet icon shows on demand (like cardmon
- applet has an advanced configuration dialog
- applet features experimental dhcp renew on change of essid/freq/ap/mode
Diffstat (limited to 'noncore/applets/wirelessapplet/wireless.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/applets/wirelessapplet/wireless.cpp | 139 |
1 files changed, 131 insertions, 8 deletions
diff --git a/noncore/applets/wirelessapplet/wireless.cpp b/noncore/applets/wirelessapplet/wireless.cpp index 183aab8..a5aabb0 100644 --- a/noncore/applets/wirelessapplet/wireless.cpp +++ b/noncore/applets/wirelessapplet/wireless.cpp @@ -22,5 +22,5 @@ #include <qpoint.h> #include <qradiobutton.h> -#include <qcheckbox.h> +#include <qpushbutton.h> #include <qpainter.h> #include <qlabel.h> @@ -32,8 +32,14 @@ #include <qstring.h> #include <qfile.h> +#include <qtextstream.h> + +#include <sys/types.h> +#include <signal.h> #include "networkinfo.h" #include "mgraph.h" +#include "advancedconfig.h" + #include "connect0.xpm" #include "connect1.xpm" @@ -47,4 +53,6 @@ #define STYLE_ANTENNA 1 +#define MDEBUG 0 + WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const char *name ) : QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), applet( applet ) @@ -95,10 +103,11 @@ WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const mgraph->setFocusPolicy( QWidget::NoFocus ); - /* dhcp renew CheckBox */ + /* advanced configuration Button */ - //FIXME: under construction - //QCheckBox* dhcpCheckBox = new QCheckBox( "DHCP renew", this ); - //dhcpCheckBox->setFocusPolicy( QWidget::NoFocus ); - //grid->addWidget( dhcpCheckBox, 2, 0, Qt::AlignCenter ); + 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 */ @@ -130,4 +139,19 @@ WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const connect( group, SIGNAL( clicked( int ) ), this, SLOT( displayStyleChange( int ) ) ); + + applet->updateDHCPConfig( rocESSID, rocFREQ, rocAP, rocMODE ); +} + +void WirelessControl::advancedConfigClicked() +{ + AdvancedConfig* a = new AdvancedConfig( this, "dialog", TRUE ); + int result = a->exec(); + a->hide(); + delete a; + if ( result == QDialog::Accepted ) + { + readConfig(); + applet->updateDHCPConfig( rocESSID, rocFREQ, rocAP, rocMODE ); + } } @@ -168,4 +192,8 @@ void WirelessControl::readConfig() 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 ); } @@ -181,5 +209,6 @@ void WirelessControl::writeConfigEntry( const char *entry, int val ) WirelessApplet::WirelessApplet( QWidget *parent, const char *name ) : QWidget( parent, name ), visualStyle( STYLE_ANTENNA ), - timer( 0 ), interface( 0 ) + timer( 0 ), interface( 0 ), + rocESSID( false ), rocFREQ( false ), rocAP( false ), rocMODE( false ) { setFixedHeight( 18 ); @@ -194,11 +223,51 @@ void WirelessApplet::checkInterface() if ( interface ) { +#ifdef MDEBUG qDebug( "WIFIAPPLET: using interface '%s'", (const char*) +#endif interface->getName() ); } else { +#ifdef MDEBUG qDebug( "WIFIAPPLET: D'oh! No Wireless interface present... :(" ); + hide(); +#endif + } +} + +void WirelessApplet::renewDHCP() +{ +#ifdef MDEBUG + qDebug( "WIFIAPPLET: Going to request a DHCP configuration renew." ); +#endif + + QString pidfile; + if ( !interface ) + return; + QString ifacename( interface->getName() ); + pidfile.sprintf( "/var/run/dhcpcd-%s.pid", (const char* ) ifacename ); +#ifdef MDEBUG + qDebug( "WIFIAPPLET: 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 -14 to pid %d", pid ); +#endif + kill( pid, -14 ); + } + +void WirelessApplet::updateDHCPConfig( bool ESSID, bool FREQ, bool AP, bool MODE ) +{ + rocESSID = ESSID; + rocFREQ = FREQ; + rocAP = AP; + rocMODE = MODE; } @@ -229,5 +298,11 @@ void WirelessApplet::timerEvent( QTimerEvent* ) if ( iface ) { - iface->updateStatistics(); + bool statResult = iface->updateStatistics(); + if ( !statResult ) + { + interface = 0; + mustRepaint(); + return; + } else if ( mustRepaint() ) { @@ -260,6 +335,20 @@ bool WirelessApplet::mustRepaint() { 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(); @@ -285,4 +374,38 @@ bool WirelessApplet::mustRepaint() } + if ( rocESSID && ( oldESSID != iface->essid ) ) + { +#ifdef MDEBUG + qDebug( "WIFIAPPLET: ESSID has changed."); +#endif + renewDHCP(); + } + else if ( rocFREQ && ( oldFREQ != iface->freq ) ) + { +#ifdef MDEBUG + qDebug( "WIFIAPPLET: FREQ has changed."); +#endif + renewDHCP(); + } + else if ( rocAP && ( oldAP != iface->APAddr ) ) + { +#ifdef MDEBUG + qDebug( "WIFIAPPLET: AP has changed."); +#endif + renewDHCP(); + } + else if ( rocMODE && ( oldMODE != iface->mode ) ) + { +#ifdef MDEBUG + qDebug( "WIFIAPPLET: MODE has changed."); +#endif + renewDHCP(); + } + + oldESSID = iface->essid; + oldMODE = iface->mode; + oldFREQ = iface->freq; + oldAP = iface->APAddr; + return false; } |