author | harlekin <harlekin> | 2002-06-22 22:25:56 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2002-06-22 22:25:56 (UTC) |
commit | b6f6bab5e56f352a4f71dadb40530d6cdcaea3cc (patch) (side-by-side diff) | |
tree | b58cfac35b73d8a85944b42aad3344dee0a979a2 | |
parent | dc0bab1611d87c39d3729aa05d8b01f639120052 (diff) | |
download | opie-b6f6bab5e56f352a4f71dadb40530d6cdcaea3cc.zip opie-b6f6bab5e56f352a4f71dadb40530d6cdcaea3cc.tar.gz opie-b6f6bab5e56f352a4f71dadb40530d6cdcaea3cc.tar.bz2 |
nicer card inserted popup + cleanups
-rw-r--r-- | core/applets/cardmon/cardmon.cpp | 45 | ||||
-rw-r--r-- | core/applets/cardmon/cardmon.h | 7 |
2 files changed, 40 insertions, 12 deletions
diff --git a/core/applets/cardmon/cardmon.cpp b/core/applets/cardmon/cardmon.cpp index ac2aea2..3dd9f54 100644 --- a/core/applets/cardmon/cardmon.cpp +++ b/core/applets/cardmon/cardmon.cpp @@ -19,19 +19,19 @@ #include "cardmon.h" #include <qpe/resource.h> #include <qcopchannel_qws.h> #include <qpainter.h> #include <qmessagebox.h> -#include <qpopupmenu.h> #include <qfile.h> #include <qtextstream.h> +#include <qtimer.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) @@ -49,21 +49,49 @@ CardMonitor::CardMonitor( QWidget *parent ) : QWidget( parent ), QCopChannel* sdChannel = new QCopChannel( "QPE/Card", this ); connect( sdChannel, SIGNAL(received(const QCString &, const QByteArray &)), this, SLOT(cardMessage( const QCString &, const QByteArray &)) ); setFixedSize( pm.size() ); getStatusPcmcia(TRUE); getStatusSd(TRUE); repaint(FALSE); + popUpMenu = 0; + popUpMenuTimer = 0; } CardMonitor::~CardMonitor() { } +void CardMonitor::popUp(QString message) { + if ( ! popUpMenu ) { + popUpMenu = new QPopupMenu(); + } + popUpMenu->clear(); + popUpMenu->insertItem( message, 0 ); + + QPoint p = mapToGlobal ( QPoint ( 0, 0 )); + QSize s = popUpMenu->sizeHint ( ); + popUpMenu->popup( QPoint ( + p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), + p. y ( ) - s. height ( ) ), 0); + + if ( ! popUpMenuTimer ) { + popUpMenuTimer = new QTimer( this ); + connect( popUpMenuTimer, SIGNAL(timeout()), this, SLOT(popUpTimeout()) ); + } + timerEvent(0); + popUpMenuTimer->start( 2000 ); +} + +void CardMonitor::popUpTimeout() { + popUpMenu->hide(); + popUpMenuTimer->stop(); +} + void CardMonitor::mousePressEvent( QMouseEvent * ) { QPopupMenu *menu = new QPopupMenu(); QString cmd; int err=0; if ( cardInSd ) { menu->insertItem( tr("Eject SD/MMC card"), 0 ); } @@ -83,34 +111,31 @@ void CardMonitor::mousePressEvent( QMouseEvent * ) { p. y ( ) - s. height ( ) ), 0); if ( opt == 1 ) { cmd = "/sbin/cardctl eject 0"; err = system( (const char *) cmd ); if ( ( err == 127 ) || ( err < 0 ) ) { qDebug("Could not execute `/sbin/cardctl eject 0'! err=%d", err); - QMessageBox::warning( this, tr("CardMonitor"), tr("CF/PCMCIA card eject failed!"), - tr("&OK") ); + popUp( tr("CF/PCMCIA card eject failed!")); } } else if ( opt == 0 ) { cmd = "/etc/sdcontrol compeject"; err = system( (const char *) cmd ); if ( ( err != 0 ) ) { qDebug("Could not execute `/etc/sdcontrol comeject'! err=%d", err); - QMessageBox::warning( this, tr("CardMonitor"), tr("SD/MMC card eject failed!"), - tr("&OK") ); + popUp( tr("SD/MMC card eject failed!")); } } else if ( opt == 2 ) { cmd = "/sbin/cardctl eject 1"; err = system( (const char *) cmd ); if ( ( err == 127 ) || ( err < 0 ) ) { qDebug("Could not execute `/sbin/cardctl eject 1'! err=%d", err); - QMessageBox::warning( this, tr("CardMonitor"), tr("CF/PCMCIA card eject failed!"), - tr("&OK") ); + popUp( tr("CF/PCMCIA card eject failed!")); } } delete menu; } void CardMonitor::cardMessage( const QCString &msg, const QByteArray & ) { @@ -196,18 +221,17 @@ bool CardMonitor::getStatusPcmcia( int showPopUp = FALSE ) { if(cardWas0 != cardInPcmcia0 && cardWas1 != cardInPcmcia1) { text += "\n"; } if(cardWas1 != cardInPcmcia1) { if(cardInPcmcia1) { text += tr("New card: "); } else { text += tr("Ejected: "); } text += cardInPcmcia1Name; } - QMessageBox::warning( this, tr("CardMonitor"), text, - tr("&OK") ); + popUp( text ); } f.close(); return ((cardWas0 == cardInPcmcia0 || cardWas1 == cardInPcmcia1) ? FALSE : TRUE); } @@ -228,18 +252,17 @@ bool CardMonitor::getStatusSd( int showPopUp = FALSE ) { } } endmntent( mntfp ); } if(!showPopUp && cardWas != cardInSd) { QString text = ""; if(cardInSd) { text += "SD Inserted"; } else { text += "SD Removed"; } - QMessageBox::warning( this, tr("CardMonitor"), text, - tr("&OK") ); + popUp( text ); } #else #error "Not on Linux" #endif return ((cardWas == cardInSd) ? FALSE : TRUE); } diff --git a/core/applets/cardmon/cardmon.h b/core/applets/cardmon/cardmon.h index f9e3819..34b8d95 100644 --- a/core/applets/cardmon/cardmon.h +++ b/core/applets/cardmon/cardmon.h @@ -16,38 +16,43 @@ * * ***************************************************************************/ #ifndef CARDMON_H #define CARDMON_H #include <qwidget.h> #include <qpixmap.h> +#include <qpopupmenu.h> +#include <qtimer.h> class CardMonitor : public QWidget { Q_OBJECT public: CardMonitor( QWidget *parent = 0 ); ~CardMonitor(); bool getStatusPcmcia( int showPopUp = FALSE ); bool getStatusSd( int showPopUp = FALSE ); private slots: void cardMessage( const QCString &msg, const QByteArray & ); + void popUpTimeout(); protected: void paintEvent( QPaintEvent* ); void mousePressEvent( QMouseEvent * ); private: QPixmap pm; + QPopupMenu *popUpMenu; + QTimer *popUpMenuTimer; // pcmcia socket 0 bool cardInPcmcia0; QString cardInPcmcia0Name; // pcmcia socket 1 bool cardInPcmcia1; QString cardInPcmcia1Name; bool cardInSd; void iconShow(); - + void popUp(QString message); }; #endif |