author | dwmw2 <dwmw2> | 2002-04-01 21:41:04 (UTC) |
---|---|---|
committer | dwmw2 <dwmw2> | 2002-04-01 21:41:04 (UTC) |
commit | 22183e22f3d1776c6c73219bd1a07ddf6bb8d670 (patch) (side-by-side diff) | |
tree | 82712ae6199ba31dbf826d2ded63e866a05373e6 /core/applets/irdaapplet | |
parent | 5c8abf28f5c839d1af9565b58b9f01aa54378eab (diff) | |
download | opie-22183e22f3d1776c6c73219bd1a07ddf6bb8d670.zip opie-22183e22f3d1776c6c73219bd1a07ddf6bb8d670.tar.gz opie-22183e22f3d1776c6c73219bd1a07ddf6bb8d670.tar.bz2 |
Import basic applet to allow switching IrDA on and off.
-rw-r--r-- | core/applets/irdaapplet/.cvsignore | 3 | ||||
-rw-r--r-- | core/applets/irdaapplet/irda.cpp | 159 | ||||
-rw-r--r-- | core/applets/irdaapplet/irda.h | 57 | ||||
-rw-r--r-- | core/applets/irdaapplet/irdaapplet.pro | 11 | ||||
-rw-r--r-- | core/applets/irdaapplet/irdaappletimpl.cpp | 64 | ||||
-rw-r--r-- | core/applets/irdaapplet/irdaappletimpl.h | 44 | ||||
-rw-r--r-- | core/applets/irdaapplet/opie-irdaapplet.control | 9 |
7 files changed, 347 insertions, 0 deletions
diff --git a/core/applets/irdaapplet/.cvsignore b/core/applets/irdaapplet/.cvsignore new file mode 100644 index 0000000..2c33e73 --- a/dev/null +++ b/core/applets/irdaapplet/.cvsignore @@ -0,0 +1,3 @@ +moc_* +*.moc +Makefile* diff --git a/core/applets/irdaapplet/irda.cpp b/core/applets/irdaapplet/irda.cpp new file mode 100644 index 0000000..2eff2a9 --- a/dev/null +++ b/core/applets/irdaapplet/irda.cpp @@ -0,0 +1,159 @@ +/********************************************************************** +** Copyright (C) 2002 David Woodhouse <dwmw2@infradead.org> +** Heavily based on volumeapplet, (C) 2002 L.J. Potter ljp@llornkcor.com +** All rights reserved. +** +** 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 "irda.h" +#include <qapplication.h> +#include <stdlib.h> + + +#include <qpe/resource.h> +#include <qpe/qpeapplication.h> +#include <qpe/timestring.h> +#include <qpe/resource.h> +#include <qpe/config.h> +#include <qpe/applnk.h> +#include <qpe/config.h> + +#include <qdir.h> +#include <qfileinfo.h> +#include <qpoint.h> +#include <qpushbutton.h> +#include <qpainter.h> +#include <qcombobox.h> +#include <qspinbox.h> +#include <qslider.h> +#include <qlayout.h> +#include <qframe.h> +#include <qpixmap.h> +#include <qstring.h> +#include <qfile.h> +#include <qtimer.h> +#include <qpopupmenu.h> + +#include <net/if.h> +#include <netinet/in.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/ioctl.h> + + +//=========================================================================== + +IrdaApplet::IrdaApplet( QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + setFixedHeight( 18 ); + setFixedWidth( 14 ); + sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); + irdaOnPixmap = Resource::loadPixmap( "irdaapplet/irdaon" ); + irdaOffPixmap = Resource::loadPixmap( "irdaapplet/irdaoff" ); + startTimer(5000); + timerEvent(NULL); +} + +IrdaApplet::~IrdaApplet() +{ + close(sockfd); +} + +int IrdaApplet::checkIrdaStatus() +{ + struct ifreq ifr; + + strcpy(ifr.ifr_name, "irda0"); + + if (ioctl(sockfd, SIOCGIFFLAGS, &ifr)) + return -1; + + return (ifr.ifr_flags & IFF_UP)?1:0; +} + +int IrdaApplet::setIrdaStatus(int c) +{ + struct ifreq ifr; + + strcpy(ifr.ifr_name, "irda0"); + + if (ioctl(sockfd, SIOCGIFFLAGS, &ifr)) + return -1; + + if (c) + ifr.ifr_flags |= IFF_UP; + else + ifr.ifr_flags &= ~IFF_UP; + + if (ioctl(sockfd, SIOCSIFFLAGS, &ifr)) + return -1; + + return 0; +} + +void IrdaApplet::mousePressEvent( QMouseEvent *) +{ + QPopupMenu *menu = new QPopupMenu(); + QString cmd; + int ret=0; + + /* Refresh active state */ + timerEvent(NULL); + +// menu->insertItem( tr("More..."), 2 ); + if (irdaactive) + menu->insertItem( tr("Disable IrDA"), 0 ); + else + menu->insertItem( tr("Enable IrDA"), 1 ); + + QPoint p = mapToGlobal( QPoint(1, -menu->sizeHint().height()-1) ); + ret = menu->exec(p, 1); + + qDebug("ret was %d\n", ret); + + switch(ret) { + case 0: + setIrdaStatus(0); + timerEvent(NULL); + break; + case 1: + setIrdaStatus(1); + timerEvent(NULL); + break; + case 2: + qDebug("FIXME: Bring up pretty menu...\n"); + // With 'discovery' button to enable/disable, + // and table of currently-detected devices. + } + +} + +void IrdaApplet::timerEvent( QTimerEvent * ) +{ + int oldactive = irdaactive; + + irdaactive = checkIrdaStatus(); + if (irdaactive != oldactive) + paintEvent(NULL); + +} + +void IrdaApplet::paintEvent( QPaintEvent* ) +{ + QPainter p(this); + qDebug("paint irda pixmap"); + + if (irdaactive > 0) + p.drawPixmap( 0, 1, irdaOnPixmap ); + else + p.drawPixmap( 0, 1, irdaOffPixmap ); +} diff --git a/core/applets/irdaapplet/irda.h b/core/applets/irdaapplet/irda.h new file mode 100644 index 0000000..d762ff3 --- a/dev/null +++ b/core/applets/irdaapplet/irda.h @@ -0,0 +1,57 @@ +/********************************************************************** +** Copyright (C) 2002 L.J. Potter ljp@llornkcor.com +** All rights reserved. +** +** 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 __SCREENSHOT_APPLET_H__ +#define __SCREENSHOT_APPLET_H__ + + + +#include <qwidget.h> +#include <qframe.h> +#include <qpixmap.h> +#include <qguardedptr.h> +#include <qtimer.h> + + +class IrdaApplet : public QWidget +{ + Q_OBJECT +public: + IrdaApplet( QWidget *parent = 0, const char *name=0 ); + ~IrdaApplet(); + +protected: + void timerEvent(QTimerEvent *te ); + +public slots: +private: + void mousePressEvent( QMouseEvent * ); + void paintEvent( QPaintEvent* ); + int checkIrdaStatus(); + int setIrdaStatus(int); + int sockfd; + +private: + QPixmap irdaOnPixmap; + QPixmap irdaOffPixmap; + int irdaactive; + +private slots: + + +}; + + +#endif // __SCREENSHOT_APPLET_H__ + diff --git a/core/applets/irdaapplet/irdaapplet.pro b/core/applets/irdaapplet/irdaapplet.pro new file mode 100644 index 0000000..c8f3fdc --- a/dev/null +++ b/core/applets/irdaapplet/irdaapplet.pro @@ -0,0 +1,11 @@ +TEMPLATE = lib +CONFIG += qt warn_on release +HEADERS = irda.h irdaappletimpl.h +SOURCES = irda.cpp irdaappletimpl.cpp +TARGET = irdaapplet +DESTDIR = ../../plugins/applets +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += ../$(OPIEDIR)/include +LIBS += -lqpe +VERSION = 1.0.0 + diff --git a/core/applets/irdaapplet/irdaappletimpl.cpp b/core/applets/irdaapplet/irdaappletimpl.cpp new file mode 100644 index 0000000..02443db --- a/dev/null +++ b/core/applets/irdaapplet/irdaappletimpl.cpp @@ -0,0 +1,64 @@ +/********************************************************************** +** 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 "irda.h" +#include "irdaappletimpl.h" + + +IrdaAppletImpl::IrdaAppletImpl() + : irda(0), ref(0) +{ +} + +IrdaAppletImpl::~IrdaAppletImpl() +{ + delete irda; +} + +QWidget *IrdaAppletImpl::applet( QWidget *parent ) +{ + if ( !irda ) + irda = new IrdaApplet( parent ); + return irda; +} + +int IrdaAppletImpl::position() const +{ + return 6; +} + +QRESULT IrdaAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ) +{ + *iface = 0; + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_TaskbarApplet ) + *iface = this; + + if ( *iface ) + (*iface)->addRef(); + return QS_OK; +} + +Q_EXPORT_INTERFACE() +{ + Q_CREATE_INSTANCE( IrdaAppletImpl ) +} + + diff --git a/core/applets/irdaapplet/irdaappletimpl.h b/core/applets/irdaapplet/irdaappletimpl.h new file mode 100644 index 0000000..abedb07 --- a/dev/null +++ b/core/applets/irdaapplet/irdaappletimpl.h @@ -0,0 +1,44 @@ +/********************************************************************** +** 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 SCREENSHOTAPPLETIMPL_H +#define SCREENSHOTAPPLETIMPL_H + +#include <qpe/taskbarappletinterface.h> + +class IrdaApplet; + +class IrdaAppletImpl : public TaskbarAppletInterface +{ +public: + IrdaAppletImpl(); + virtual ~IrdaAppletImpl(); + + QRESULT queryInterface( const QUuid&, QUnknownInterface** ); + Q_REFCOUNT + + virtual QWidget *applet( QWidget *parent ); + virtual int position() const; + +private: + IrdaApplet *irda; + ulong ref; +}; + +#endif diff --git a/core/applets/irdaapplet/opie-irdaapplet.control b/core/applets/irdaapplet/opie-irdaapplet.control new file mode 100644 index 0000000..d730554 --- a/dev/null +++ b/core/applets/irdaapplet/opie-irdaapplet.control @@ -0,0 +1,9 @@ +Files: plugins/applets/libirdaapplet.so* pics/irdaapplet/* +Priority: optional +Section: opie/system +Maintainer: David Woodhouse <dwmw2@infradead.org> +Architecture: arm +Version: $QPE_VERSION-$SUB_VERSION.1 +Depends: opie-base ($QPE_VERSION) +Description: Irda Applet + An IrDA taskbar applet for the Opie environment |