summaryrefslogtreecommitdiff
authorharlekin <harlekin>2003-03-26 18:23:57 (UTC)
committer harlekin <harlekin>2003-03-26 18:23:57 (UTC)
commit8c1acc27882a79ea9f1ee9b9be708b9bbab052ba (patch) (side-by-side diff)
treeb906f762e28da948eaaa3ea0df5c81fdd9d41755
parent88a93db37e001dc02f9edddf81919266fde0173c (diff)
downloadopie-8c1acc27882a79ea9f1ee9b9be708b9bbab052ba.zip
opie-8c1acc27882a79ea9f1ee9b9be708b9bbab052ba.tar.gz
opie-8c1acc27882a79ea9f1ee9b9be708b9bbab052ba.tar.bz2
also activate discovery if not allready running - makes beaming with s45 easier
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/applets/irdaapplet/irda.cpp14
-rw-r--r--core/applets/irdaapplet/irda.h1
2 files changed, 13 insertions, 2 deletions
diff --git a/core/applets/irdaapplet/irda.cpp b/core/applets/irdaapplet/irda.cpp
index a5b4bfc..51c2ebf 100644
--- a/core/applets/irdaapplet/irda.cpp
+++ b/core/applets/irdaapplet/irda.cpp
@@ -13,96 +13,97 @@
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
**********************************************************************/
#include <qcopchannel_qws.h>
#include <qpe/qpeapplication.h>
#include <qpe/resource.h>
#include <qpe/ir.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/sound.h>
#include <qpainter.h>
#include <qfile.h>
#include <qtimer.h>
#include <qtextstream.h>
#include <qpopupmenu.h>
#include <unistd.h>
#include <net/if.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include "irda.h"
//===========================================================================
IrdaApplet::IrdaApplet ( QWidget *parent, const char *name )
: QWidget ( parent, name )
{
setFixedHeight ( 18 );
setFixedWidth ( 14 );
m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP );
m_irdaOnPixmap = Resource::loadPixmap( "irdaapplet/irdaon" );
m_irdaOffPixmap = Resource::loadPixmap( "irdaapplet/irdaoff" );
m_irdaDiscoveryOnPixmap = Resource::loadPixmap( "irdaapplet/magglass" );
m_receiveActivePixmap = Resource::loadPixmap( "irdaapplet/receive" );
m_irda_active = false;
m_irda_discovery_active = false;
m_receive_active = false;
m_receive_state_changed = false;
m_popup = 0;
m_wasOn = false;
+ m_wasDiscover = false;
QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this );
connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
this, SLOT(slotMessage(const QCString&, const QByteArray& ) ) );
}
void IrdaApplet::show()
{
QWidget::show ( );
startTimer ( 2000 );
}
IrdaApplet::~IrdaApplet()
{
if ( m_sockfd >= 0 )
::close ( m_sockfd );
}
void IrdaApplet::popup ( QString message, QString icon )
{
if ( !m_popup )
m_popup = new QPopupMenu ( this );
m_popup-> clear ( );
if ( icon. isEmpty ( ))
m_popup-> insertItem ( message, 0 );
else
m_popup-> insertItem ( QIconSet ( Resource::loadPixmap ( icon )), message, 0 );
QPoint p = mapToGlobal ( QPoint ( 0, 0 ));
QSize s = m_popup-> sizeHint ( );
m_popup-> popup ( QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ),
p. y ( ) - s. height ( )));
QTimer::singleShot ( 2000, this, SLOT( popupTimeout ( )));
}
void IrdaApplet::popupTimeout ( )
{
m_popup-> hide ( );
}
bool IrdaApplet::checkIrdaStatus ( )
{
struct ifreq ifr;
strcpy ( ifr. ifr_name, "irda0" );
@@ -284,64 +285,73 @@ void IrdaApplet::mousePressEvent ( QMouseEvent * )
}
delete menu;
}
void IrdaApplet::timerEvent ( QTimerEvent * )
{
bool oldactive = m_irda_active;
bool olddiscovery = m_irda_discovery_active;
bool receiveUpdate = false;
if ( m_receive_state_changed ) {
receiveUpdate = true;
m_receive_state_changed = false;
}
m_irda_active = checkIrdaStatus ( );
m_irda_discovery_active = checkIrdaDiscoveryStatus ( );
if ( m_irda_discovery_active )
showDiscovered ( );
if (( m_irda_active != oldactive ) || ( m_irda_discovery_active != olddiscovery ) || receiveUpdate )
update ( );
}
void IrdaApplet::paintEvent ( QPaintEvent * )
{
QPainter p ( this );
p. drawPixmap ( 0, 1, m_irda_active ? m_irdaOnPixmap : m_irdaOffPixmap );
if ( m_irda_discovery_active )
p. drawPixmap( 0, 1, m_irdaDiscoveryOnPixmap );
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)
+ m_wasDiscover = checkIrdaDiscoveryStatus();
+ if (!m_wasOn) {
setIrdaStatus( true );
+ }
+ if ( !m_wasDiscover ) {
+ setIrdaDiscoveryStatus ( true );
+ }
}else if ( str == "disableIrda()") {
- if (!m_wasOn)
+ if (!m_wasOn) {
setIrdaStatus( false );
+ }
+ if ( !m_wasDiscover ) {
+ setIrdaDiscoveryStatus ( 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 675f874..ec1d32c 100644
--- a/core/applets/irdaapplet/irda.h
+++ b/core/applets/irdaapplet/irda.h
@@ -24,52 +24,53 @@
class IrdaApplet : public QWidget
{
Q_OBJECT
public:
IrdaApplet( QWidget *parent = 0, const char *name = 0 );
~IrdaApplet();
virtual void show ( );
protected:
virtual void timerEvent ( QTimerEvent * );
virtual void mousePressEvent ( QMouseEvent * );
virtual void paintEvent ( QPaintEvent* );
private slots:
void popupTimeout ( );
void slotMessage( const QCString& , const QByteArray& );
private:
void popup( QString message, QString icon = QString::null );
bool checkIrdaStatus ( );
bool setIrdaStatus ( bool );
bool checkIrdaDiscoveryStatus ();
bool setIrdaDiscoveryStatus ( bool );
bool setIrdaReceiveStatus ( bool );
void showDiscovered();
private:
QPixmap m_irdaOnPixmap;
QPixmap m_irdaOffPixmap;
QPixmap m_irdaDiscoveryOnPixmap;
QPixmap m_receiveActivePixmap;
bool m_irda_active;
bool m_irda_discovery_active;
bool m_receive_active;
bool m_receive_state_changed;
QPopupMenu *m_popup;
int m_sockfd;
QMap <QString, QString> m_devices;
bool m_wasOn; // if IrDa was enabled
+ bool m_wasDiscover;
};
#endif // __OPIE_IRDA_APPLET_H__