-rw-r--r-- | core/applets/irdaapplet/irda.cpp | 76 | ||||
-rw-r--r-- | core/applets/irdaapplet/irda.h | 17 |
2 files changed, 65 insertions, 28 deletions
diff --git a/core/applets/irdaapplet/irda.cpp b/core/applets/irdaapplet/irda.cpp index c3ddff2..84c656f 100644 --- a/core/applets/irdaapplet/irda.cpp +++ b/core/applets/irdaapplet/irda.cpp @@ -4,2 +4,3 @@ ** Robert Griebl <sandman@handhelds.org> +** Holger Freyther <zecke@handhelds.org> QCOP Interface ** @@ -15,2 +16,4 @@ +#include <qcopchannel_qws.h> + #include <qpe/qpeapplication.h> @@ -43,5 +46,5 @@ IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) setFixedWidth ( 14 ); - + m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ); - + m_irdaOnPixmap = Resource::loadPixmap( "irdaapplet/irdaon" ); @@ -50,3 +53,3 @@ IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) m_receiveActivePixmap = Resource::loadPixmap( "irdaapplet/receive" ); - + m_irda_active = false; @@ -56,2 +59,7 @@ IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) m_popup = 0; + m_wasOn = false; + + QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this ); + connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ), + this, SLOT(slotMessage(const QCString&, const QByteArray& ) ) ); } @@ -72,3 +80,3 @@ void IrdaApplet::popup ( QString message, QString icon ) { - if ( !m_popup ) + if ( !m_popup ) m_popup = new QPopupMenu ( this ); @@ -76,6 +84,6 @@ void IrdaApplet::popup ( QString message, QString icon ) m_popup-> clear ( ); - - if ( icon. isEmpty ( )) + + if ( icon. isEmpty ( )) m_popup-> insertItem ( message, 0 ); - else + else m_popup-> insertItem ( QIconSet ( Resource::loadPixmap ( icon )), message, 0 ); @@ -149,3 +157,3 @@ bool IrdaApplet::setIrdaDiscoveryStatus ( bool d ) if ( discovery. open ( IO_WriteOnly | IO_Raw )) { - discovery.putch ( d ? '1' : '0' ); + discovery.putch ( d ? '1' : '0' ); return true; @@ -160,6 +168,6 @@ bool IrdaApplet::setIrdaReceiveStatus ( bool d ) e << ( d ? 1 : 0 ); - + m_receive_active = d; m_receive_state_changed = true; - + return true; @@ -180,3 +188,3 @@ void IrdaApplet::showDiscovered ( ) QString deviceAddr; - + // since it is /proc we _must_ use QTextStream @@ -191,3 +199,3 @@ void IrdaApplet::showDiscovered ( ) const QString &line = *lit; - + if ( line. startsWith ( "nickname:" )) { @@ -209,3 +217,3 @@ void IrdaApplet::showDiscovered ( ) // qDebug("IrdaMon: delete " + it.currentKey() + "=" + *devicesAvailable[it.currentKey()] + "?"); - + if ( it. data ( ). left ( 3 ) == "+++" ) { @@ -213,3 +221,3 @@ void IrdaApplet::showDiscovered ( ) snd_lost. play ( ); - + QMap <QString, QString>::Iterator tmp = it; @@ -218,3 +226,3 @@ void IrdaApplet::showDiscovered ( ) it = tmp; - + qcopsend = true; @@ -227,3 +235,3 @@ void IrdaApplet::showDiscovered ( ) e << ( m_devices. count ( ) > 0 ); - // } + // } } @@ -261,3 +269,3 @@ void IrdaApplet::mousePressEvent ( QMouseEvent * ) p = QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) - s. height ( )); - + switch ( menu-> exec ( p )) { @@ -276,3 +284,3 @@ void IrdaApplet::mousePressEvent ( QMouseEvent * ) } - + delete menu; @@ -294,6 +302,6 @@ void IrdaApplet::timerEvent ( QTimerEvent * ) - if ( m_irda_discovery_active ) + if ( m_irda_discovery_active ) showDiscovered ( ); - if (( m_irda_active != oldactive ) || ( m_irda_discovery_active != olddiscovery ) || receiveUpdate ) + if (( m_irda_active != oldactive ) || ( m_irda_discovery_active != olddiscovery ) || receiveUpdate ) update ( ); @@ -310,4 +318,30 @@ void IrdaApplet::paintEvent ( QPaintEvent * ) - if ( m_receive_active ) + if ( m_receive_active ) p. drawPixmap( 0, 1, m_receiveActivePixmap ); } +/* + * We know 3 calls + * a) enable + * b) disable + * a and b will temp enable the IrDa device and disable will disable it again if it wasn't on + * c) listDevices: We will return a list of known devices + */ +void IrdaApplet::slotMessage( const QCString& str, const QByteArray& ar ) { + if ( str == "enableIrda()") { + m_wasOn = checkIrdaStatus(); + if (!m_wasOn) + setIrdaStatus( true ); + }else if ( str == "disableIrda()") { + if (!m_wasOn) + setIrdaStatus( false ); + }else if ( str == "listDevices()") { + QCopEnvelope e("QPE/IrDaAppletBack", "devices(QStringList)"); + + QStringList list; + QMap<QString, QString>::Iterator it; + for (it = m_devices.begin(); it != m_devices.end(); ++it ) + list << (*it); + + e << list; + } +} diff --git a/core/applets/irdaapplet/irda.h b/core/applets/irdaapplet/irda.h index 1b5faa6..675f874 100644 --- a/core/applets/irdaapplet/irda.h +++ b/core/applets/irdaapplet/irda.h @@ -26,3 +26,3 @@ class IrdaApplet : public QWidget Q_OBJECT - + public: @@ -37,5 +37,6 @@ protected: virtual void paintEvent ( QPaintEvent* ); - + private slots: void popupTimeout ( ); + void slotMessage( const QCString& , const QByteArray& ); @@ -51,3 +52,3 @@ private: void showDiscovered(); - + private: @@ -57,4 +58,4 @@ private: QPixmap m_receiveActivePixmap; - - bool m_irda_active; + + bool m_irda_active; bool m_irda_discovery_active; @@ -62,3 +63,3 @@ private: bool m_receive_state_changed; - + QPopupMenu *m_popup; @@ -66,4 +67,6 @@ private: int m_sockfd; - + QMap <QString, QString> m_devices; + + bool m_wasOn; // if IrDa was enabled }; |