-rw-r--r-- | noncore/applets/pcmcia/configdialog.cpp | 10 | ||||
-rw-r--r-- | noncore/applets/pcmcia/pcmcia.cpp | 98 | ||||
-rw-r--r-- | noncore/applets/pcmcia/pcmcia.h | 5 |
3 files changed, 60 insertions, 53 deletions
diff --git a/noncore/applets/pcmcia/configdialog.cpp b/noncore/applets/pcmcia/configdialog.cpp index f5812ba..f94edde 100644 --- a/noncore/applets/pcmcia/configdialog.cpp +++ b/noncore/applets/pcmcia/configdialog.cpp @@ -127,46 +127,48 @@ ConfigDialog::~ConfigDialog() { } void ConfigDialog::writeConfigEntry( const OPcmciaSocket* card, const QString& key, const QString& value ) { OConfig cfg( "PCMCIA" ); cfg.setGroup( "Global" ); int nCards = cfg.readNumEntry( "nCards", 0 ); + QString cardName = card->productIdentity().join( " " ).stripWhiteSpace(); QString action; for ( int i = 0; i < nCards; ++i ) { QString cardSection = QString( "Card_%1" ).arg( i ); cfg.setGroup( cardSection ); QString name = cfg.readEntry( "name" ); - odebug << "comparing card '" << card->name() << "' with known card '" << name << "'" << oendl; - if ( card->name() == name ) + odebug << "comparing card '" << cardName << "' with known card '" << name << "'" << oendl; + if ( cardName == name ) { cfg.writeEntry( key, value ); break; } } } QString ConfigDialog::readConfigEntry( const OPcmciaSocket* card, const QString& key, const QString& defaultValue ) { OConfig cfg( "PCMCIA" ); cfg.setGroup( "Global" ); int nCards = cfg.readNumEntry( "nCards", 0 ); + QString cardName = card->productIdentity().join( " " ).stripWhiteSpace(); QString value; for ( int i = 0; i < nCards; ++i ) { QString cardSection = QString( "Card_%1" ).arg( i ); cfg.setGroup( cardSection ); QString name = cfg.readEntry( "name" ); - odebug << "comparing card '" << card->name() << "' with known card '" << name << "'" << oendl; - if ( card->name() == name ) + odebug << "comparing card '" << cardName << "' with known card '" << name << "'" << oendl; + if ( cardName == name ) { value = cfg.readEntry( key, defaultValue ); break; } } return value; } diff --git a/noncore/applets/pcmcia/pcmcia.cpp b/noncore/applets/pcmcia/pcmcia.cpp index e435f61..af23f58 100644 --- a/noncore/applets/pcmcia/pcmcia.cpp +++ b/noncore/applets/pcmcia/pcmcia.cpp @@ -61,17 +61,17 @@ using namespace Opie::Ui; #include <string.h> #include <errno.h> #include <fcntl.h> #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) #include <sys/vfs.h> #include <mntent.h> #endif -PcmciaManager::PcmciaManager( QWidget * parent ) : QWidget( parent ) +PcmciaManager::PcmciaManager( QWidget * parent ) : QWidget( parent ), popupMenu( 0 ) { QCopChannel * pcmciaChannel = new QCopChannel( "QPE/Card", this ); connect( pcmciaChannel, SIGNAL( received(const QCString&,const QByteArray&) ), this, SLOT( cardMessage(const QCString&,const QByteArray&) ) ); setFocusPolicy( NoFocus ); setFixedWidth ( AppLnk::smallIconSize() ); @@ -91,36 +91,37 @@ PcmciaManager::~PcmciaManager() void PcmciaManager::handleSystemChannel( const QCString&msg, const QByteArray& ) { if ( msg == "returnFromSuspend()" ) { if ( !OPcmciaSystem::instance()->cardCount() ) return; OPcmciaSystem* sys = OPcmciaSystem::instance(); OPcmciaSystem::CardIterator it = sys->iterator(); - OPcmciaSocket* theCard = 0; while ( it.current() ) { - if ( it.current()->isEmpty() ) + if ( !it.current()->isEmpty() ) { - executeResumeAction( theCard ); + executeAction( it.current(), "resume" ); } ++it; } } } void PcmciaManager::popUp( QString message, QString icon ) { - if ( !popupMenu ) { + if ( !popupMenu) + { popupMenu = new QPopupMenu( this ); + popupMenu->setFocusPolicy( QWidget::NoFocus ); } - popupMenu->clear(); + if ( icon.isEmpty() ) { popupMenu->insertItem( message, 0 ); } else { popupMenu->insertItem( QIconSet( Opie::Core::OResource::loadPixmap( icon, Opie::Core::OResource::SmallIcon ) ), message, 0 ); } QPoint p = mapToGlobal( QPoint( 0, 0 ) ); @@ -133,24 +134,26 @@ void PcmciaManager::popUp( QString message, QString icon ) void PcmciaManager::popupTimeout() { popupMenu->hide(); } enum { EJECT, INSERT, SUSPEND, RESUME, RESET, CONFIGURE }; +static const char* actionText[] = { "eject", "insert", "suspend", "resum", "resett", "configur" }; void PcmciaManager::mousePressEvent( QMouseEvent* ) { QPopupMenu* menu = new QPopupMenu( this ); QStringList cmd; bool execute = true; OPcmciaSystem* sys = OPcmciaSystem::instance(); + sys->synchronize(); OPcmciaSystem::CardIterator it = sys->iterator(); if ( !sys->count() ) return; int i = 0; while ( it.current() ) { QPopupMenu* submenu = new QPopupMenu( menu ); submenu->insertItem( "&Eject", EJECT+i*100 ); @@ -205,28 +208,28 @@ void PcmciaManager::cardMessage( const QCString & msg, const QByteArray & ) { odebug << "pcmcia: skipping empty card in socket " << it.current()->number() << oendl; ++it; continue; } else { theCard = it.current(); - QString cardName = theCard->productIdentity().join( " " ); + QString cardName = theCard->productIdentity().join( " " ).stripWhiteSpace(); for ( int i = 0; i < nCards; ++i ) { QString cardSection = QString( "Card_%1" ).arg( i ); cfg.setGroup( cardSection ); QString name = cfg.readEntry( "name" ); odebug << "pcmcia: comparing card '" << cardName << "' with known card '" << name << "'" << oendl; if ( cardName == name ) { newCard = false; odebug << "pcmcia: we have seen this card before" << oendl; - executeInsertAction( theCard ); + executeAction( theCard, "insert" ); break; } } if ( !newCard ) ++it; else break; } } if ( newCard ) { @@ -248,17 +251,17 @@ void PcmciaManager::cardMessage( const QCString & msg, const QByteArray & ) cfg.setGroup( QString( "Card_%1" ).arg( nCards ) ); cfg.writeEntry( "name", newCardName ); cfg.writeEntry( "insertAction", insertAction ); cfg.writeEntry( "resumeAction", resumeAction ); cfg.setGroup( "Global" ); cfg.writeEntry( "nCards", nCards+1 ); cfg.write(); - QFile confFile( QString( "/etc/pcmcia/%1" ).arg( conf ) ); + QFile confFile( conf ); if ( confFile.open( IO_ReadWrite | IO_Append ) ) { QString entryCard = QString( "card \"%1\"" ).arg( newCardName ); QString entryVersion( " version " ); for ( QStringList::Iterator it = theCard->productIdentity().begin(); it != theCard->productIdentity().end(); ++it ) { entryVersion += QString( "\"%1\", " ).arg( *it ); } @@ -267,53 +270,39 @@ void PcmciaManager::cardMessage( const QCString & msg, const QByteArray & ) odebug << "pcmcia: writing entry...:" << entry << oendl; confFile.writeBlock( (const char*) entry, entry.length() ); Global::statusMessage( "restarting pcmcia services..." ); ::system( "/etc/init.d/pcmcia restart" ); } else { - owarn << "pcmcia: couldn't write binding to '" << conf << "'." << oendl; + owarn << "pcmcia: couldn't write binding to '" << conf << "' ( " << strerror( errno ) << " )." << oendl; } } else { odebug << "pcmcia: card has not been configured this time. leaving as unknown card" << oendl; } } else { odebug << "pcmcia: user doesn't want to configure " << newCardName << " now." << oendl; } } else // it's an already configured card { - QString insertAction = ConfigDialog::preferredAction( theCard, "insert" ); - odebug << "pcmcia: card has been previously configured" << oendl; - odebug << "pcmcia: TODO: need to perform action'" << insertAction << "' now... sorry, not yet implemented..." << oendl; + odebug << "pcmcia: doing nothing... why do we come here?" << oendl; } - repaint( true ); } - void PcmciaManager::paintEvent( QPaintEvent * ) { QPainter p( this ); - odebug << "sockets = " << OPcmciaSystem::instance()->count() << ", cards = " << OPcmciaSystem::instance()->cardCount() << oendl; - - if ( OPcmciaSystem::instance()->cardCount() ) - { - p.drawPixmap( 0, 0, pm ); - show(); - } - else - { - hide(); - } + p.drawPixmap( 0, 0, pm ); } int PcmciaManager::position() { return 7; } void PcmciaManager::execCommand( const QStringList &strList ) @@ -328,33 +317,40 @@ void PcmciaManager::userCardAction( int action ) int what = action % 100; bool success = false; switch ( what ) { case CONFIGURE: { QString insertAction; QString resumeAction; QString driver; QString conf; - bool result = configure( OPcmciaSystem::instance()->socket( socket ), insertAction, resumeAction, driver, conf ); - success = true; - break; + configure( OPcmciaSystem::instance()->socket( socket ), insertAction, resumeAction, driver, conf ); + return; } - case EJECT: success = OPcmciaSystem::instance()->socket( socket )->eject(); break; - case INSERT: success = OPcmciaSystem::instance()->socket( socket )->insert(); break; - case SUSPEND: success = OPcmciaSystem::instance()->socket( socket )->suspend(); break; - case RESUME: success = OPcmciaSystem::instance()->socket( socket )->resume(); break; - case RESET: success = OPcmciaSystem::instance()->socket( socket )->reset(); break; - default: odebug << "pcmcia: not yet implemented" << oendl; + case EJECT: success = OPcmciaSystem::instance()->socket( socket )->eject(); + break; + case INSERT: success = OPcmciaSystem::instance()->socket( socket )->insert(); + break; + case SUSPEND: success = OPcmciaSystem::instance()->socket( socket )->suspend(); + break; + case RESUME: success = OPcmciaSystem::instance()->socket( socket )->resume(); + break; + case RESET: success = OPcmciaSystem::instance()->socket( socket )->reset(); + break; + default: odebug << "pcmcia: not yet implemented" << oendl; } - if ( !success ) + if ( success ) { - owarn << "pcmcia: couldn't perform user action (" << strerror( errno ) << ")" << oendl; + popUp( tr( "Successfully %1ed card in socket #%2" ).arg( actionText[action] ).arg( socket ) ); + } + else + { + popUp( tr( "Error while %1ing card in socket #%2" ).arg( actionText[action] ).arg( socket ) ); } - } bool PcmciaManager::configure( OPcmciaSocket* card, QString& insertAction, QString& resumeAction, QString& driver, QString& conf ) { configuring = true; ConfigDialog dialog( card, qApp->desktop() ); int configresult = QPEApplication::execDialog( &dialog, false ); configuring = false; @@ -364,21 +360,31 @@ bool PcmciaManager::configure( OPcmciaSocket* card, QString& insertAction, QStri insertAction = dialog.cbInsertAction->currentText(); resumeAction = dialog.cbResumeAction->currentText(); driver = dialog.cbBindTo->currentText(); conf = dialog.bindEntries[driver]; } return configresult; } -void PcmciaManager::executeInsertAction( Opie::Core::OPcmciaSocket* card ) -{ - odebug << "pcmcia: execute insert action" << oendl; -} - -void PcmciaManager::executeResumeAction( Opie::Core::OPcmciaSocket* card ) +void PcmciaManager::executeAction( Opie::Core::OPcmciaSocket* card, const QString& type ) { - odebug << "pcmcia: execute resume action" << oendl; + odebug << "pcmcia: performing " << type << " action ..." << oendl; + QString theAction = ConfigDialog::preferredAction( card, type ); + int intAction = card->number() * 100; + if ( theAction == "activate" ) ; + else if ( theAction == "eject" ) intAction += EJECT; + else if ( theAction == "suspend" ) intAction += SUSPEND; + else if ( theAction == "prompt for" ) + { + odebug << "pcmcia: sorry, not 'prompt for' is not yet implemented!" << oendl; + return; + } + else + { + owarn << "pcmcia: action '" << theAction << "' not known. Huh?" << oendl; + return; + } + userCardAction( intAction ); } - EXPORT_OPIE_APPLET_v1( PcmciaManager ) diff --git a/noncore/applets/pcmcia/pcmcia.h b/noncore/applets/pcmcia/pcmcia.h index 6567cd7..de7d6bf 100644 --- a/noncore/applets/pcmcia/pcmcia.h +++ b/noncore/applets/pcmcia/pcmcia.h @@ -52,19 +52,18 @@ class PcmciaManager : public QWidget protected: void paintEvent( QPaintEvent* ); void mousePressEvent( QMouseEvent * ); private: bool configure( Opie::Core::OPcmciaSocket*, QString&, QString&, QString&, QString& ); void execCommand( const QStringList &command ); - void executeInsertAction( Opie::Core::OPcmciaSocket* ); - void executeResumeAction( Opie::Core::OPcmciaSocket* ); - void popUp(QString message, QString icon = QString::null ); + void executeAction( Opie::Core::OPcmciaSocket*, const QString& ); + void popUp( QString message, QString icon = QString::null ); private: bool configuring; int commandOrig; QPixmap pm; QPopupMenu *popupMenu; }; |