summaryrefslogtreecommitdiff
path: root/noncore/applets/pcmcia
authormickeyl <mickeyl>2005-05-21 14:33:55 (UTC)
committer mickeyl <mickeyl>2005-05-21 14:33:55 (UTC)
commit81a650dc44d3be986cbf8f60e7c7b21ef76d1b94 (patch) (side-by-side diff)
tree146576c950237445a6f3639ef5de8e9cf6214294 /noncore/applets/pcmcia
parentdfdc651b989550e30f2b72f535ce0cd3431fc9f4 (diff)
downloadopie-81a650dc44d3be986cbf8f60e7c7b21ef76d1b94.zip
opie-81a650dc44d3be986cbf8f60e7c7b21ef76d1b94.tar.gz
opie-81a650dc44d3be986cbf8f60e7c7b21ef76d1b94.tar.bz2
add pcmciaapplet. this applet will be a 'next-generation' cardmon applet allowing
not only to monitor PCMCIA/CF cards but also to configure cards, e.g. what Opie should do, when a certain card has been inserted.
Diffstat (limited to 'noncore/applets/pcmcia') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/pcmcia/.cvsignore9
-rw-r--r--noncore/applets/pcmcia/config.in4
-rw-r--r--noncore/applets/pcmcia/pcmcia.cpp249
-rw-r--r--noncore/applets/pcmcia/pcmcia.h65
-rw-r--r--noncore/applets/pcmcia/pcmcia.pro12
5 files changed, 339 insertions, 0 deletions
diff --git a/noncore/applets/pcmcia/.cvsignore b/noncore/applets/pcmcia/.cvsignore
new file mode 100644
index 0000000..d704947
--- a/dev/null
+++ b/noncore/applets/pcmcia/.cvsignore
@@ -0,0 +1,9 @@
+*moc
+*.~
+Makefile*
+moc_*
+opieobj
+obj
+moc_
+.moc
+.obj
diff --git a/noncore/applets/pcmcia/config.in b/noncore/applets/pcmcia/config.in
new file mode 100644
index 0000000..5f5af73
--- a/dev/null
+++ b/noncore/applets/pcmcia/config.in
@@ -0,0 +1,4 @@
+ config PCMCIA-APPLET
+ boolean "opie-pcmciaapplet (monitor and configure pcmcia/cf cards)"
+ default "y"
+ depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE
diff --git a/noncore/applets/pcmcia/pcmcia.cpp b/noncore/applets/pcmcia/pcmcia.cpp
new file mode 100644
index 0000000..5183572
--- a/dev/null
+++ b/noncore/applets/pcmcia/pcmcia.cpp
@@ -0,0 +1,249 @@
+/*
+                 This file is part of the Opie Project
+ =. (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de>
+ .=l.
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; Library General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = Library General Public License along with
+    --        :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#include "pcmcia.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
+#include <opie2/odevice.h>
+#include <opie2/oconfig.h>
+#include <opie2/oprocess.h>
+#include <opie2/opcmciasystem.h>
+#include <opie2/oresource.h>
+#include <opie2/otaskbarapplet.h>
+#include <qpe/applnk.h>
+#include <qpe/resource.h>
+using namespace Opie::Core;
+using namespace Opie::Ui;
+
+/* QT */
+#include <qcopchannel_qws.h>
+#include <qpainter.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qmessagebox.h>
+#include <qsound.h>
+#include <qtimer.h>
+
+/* STD */
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.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 )
+{
+ 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() );
+ setFixedHeight ( AppLnk::smallIconSize() );
+ pm = Opie::Core::OResource::loadPixmap( "cardmon/pcmcia", Opie::Core::OResource::SmallIcon );
+}
+
+
+PcmciaManager::~PcmciaManager()
+{
+}
+
+
+void PcmciaManager::popUp( QString message, QString icon )
+{
+ if ( !popupMenu ) {
+ popupMenu = new QPopupMenu( this );
+ }
+
+ 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 ) );
+ QSize s = popupMenu->sizeHint();
+ popupMenu->popup( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ),
+ p.y() - s.height() ), 0 );
+
+ QTimer::singleShot( 2000, this, SLOT( popupTimeout() ) );
+}
+
+
+void PcmciaManager::popupTimeout()
+{
+ popupMenu->hide();
+}
+
+
+void PcmciaManager::mousePressEvent( QMouseEvent* )
+{
+ QPopupMenu * menu = new QPopupMenu( this );
+ QStringList cmd;
+ bool execute = true;
+
+ OPcmciaSystem* sys = OPcmciaSystem::instance();
+ OPcmciaSystem::CardIterator it = sys->iterator();
+ if ( !sys->count() ) return;
+
+ int i = 0;
+ while ( it.current() )
+ {
+ menu->insertItem( tr( "Eject card %1: %2" ).arg( i++ ).arg( it.currentKey() ), 1 );
+ ++it;
+ }
+
+
+ /* insert items depending on number of cards etc.
+
+ if ( cardInSd ) {
+ menu->insertItem( QIconSet( Opie::Core::OResource::loadPixmap( "cardmon/ide", Opie::Core::OResource::SmallIcon ) ),
+ tr( "Eject SD/MMC card" ), 0 );
+ }
+
+
+
+ if ( cardInPcmcia0 ) {
+ menu->
+ insertItem( QIconSet
+ ( Opie::Core::OResource::loadPixmap( "cardmon/" + cardInPcmcia0Type, Opie::Core::OResource::SmallIcon ) ),
+ tr( "Eject card 0: %1" ).arg( cardInPcmcia0Name ), 1 );
+ }
+
+ if ( cardInPcmcia1 ) {
+ menu->
+ insertItem( QIconSet
+ ( Opie::Core::OResource::loadPixmap( "cardmon/" + cardInPcmcia1Type, Opie::Core::OResource::SmallIcon ) ),
+ tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 );
+ }
+ */
+
+ QPoint p = mapToGlobal( QPoint( 0, 0 ) );
+ QSize s = menu->sizeHint();
+ int opt = menu->exec( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), p.y() - s.height() ), 0 );
+ qDebug( "pcmcia: menu result = %d", opt );
+ delete menu;
+}
+
+
+void PcmciaManager::cardMessage( const QCString & msg, const QByteArray & )
+{
+ odebug << "PcmciaManager::cardMessage( '" << msg << "' )" << oendl;
+ if ( msg != "stabChanged()" ) return;
+
+ /* check if a previously unknown card has been inserted */
+ OPcmciaSystem::instance()->synchronize();
+
+ if ( !OPcmciaSystem::instance()->count() ) return;
+
+ OConfig cfg( "PCMCIA" );
+ cfg.setGroup( "Global" );
+ int nCards = cfg.readNumEntry( "nCards", 0 );
+
+ OPcmciaSystem* sys = OPcmciaSystem::instance();
+ OPcmciaSystem::CardIterator it = sys->iterator();
+
+ bool newCard = true;
+ while ( it.current() && newCard )
+ {
+ QString name = it.currentKey();
+ for ( int i = 0; i < nCards; ++i )
+ {
+ QString cardSection = QString( "Card_%1" ).arg( i );
+ cfg.setGroup( cardSection );
+ QString cardName = cfg.readEntry( "name" );
+ odebug << "comparing card '" << name << "' with known card '" << cardName << "'" << oendl;
+ if ( cardName == name )
+ {
+ newCard = false;
+ break;
+ }
+ }
+ if ( !newCard ) ++it; else break;
+ }
+ QString newCardName = it.currentKey();
+
+ if ( newCard )
+ {
+ odebug << "pcmcia: new card detected" << oendl;
+ cfg.setGroup( QString( "Card_%1" ).arg( nCards ) );
+ cfg.writeEntry( "name", newCardName );
+ cfg.setGroup( "Global" );
+ cfg.writeEntry( "nCards", nCards+1 );
+ cfg.write();
+
+ int result = QMessageBox::information( qApp->desktop(),
+ tr( "PCMCIA/CF Subsystem" ),
+ tr( "You have inserted a new card\n%1\nDo you want to configure this card?" ).arg( newCardName ),
+ tr( "Yes" ), tr( "No" ), 0, 0, 1 );
+ odebug << "result = " << result << oendl;
+
+ }
+ else
+ {
+ odebug << "pcmcia: card has been previously inserted" << oendl;
+ }
+ repaint( TRUE );
+}
+
+
+void PcmciaManager::paintEvent( QPaintEvent * )
+{
+ QPainter p( this );
+ qDebug( "count = %d", (OPcmciaSystem::instance()->count() ) );
+ if ( OPcmciaSystem::instance()->count() )
+ {
+ p.drawPixmap( 0, 0, pm );
+ show();
+ }
+ else
+ {
+ hide();
+ }
+}
+
+int PcmciaManager::position()
+{
+ return 7;
+}
+
+void PcmciaManager::execCommand( const QStringList &strList )
+{
+}
+
+EXPORT_OPIE_APPLET_v1( PcmciaManager )
+
diff --git a/noncore/applets/pcmcia/pcmcia.h b/noncore/applets/pcmcia/pcmcia.h
new file mode 100644
index 0000000..5c20433
--- a/dev/null
+++ b/noncore/applets/pcmcia/pcmcia.h
@@ -0,0 +1,65 @@
+/*
+                 This file is part of the Opie Project
+ =. (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de>
+ .=l.
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; Library General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = Library General Public License along with
+    --        :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef PCMCIA_H
+#define PCMCIA_H
+
+#include <qwidget.h>
+#include <qpixmap.h>
+#include <qpopupmenu.h>
+
+class PcmciaManager : public QWidget
+{
+ Q_OBJECT
+ public:
+ PcmciaManager( QWidget *parent = 0 );
+ ~PcmciaManager();
+ static int position();
+
+ private slots:
+ void cardMessage( const QCString& msg, const QByteArray& );
+ void popupTimeout();
+
+ protected:
+ void paintEvent( QPaintEvent* );
+ void mousePressEvent( QMouseEvent * );
+
+ private:
+ void execCommand( const QStringList &command );
+ void popUp(QString message, QString icon = QString::null );
+
+ private:
+ int m_commandOrig;
+ QPixmap pm;
+ QPopupMenu *popupMenu;
+
+};
+
+#endif
+
diff --git a/noncore/applets/pcmcia/pcmcia.pro b/noncore/applets/pcmcia/pcmcia.pro
new file mode 100644
index 0000000..c4f7b62
--- a/dev/null
+++ b/noncore/applets/pcmcia/pcmcia.pro
@@ -0,0 +1,12 @@
+TEMPLATE = lib
+CONFIG += qt plugin warn_on
+HEADERS = pcmcia.h
+SOURCES = pcmcia.cpp
+TARGET = pcmciaapplet
+DESTDIR = $(OPIEDIR)/plugins/applets
+INCLUDEPATH += $(OPIEDIR)/include
+DEPENDPATH += $(OPIEDIR)/include
+LIBS += -lqpe -lopiecore2
+VERSION = 0.1.0
+
+include( $(OPIEDIR)/include.pro )