From fb1101a35d081e47df547c01a645af59f4730969 Mon Sep 17 00:00:00 2001 From: mickeyl Date: Wed, 16 Apr 2003 22:25:44 +0000 Subject: introducing networkapplet - monolithic now, but at some point of time pluggable long term plan: merge wirelessapplet with networkapplet --- diff --git a/noncore/applets/networkapplet/.cvsignore b/noncore/applets/networkapplet/.cvsignore new file mode 100644 index 0000000..99a2727 --- a/dev/null +++ b/noncore/applets/networkapplet/.cvsignore @@ -0,0 +1,5 @@ +*.moc +*.~ +Makefile* +moc_* +opieobj diff --git a/noncore/applets/networkapplet/config.in b/noncore/applets/networkapplet/config.in new file mode 100644 index 0000000..00be317 --- a/dev/null +++ b/noncore/applets/networkapplet/config.in @@ -0,0 +1,7 @@ + config NETWORKAPPLET + boolean "Network (control network interfaces on-the-fly)" + default "n" + depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2UI + comment "Network applet needs a libqpe and libopie2 (ui, net)" + depends !(( LIBQPE || LIBQPE-X11 ) && LIBOPIE2UI) + diff --git a/noncore/applets/networkapplet/networkapplet.cpp b/noncore/applets/networkapplet/networkapplet.cpp new file mode 100644 index 0000000..3019456 --- a/dev/null +++ b/noncore/applets/networkapplet/networkapplet.cpp @@ -0,0 +1,252 @@ +/* +                 This file is part of the Opie Project + + =. (C) 2003 Michael 'Mickey' Lauer + .=l. +           .>+-= + _;:,     .>    :=|. This program is free software; you can +.> <`_,   >  .   <= redistribute it and/or modify it under +:`=1 )Y*s>-.--   : the terms of the GNU Library General Public +.="- .-=="i,     .._ License as published by the Free Software + - .   .-<_>     .<> Foundation; either version 2 of the License, +     ._= =}       : or (at your option) any later version. +    .%`+i>       _;_. +    .i_,=:_.      -`: PARTICULAR PURPOSE. See the GNU +..}^=.=       =       ; Library General Public License for more +++=   -.     .`     .: details. + :     =  ...= . :.=- + -.   .:....=;==+<; You should have received a copy of the GNU +  -_. . .   )=.  = Library General Public License along with +    --        :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#include "networkapplet.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +IfaceUpDownButton::IfaceUpDownButton( QWidget* parent, const char* name ) + :QToolButton( parent, name ) +{ + _iface = ONetwork::instance()->interface( name ); + assert( _iface ); + setToggleButton( true ); + //setAutoRaise( true ); + setOnIconSet( QIconSet( Resource::loadPixmap( "up" ) ) ); + setOffIconSet( QIconSet( Resource::loadPixmap( "down" ) ) ); + setOn( _iface->isUp() ); + //setFixedWidth( 16 ); + connect( this, SIGNAL( clicked() ), this, SLOT( clicked() ) ); +} + + +IfaceUpDownButton::~IfaceUpDownButton() +{ +} + + +void IfaceUpDownButton::clicked() +{ + _iface->setUp( isOn() ); + setOn( _iface->isUp() ); // it might not have worked... + repaint(); +} + + +IfaceIPAddress::IfaceIPAddress( QWidget* parent, const char* name ) + :QLineEdit( parent, name ) +{ + setFont( QFont( "fixed" ) ); + _iface = ONetwork::instance()->interface( name ); + setFixedWidth( 105 ); + setText( _iface->ipV4Address() ); + connect( this, SIGNAL( returnPressed() ), this, SLOT( returnPressed() ) ); +} + + +IfaceIPAddress::~IfaceIPAddress() +{ +} + + +void IfaceIPAddress::returnPressed() +{ + QHostAddress a; + a.setAddress( text() ); + QHostAddress mask; + mask.setAddress( _iface->ipV4Netmask() ); // setIPV4Address destroys the netmask... + _iface->setIPV4Address( a ); + _iface->setIPV4Netmask( mask ); // recover the old netmask + setText( _iface->ipV4Address() ); + repaint(); +} + + +NetworkAppletControl::NetworkAppletControl( OTaskbarApplet* parent, const char* name ) + :QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), l(0) +{ + setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); + l = new QVBoxLayout( this, 4, 2 ); +} + + +void NetworkAppletControl::build() +{ + ONetwork::InterfaceIterator it = ONetwork::instance()->iterator(); + while ( it.current() ) + { + QHBoxLayout* h = new QHBoxLayout( l ); + QLabel* symbol = new QLabel( this ); + symbol->setPixmap( Resource::loadPixmap( guessDevice( it.current() ) ) ); + h->addWidget( symbol ); + symbol->show(); + + QLabel* name = new QLabel( it.current()->name(), this ); + name->setFixedWidth( 35 ); + h->addWidget( name ); + name->show(); + + IfaceIPAddress* ip = new IfaceIPAddress( this, it.current()->name() ); + h->addWidget( ip ); + ip->show(); + + IfaceUpDownButton* tb = new IfaceUpDownButton( this, it.current()->name() ); + tb->show(); + + h->addWidget( tb ); + + ++it; + } +} + + +NetworkAppletControl::~NetworkAppletControl() +{ +} + + +QString NetworkAppletControl::guessDevice( ONetworkInterface* iface ) +{ + if ( iface->isWireless() ) + return "networksettings/wlan"; + if ( iface->isLoopback() ) + return "networksettings/lo"; + if ( QString( iface->name() ).contains( "usb" ) ) + return "networksettings/usb"; + if ( QString( iface->name() ).contains( "ir" ) ) + return "networksettings/ir"; + + //TODO: Insert neat symbol and check for tunnel devices + + return "networksettings/lan"; + +} + + +void NetworkAppletControl::showEvent( QShowEvent* e ) +{ + qDebug( "showEvent" ); + build(); + QWidget::showEvent( e ); +} + + +void NetworkAppletControl::hideEvent( QHideEvent* e ) +{ + qDebug( "hideEvent" ); + QWidget::hideEvent( e ); + + delete l; + + // delete all child widgets from this frame + QObjectList* list = const_cast( children() ); + QObjectListIt it(*list); + QObject* obj; + while ( (obj=it.current()) ) + { + ++it; + delete obj; + } + + list = const_cast( children() ); + if ( list ) + qWarning( "D'oh! We still have %d children...", list->count() ); + + // renew layout + l = new QVBoxLayout( this, 4, 2 ); + resize( 0, 0 ); +} + + +QSize NetworkAppletControl::sizeHint() const +{ + ONetwork::instance()->synchronize(); // rebuild interface database + qDebug( "sizeHint (#ifaces=%d)", ONetwork::instance()->count() ); + return QSize( 14+35+105+14 + 8, ONetwork::instance()->count() * 26 ); +} + + +NetworkApplet::NetworkApplet( QWidget *parent, const char *name ) + :OTaskbarApplet( parent, name ) +{ + _control = new NetworkAppletControl( this, "control" ); +} + + +NetworkApplet::~NetworkApplet() +{ +} + + +int NetworkApplet::position() +{ + return 4; +} + + +void NetworkApplet::paintEvent( QPaintEvent* ) +{ + QPainter p(this); + p.drawPixmap(0, 2, Resource::loadPixmap( "networkapplet/network" ) ); +} + + +void NetworkApplet::mousePressEvent( QMouseEvent* ) +{ + if ( !_control->isVisible() ) + { + popup( _control ); + } + else + { + _control->hide(); + } +} + + +Q_EXPORT_INTERFACE() +{ + Q_CREATE_INSTANCE( OTaskbarAppletWrapper ); +} + diff --git a/noncore/applets/networkapplet/networkapplet.h b/noncore/applets/networkapplet/networkapplet.h new file mode 100644 index 0000000..7b5fa97 --- a/dev/null +++ b/noncore/applets/networkapplet/networkapplet.h @@ -0,0 +1,112 @@ +/* +                 This file is part of the Opie Project + + =. (C) 2003 Michael 'Mickey' Lauer + .=l. +           .>+-= + _;:,     .>    :=|. This program is free software; you can +.> <`_,   >  .   <= redistribute it and/or modify it under +:`=1 )Y*s>-.--   : the terms of the GNU Library General Public +.="- .-=="i,     .._ License as published by the Free Software + - .   .-<_>     .<> Foundation; either version 2 of the License, +     ._= =}       : or (at your option) any later version. +    .%`+i>       _;_. +    .i_,=:_.      -`: PARTICULAR PURPOSE. See the GNU +..}^=.=       =       ; Library General Public License for more +++=   -.     .`     .: details. + :     =  ...= . :.=- + -.   .:....=;==+<; You should have received a copy of the GNU +  -_. . .   )=.  = Library General Public License along with +    --        :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#ifndef NETWORKAPPLET_H +#define NETWORKAPPLET_H + +#include +#include +#include +#include +#include + +class ONetworkInterface; +class QShowEvent; +class QHideEvent; +class QVBoxLayout; + +class IfaceUpDownButton : public QToolButton +{ + Q_OBJECT + + public: + IfaceUpDownButton( QWidget* parent, const char* name ); + virtual ~IfaceUpDownButton(); + + public slots: + virtual void clicked(); + + private: + ONetworkInterface* _iface; +}; + + +class IfaceIPAddress : public QLineEdit +{ + Q_OBJECT + + public: + IfaceIPAddress( QWidget* parent, const char* name ); + virtual ~IfaceIPAddress(); + + public slots: + virtual void returnPressed(); + + private: + ONetworkInterface* _iface; +}; + +class NetworkAppletControl : public QFrame +{ + public: + NetworkAppletControl( OTaskbarApplet* parent, const char* name = 0 ); + ~NetworkAppletControl(); + + virtual QSize sizeHint() const; + + protected: + virtual void showEvent( QShowEvent* ); + virtual void hideEvent( QHideEvent* ); + QString guessDevice( ONetworkInterface* iface ); + void build(); + + private: + QVBoxLayout* l; + +}; + + +class NetworkApplet : public OTaskbarApplet +{ + public: + NetworkApplet( QWidget* parent = 0, const char* name = 0 ); + ~NetworkApplet(); + + static int position(); + protected: + virtual void paintEvent( QPaintEvent* ); + virtual void mousePressEvent( QMouseEvent* ); + + private: + NetworkAppletControl* _control; +}; + +#endif + diff --git a/noncore/applets/networkapplet/networkapplet.pro b/noncore/applets/networkapplet/networkapplet.pro new file mode 100644 index 0000000..ec58455 --- a/dev/null +++ b/noncore/applets/networkapplet/networkapplet.pro @@ -0,0 +1,15 @@ +TEMPLATE = lib +CONFIG += qt warn_on release +HEADERS = networkapplet.h +SOURCES = networkapplet.cpp +TARGET = networkapplet +DESTDIR = $(OPIEDIR)/plugins/applets +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include +LIBS += -lqpe -lopiecore2 -lopieui2 -lopienet2 +VERSION = 0.1.0 +MOC_DIR = moc +OBJECTS_DIR = obj + + +include ( $(OPIEDIR)/include.pro ) diff --git a/noncore/applets/networkapplet/opie-networkapplet.control b/noncore/applets/networkapplet/opie-networkapplet.control new file mode 100644 index 0000000..f3d1ae7 --- a/dev/null +++ b/noncore/applets/networkapplet/opie-networkapplet.control @@ -0,0 +1,9 @@ +Files: plugins/applets/libnetworkapplet.so* +Priority: optional +Section: opie/system +Maintainer: Michael 'Mickey' Lauer +Architecture: arm +Version: $QPE_VERSION-$SUB_VERSION +Depends: opie-base, libopie2 (1.8.1), opie-networksettings +Description: Network Applet + A taskbar applet for controlling network interfaces diff --git a/noncore/applets/networkapplet/opie-networkapplet.postinst b/noncore/applets/networkapplet/opie-networkapplet.postinst new file mode 100755 index 0000000..a549c30 --- a/dev/null +++ b/noncore/applets/networkapplet/opie-networkapplet.postinst @@ -0,0 +1,6 @@ +#!/bin/sh +if pidof -s qpe >/dev/null; then + /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()" +else + exit 0 +fi diff --git a/noncore/applets/networkapplet/opie-networkapplet.postrm b/noncore/applets/networkapplet/opie-networkapplet.postrm new file mode 100755 index 0000000..ba76ffa --- a/dev/null +++ b/noncore/applets/networkapplet/opie-networkapplet.postrm @@ -0,0 +1,2 @@ +#!/bin/sh +/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()" -- cgit v0.9.0.2