summaryrefslogtreecommitdiff
authorzecke <zecke>2004-09-18 19:43:37 (UTC)
committer zecke <zecke>2004-09-18 19:43:37 (UTC)
commitaf0d773a9991dec27d25c2ad6859ee2abe23c73a (patch) (unidiff)
treedb35921190287e0c0b19c6207e8d87f679c513ee
parent3f56f22d205a7f2a60262aa026542e9dc844810f (diff)
downloadopie-af0d773a9991dec27d25c2ad6859ee2abe23c73a.zip
opie-af0d773a9991dec27d25c2ad6859ee2abe23c73a.tar.gz
opie-af0d773a9991dec27d25c2ad6859ee2abe23c73a.tar.bz2
-Killl Magic Numbers and introduce an enum
-Split the Command Line on Creation, this way we do not need to split the command afterwards
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/cardmon/cardmon.cpp57
-rw-r--r--core/applets/cardmon/cardmon.h8
2 files changed, 38 insertions, 27 deletions
diff --git a/core/applets/cardmon/cardmon.cpp b/core/applets/cardmon/cardmon.cpp
index 43ccce2..fb140fe 100644
--- a/core/applets/cardmon/cardmon.cpp
+++ b/core/applets/cardmon/cardmon.cpp
@@ -1,375 +1,380 @@
1/* 1/*
2* cardmon.cpp 2* cardmon.cpp
3* 3*
4* --------------------- 4* ---------------------
5* 5*
6* copyright : (c) 2002 by Maximilian Reiss 6* copyright : (c) 2002 by Maximilian Reiss
7* email : max.reiss@gmx.de 7* email : max.reiss@gmx.de
8* based on two apps by Devin Butterfield 8* based on two apps by Devin Butterfield
9*/ 9*/
10/*************************************************************************** 10/***************************************************************************
11 * * 11 * *
12 * This program is free software; you can redistribute it and/or modify * 12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by * 13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or * 14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. * 15 * (at your option) any later version. *
16 * * 16 * *
17 ***************************************************************************/ 17 ***************************************************************************/
18 18
19#include "cardmon.h" 19#include "cardmon.h"
20 20
21/* OPIE */ 21/* OPIE */
22#include <opie2/odebug.h> 22#include <opie2/odebug.h>
23#include <opie2/odevice.h> 23#include <opie2/odevice.h>
24#include <opie2/otaskbarapplet.h> 24#include <opie2/otaskbarapplet.h>
25#include <opie2/oprocess.h> 25#include <opie2/oprocess.h>
26 26
27#include <qpe/applnk.h> 27#include <qpe/applnk.h>
28#include <qpe/resource.h> 28#include <qpe/resource.h>
29using namespace Opie::Core; 29using namespace Opie::Core;
30using namespace Opie::Ui; 30using namespace Opie::Ui;
31 31
32/* QT */ 32/* QT */
33#include <qcopchannel_qws.h> 33#include <qcopchannel_qws.h>
34#include <qpainter.h> 34#include <qpainter.h>
35#include <qfile.h> 35#include <qfile.h>
36#include <qtextstream.h> 36#include <qtextstream.h>
37#include <qsound.h> 37#include <qsound.h>
38#include <qtimer.h> 38#include <qtimer.h>
39 39
40/* STD */ 40/* STD */
41#include <stdio.h> 41#include <stdio.h>
42#include <unistd.h> 42#include <unistd.h>
43#include <stdlib.h> 43#include <stdlib.h>
44#include <string.h> 44#include <string.h>
45#include <fcntl.h> 45#include <fcntl.h>
46#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 46#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
47#include <sys/vfs.h> 47#include <sys/vfs.h>
48#include <mntent.h> 48#include <mntent.h>
49#endif 49#endif
50 50
51CardMonitor::CardMonitor( QWidget * parent ) : QWidget( parent ), 51CardMonitor::CardMonitor( QWidget * parent ) : QWidget( parent ),
52pm( Resource::loadPixmap( "cardmon/pcmcia" ) ) { 52pm( Resource::loadPixmap( "cardmon/pcmcia" ) ) {
53 53
54 QCopChannel * pcmciaChannel = new QCopChannel( "QPE/Card", this ); 54 QCopChannel * pcmciaChannel = new QCopChannel( "QPE/Card", this );
55 connect( pcmciaChannel, 55 connect( pcmciaChannel,
56 SIGNAL( received(const QCString&,const QByteArray&) ), this, 56 SIGNAL( received(const QCString&,const QByteArray&) ), this,
57 SLOT( cardMessage(const QCString&,const QByteArray&) ) ); 57 SLOT( cardMessage(const QCString&,const QByteArray&) ) );
58 58
59 QCopChannel *sdChannel = new QCopChannel( "QPE/Card", this ); 59 QCopChannel *sdChannel = new QCopChannel( "QPE/Card", this );
60 connect( sdChannel, 60 connect( sdChannel,
61 SIGNAL( received(const QCString&,const QByteArray&) ), this, 61 SIGNAL( received(const QCString&,const QByteArray&) ), this,
62 SLOT( cardMessage(const QCString&,const QByteArray&) ) ); 62 SLOT( cardMessage(const QCString&,const QByteArray&) ) );
63 63
64 cardInPcmcia0 = FALSE; 64 cardInPcmcia0 = FALSE;
65 cardInPcmcia1 = FALSE; 65 cardInPcmcia1 = FALSE;
66 cardInSd = FALSE; 66 cardInSd = FALSE;
67 m_process = 0; 67 m_process = 0;
68 68
69 setFocusPolicy( NoFocus ); 69 setFocusPolicy( NoFocus );
70 70
71 setFixedWidth ( AppLnk::smallIconSize() ); 71 setFixedWidth ( AppLnk::smallIconSize() );
72 setFixedHeight ( AppLnk::smallIconSize() ); 72 setFixedHeight ( AppLnk::smallIconSize() );
73 73
74 getStatusPcmcia( TRUE ); 74 getStatusPcmcia( TRUE );
75 getStatusSd( TRUE ); 75 getStatusSd( TRUE );
76 repaint( FALSE ); 76 repaint( FALSE );
77 popupMenu = 0; 77 popupMenu = 0;
78} 78}
79 79
80CardMonitor::~CardMonitor() { 80CardMonitor::~CardMonitor() {
81 delete popupMenu; 81 delete popupMenu;
82} 82}
83 83
84void CardMonitor::popUp( QString message, QString icon ) { 84void CardMonitor::popUp( QString message, QString icon ) {
85 if ( !popupMenu ) { 85 if ( !popupMenu ) {
86 popupMenu = new QPopupMenu( this ); 86 popupMenu = new QPopupMenu( this );
87 } 87 }
88 88
89 popupMenu->clear(); 89 popupMenu->clear();
90 if ( icon.isEmpty() ) { 90 if ( icon.isEmpty() ) {
91 popupMenu->insertItem( message, 0 ); 91 popupMenu->insertItem( message, 0 );
92 } else { 92 } else {
93 popupMenu->insertItem( QIconSet( Resource::loadPixmap( icon ) ), 93 popupMenu->insertItem( QIconSet( Resource::loadPixmap( icon ) ),
94 message, 0 ); 94 message, 0 );
95 } 95 }
96 96
97 QPoint p = mapToGlobal( QPoint( 0, 0 ) ); 97 QPoint p = mapToGlobal( QPoint( 0, 0 ) );
98 QSize s = popupMenu->sizeHint(); 98 QSize s = popupMenu->sizeHint();
99 popupMenu->popup( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), 99 popupMenu->popup( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ),
100 p.y() - s.height() ), 0 ); 100 p.y() - s.height() ), 0 );
101 101
102 QTimer::singleShot( 2000, this, SLOT( popupTimeout() ) ); 102 QTimer::singleShot( 2000, this, SLOT( popupTimeout() ) );
103} 103}
104 104
105void CardMonitor::popupTimeout() { 105void CardMonitor::popupTimeout() {
106 popupMenu->hide(); 106 popupMenu->hide();
107} 107}
108 108
109void CardMonitor::mousePressEvent( QMouseEvent * ) { 109void CardMonitor::mousePressEvent( QMouseEvent * ) {
110 QPopupMenu * menu = new QPopupMenu( this ); 110 QPopupMenu * menu = new QPopupMenu( this );
111 QString cmd; 111 QStringList cmd;
112 bool execute = true;
112 113
113 if ( cardInSd ) { 114 if ( cardInSd ) {
114 menu->insertItem( QIconSet( Resource::loadPixmap( "cardmon/ide" ) ), 115 menu->insertItem( QIconSet( Resource::loadPixmap( "cardmon/ide" ) ),
115 tr( "Eject SD/MMC card" ), 0 ); 116 tr( "Eject SD/MMC card" ), 0 );
116 } 117 }
117 118
118 if ( cardInPcmcia0 ) { 119 if ( cardInPcmcia0 ) {
119 menu-> 120 menu->
120 insertItem( QIconSet 121 insertItem( QIconSet
121 ( Resource::loadPixmap( "cardmon/" + cardInPcmcia0Type ) ), 122 ( Resource::loadPixmap( "cardmon/" + cardInPcmcia0Type ) ),
122 tr( "Eject card 0: %1" ).arg( cardInPcmcia0Name ), 1 ); 123 tr( "Eject card 0: %1" ).arg( cardInPcmcia0Name ), 1 );
123 } 124 }
124 125
125 if ( cardInPcmcia1 ) { 126 if ( cardInPcmcia1 ) {
126 menu-> 127 menu->
127 insertItem( QIconSet 128 insertItem( QIconSet
128 ( Resource::loadPixmap( "cardmon/" + cardInPcmcia1Type ) ), 129 ( Resource::loadPixmap( "cardmon/" + cardInPcmcia1Type ) ),
129 tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 ); 130 tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 );
130 } 131 }
131 132
132 QPoint p = mapToGlobal( QPoint( 0, 0 ) ); 133 QPoint p = mapToGlobal( QPoint( 0, 0 ) );
133 QSize s = menu->sizeHint(); 134 QSize s = menu->sizeHint();
134 int opt = menu->exec( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), 135 int opt = menu->exec( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ),
135 p.y() - s.height() ), 0 ); 136 p.y() - s.height() ), 0 );
136 137
137 if ( opt == 1 ) { 138 if ( opt == 1 ) {
138 m_commandOrig = 1; 139 m_commandOrig = PCMCIA_Socket1;
139 execCommand("/sbin/cardctl eject 0"); 140 cmd << "/sbin/cardctl" << "eject" << "0";
140 } else if ( opt == 0 ) { 141 } else if ( opt == 0 ) {
141 m_commandOrig = 2; 142 m_commandOrig = MMC_Socket;
142 execCommand( QString("umount %1").arg(cardSdName)); 143 cmd << "umount" << cardSdName;
143 } else if ( opt == 2 ) { 144 } else if ( opt == 2 ) {
144 m_commandOrig = 3; 145 m_commandOrig = PCMCIA_Socket2;
145 execCommand( "/sbin/cardctl eject 1" ); 146 cmd << "/sbin/cardctl" << "eject" << "1";
146 } 147 }else
148 execute = false;
149
150 if ( execute )
151 execCommand( cmd );
152
147 delete menu; 153 delete menu;
148} 154}
149 155
150 156
151void CardMonitor::cardMessage( const QCString & msg, const QByteArray & ) { 157void CardMonitor::cardMessage( const QCString & msg, const QByteArray & ) {
152 if ( msg == "stabChanged()" ) { 158 if ( msg == "stabChanged()" ) {
153 // odebug << "Pcmcia: stabchanged" << oendl; 159 // odebug << "Pcmcia: stabchanged" << oendl;
154 getStatusPcmcia(); 160 getStatusPcmcia();
155 } else if ( msg == "mtabChanged()" ) { 161 } else if ( msg == "mtabChanged()" ) {
156 // odebug << "CARDMONAPPLET: mtabchanged" << oendl; 162 // odebug << "CARDMONAPPLET: mtabchanged" << oendl;
157 getStatusSd(); 163 getStatusSd();
158 } 164 }
159} 165}
160 166
161bool CardMonitor::getStatusPcmcia( int showPopUp ) { 167bool CardMonitor::getStatusPcmcia( int showPopUp ) {
162 168
163 bool cardWas0 = cardInPcmcia0; // remember last state 169 bool cardWas0 = cardInPcmcia0; // remember last state
164 bool cardWas1 = cardInPcmcia1; 170 bool cardWas1 = cardInPcmcia1;
165 171
166 QString fileName; 172 QString fileName;
167 173
168 // one of these 3 files should exist 174 // one of these 3 files should exist
169 if ( QFile::exists( "/var/run/stab" ) ) { 175 if ( QFile::exists( "/var/run/stab" ) ) {
170 fileName = "/var/run/stab"; 176 fileName = "/var/run/stab";
171 } else if ( QFile::exists( "/var/state/pcmcia/stab" ) ) { 177 } else if ( QFile::exists( "/var/state/pcmcia/stab" ) ) {
172 fileName = "/var/state/pcmcia/stab"; 178 fileName = "/var/state/pcmcia/stab";
173 } else { 179 } else {
174 fileName = "/var/lib/pcmcia/stab"; 180 fileName = "/var/lib/pcmcia/stab";
175 } 181 }
176 182
177 QFile f( fileName ); 183 QFile f( fileName );
178 184
179 if ( f.open( IO_ReadOnly ) ) { 185 if ( f.open( IO_ReadOnly ) ) {
180 QStringList list; 186 QStringList list;
181 QTextStream stream( &f ); 187 QTextStream stream( &f );
182 QString streamIn; 188 QString streamIn;
183 streamIn = stream.read(); 189 streamIn = stream.read();
184 list = QStringList::split( "\n", streamIn ); 190 list = QStringList::split( "\n", streamIn );
185 for ( QStringList::Iterator line = list.begin(); line != list.end(); 191 for ( QStringList::Iterator line = list.begin(); line != list.end();
186 line++ ) { 192 line++ ) {
187 if ( ( *line ).startsWith( "Socket 0:" ) ) { 193 if ( ( *line ).startsWith( "Socket 0:" ) ) {
188 if ( ( *line ).startsWith( "Socket 0: empty" ) && cardInPcmcia0 ) { 194 if ( ( *line ).startsWith( "Socket 0: empty" ) && cardInPcmcia0 ) {
189 cardInPcmcia0 = FALSE; 195 cardInPcmcia0 = FALSE;
190 } else if ( !( *line ).startsWith( "Socket 0: empty" ) 196 } else if ( !( *line ).startsWith( "Socket 0: empty" )
191 && !cardInPcmcia0 ) { 197 && !cardInPcmcia0 ) {
192 cardInPcmcia0Name = 198 cardInPcmcia0Name =
193 ( *line ).mid( ( ( *line ).find( ':' ) + 1 ), 199 ( *line ).mid( ( ( *line ).find( ':' ) + 1 ),
194 ( *line ).length() - 9 ); 200 ( *line ).length() - 9 );
195 cardInPcmcia0Name.stripWhiteSpace(); 201 cardInPcmcia0Name.stripWhiteSpace();
196 cardInPcmcia0 = TRUE; 202 cardInPcmcia0 = TRUE;
197 show(); 203 show();
198 line++; 204 line++;
199 int pos = ( *line ).find( '\t' ) + 1; 205 int pos = ( *line ).find( '\t' ) + 1;
200 cardInPcmcia0Type = 206 cardInPcmcia0Type =
201 ( *line ).mid( pos, ( *line ).find( "\t", pos ) - pos ); 207 ( *line ).mid( pos, ( *line ).find( "\t", pos ) - pos );
202 } 208 }
203 } else if ( ( *line ).startsWith( "Socket 1:" ) ) { 209 } else if ( ( *line ).startsWith( "Socket 1:" ) ) {
204 if ( ( *line ).startsWith( "Socket 1: empty" ) && cardInPcmcia1 ) { 210 if ( ( *line ).startsWith( "Socket 1: empty" ) && cardInPcmcia1 ) {
205 cardInPcmcia1 = FALSE; 211 cardInPcmcia1 = FALSE;
206 } else if ( !( *line ).startsWith( "Socket 1: empty" ) 212 } else if ( !( *line ).startsWith( "Socket 1: empty" )
207 && !cardInPcmcia1 ) { 213 && !cardInPcmcia1 ) {
208 cardInPcmcia1Name = 214 cardInPcmcia1Name =
209 ( *line ).mid( ( ( *line ).find( ':' ) + 1 ), 215 ( *line ).mid( ( ( *line ).find( ':' ) + 1 ),
210 ( *line ).length() - 9 ); 216 ( *line ).length() - 9 );
211 cardInPcmcia1Name.stripWhiteSpace(); 217 cardInPcmcia1Name.stripWhiteSpace();
212 cardInPcmcia1 = TRUE; 218 cardInPcmcia1 = TRUE;
213 show(); 219 show();
214 line++; 220 line++;
215 int pos = ( *line ).find( '\t' ) + 1; 221 int pos = ( *line ).find( '\t' ) + 1;
216 cardInPcmcia1Type = 222 cardInPcmcia1Type =
217 ( *line ).mid( pos, ( *line ).find( "\t", pos ) - pos ); 223 ( *line ).mid( pos, ( *line ).find( "\t", pos ) - pos );
218 } 224 }
219 } 225 }
220 } 226 }
221 f.close(); 227 f.close();
222 228
223 if ( !showPopUp 229 if ( !showPopUp
224 && ( cardWas0 != cardInPcmcia0 || cardWas1 != cardInPcmcia1 ) ) { 230 && ( cardWas0 != cardInPcmcia0 || cardWas1 != cardInPcmcia1 ) ) {
225 QString text = QString::null; 231 QString text = QString::null;
226 QString what = QString::null; 232 QString what = QString::null;
227 if ( cardWas0 != cardInPcmcia0 ) { 233 if ( cardWas0 != cardInPcmcia0 ) {
228 if ( cardInPcmcia0 ) { 234 if ( cardInPcmcia0 ) {
229 text += tr( "New card: " ); 235 text += tr( "New card: " );
230 what = "on"; 236 what = "on";
231 } else { 237 } else {
232 text += tr( "Ejected: " ); 238 text += tr( "Ejected: " );
233 what = "off"; 239 what = "off";
234 } 240 }
235 text += cardInPcmcia0Name; 241 text += cardInPcmcia0Name;
236 popUp( text, "cardmon/" + cardInPcmcia0Type ); 242 popUp( text, "cardmon/" + cardInPcmcia0Type );
237 } 243 }
238 244
239 if ( cardWas1 != cardInPcmcia1 ) { 245 if ( cardWas1 != cardInPcmcia1 ) {
240 if ( cardInPcmcia1 ) { 246 if ( cardInPcmcia1 ) {
241 text += tr( "New card: " ); 247 text += tr( "New card: " );
242 what = "on"; 248 what = "on";
243 } else { 249 } else {
244 text += tr( "Ejected: " ); 250 text += tr( "Ejected: " );
245 what = "off"; 251 what = "off";
246 } 252 }
247 text += cardInPcmcia1Name; 253 text += cardInPcmcia1Name;
248 popUp( text, "cardmon/" + cardInPcmcia1Type ); 254 popUp( text, "cardmon/" + cardInPcmcia1Type );
249 } 255 }
250 #ifndef QT_NO_SOUND 256 #ifndef QT_NO_SOUND
251 QSound::play( Resource::findSound( "cardmon/card" + what ) ); 257 QSound::play( Resource::findSound( "cardmon/card" + what ) );
252 #endif 258 #endif
253 259
254 } 260 }
255 } else { 261 } else {
256 // no file found 262 // no file found
257 odebug << "no file found" << oendl; 263 odebug << "no file found" << oendl;
258 cardInPcmcia0 = FALSE; 264 cardInPcmcia0 = FALSE;
259 cardInPcmcia1 = FALSE; 265 cardInPcmcia1 = FALSE;
260 } 266 }
261 repaint( FALSE ); 267 repaint( FALSE );
262 return ( ( cardWas0 == cardInPcmcia0 268 return ( ( cardWas0 == cardInPcmcia0
263 && cardWas1 == cardInPcmcia1 ) ? FALSE : TRUE ); 269 && cardWas1 == cardInPcmcia1 ) ? FALSE : TRUE );
264 270
265} 271}
266 272
267 273
268bool CardMonitor::getStatusSd( int showPopUp ) { 274bool CardMonitor::getStatusSd( int showPopUp ) {
269 275
270 bool cardWas = cardInSd; // remember last state 276 bool cardWas = cardInSd; // remember last state
271 cardInSd = FALSE; 277 cardInSd = FALSE;
272 278
273 #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 279 #if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
274 280
275 struct mntent *me; 281 struct mntent *me;
276 FILE *mntfp = setmntent( "/etc/mtab", "r" ); 282 FILE *mntfp = setmntent( "/etc/mtab", "r" );
277 283
278 if ( mntfp ) { 284 if ( mntfp ) {
279 while ( ( me = getmntent( mntfp ) ) != 0 ) { 285 while ( ( me = getmntent( mntfp ) ) != 0 ) {
280 QString fs = QFile::decodeName( me->mnt_fsname ); 286 QString fs = QFile::decodeName( me->mnt_fsname );
281 //odebug << fs << oendl; 287 //odebug << fs << oendl;
282 if ( fs.left( 14 ) == "/dev/mmc/part1" || fs.left( 7 ) == "/dev/sd" 288 if ( fs.left( 14 ) == "/dev/mmc/part1" || fs.left( 7 ) == "/dev/sd"
283 || fs.left( 9 ) == "/dev/mmcd" ) { 289 || fs.left( 9 ) == "/dev/mmcd" ) {
284 cardInSd = TRUE; 290 cardInSd = TRUE;
285 cardSdName = fs; 291 cardSdName = fs;
286 show(); 292 show();
287 } 293 }
288 // else { 294 // else {
289 // cardInSd = FALSE; 295 // cardInSd = FALSE;
290 // } 296 // }
291 } 297 }
292 endmntent( mntfp ); 298 endmntent( mntfp );
293 } 299 }
294 300
295 if ( !showPopUp && cardWas != cardInSd ) { 301 if ( !showPopUp && cardWas != cardInSd ) {
296 QString text = QString::null; 302 QString text = QString::null;
297 QString what = QString::null; 303 QString what = QString::null;
298 if ( cardInSd ) { 304 if ( cardInSd ) {
299 text += "New card: SD/MMC"; 305 text += "New card: SD/MMC";
300 what = "on"; 306 what = "on";
301 } else { 307 } else {
302 text += "Ejected: SD/MMC"; 308 text += "Ejected: SD/MMC";
303 what = "off"; 309 what = "off";
304 } 310 }
305 //odebug << "TEXT: " + text << oendl; 311 //odebug << "TEXT: " + text << oendl;
306 #ifndef QT_NO_SOUND 312 #ifndef QT_NO_SOUND
307 QSound::play( Resource::findSound( "cardmon/card" + what ) ); 313 QSound::play( Resource::findSound( "cardmon/card" + what ) );
308 #endif 314 #endif
309 315
310 popUp( text, "cardmon/ide" ); // XX add SD pic 316 popUp( text, "cardmon/ide" ); // XX add SD pic
311 } 317 }
312 #else 318 #else
313 #error "Not on Linux" 319 #error "Not on Linux"
314 #endif 320 #endif
315 repaint( FALSE ); 321 repaint( FALSE );
316 return ( ( cardWas == cardInSd ) ? FALSE : TRUE ); 322 return ( ( cardWas == cardInSd ) ? FALSE : TRUE );
317} 323}
318 324
319void CardMonitor::paintEvent( QPaintEvent * ) { 325void CardMonitor::paintEvent( QPaintEvent * ) {
320 326
321 QPainter p( this ); 327 QPainter p( this );
322 328
323 if ( cardInPcmcia0 || cardInPcmcia1 || cardInSd ) { 329 if ( cardInPcmcia0 || cardInPcmcia1 || cardInSd ) {
324 p.drawPixmap( 0, 0, pm ); 330 p.drawPixmap( 0, 0, pm );
325 show(); 331 show();
326 } else { 332 } else {
327 //p.eraseRect(rect()); 333 //p.eraseRect(rect());
328 hide(); 334 hide();
329 } 335 }
330} 336}
331 337
332int CardMonitor::position() { 338int CardMonitor::position() {
333 return 7; 339 return 7;
334} 340}
335 341
336void CardMonitor::execCommand( const QString &command ) { 342void CardMonitor::execCommand( const QStringList &strList ) {
337 delete m_process; 343 delete m_process;
338 m_process = 0; 344 m_process = 0;
339 345
340 if ( m_process == 0 ) { 346 if ( m_process == 0 ) {
341 m_process = new OProcess(); 347 m_process = new OProcess();
342 QStringList strList = QStringList::split( " ", command );
343 348
344 for ( QStringList::Iterator it = strList.begin(); it != strList.end(); ++it ) {
345 *m_process << *it;
346 }
347 349
348 connect(m_process, SIGNAL( processExited(Opie::Core::OProcess*) ), 350 for ( QStringList::ConstIterator it = strList.begin(); it != strList.end(); ++it ) {
349 this, SLOT( slotExited(Opie::Core::OProcess* ) ) ); 351 *m_process << *it;
352 }
353
354 connect(m_process, SIGNAL(processExited(Opie::Core::OProcess*)),
355 this, SLOT( slotExited(Opie::Core::OProcess*)));
350 356
351 if(!m_process->start(OProcess::NotifyOnExit, OProcess::AllOutput ) ) { 357 if(!m_process->start(OProcess::NotifyOnExit, OProcess::AllOutput ) ) {
352 delete m_process; 358 delete m_process;
353 m_process = 0; 359 m_process = 0;
354 } 360 }
355 } 361 }
356} 362}
357 363
358void CardMonitor::slotExited( OProcess* ) { 364void CardMonitor::slotExited( OProcess* ) {
359 365
360 if( m_process->normalExit() ) { 366 if( m_process->normalExit() ) {
361 int ret = m_process->exitStatus(); 367 int ret = m_process->exitStatus();
362 if( ret != 0 ) { 368 if( ret != 0 ) {
363 if ( m_commandOrig == 1 ) { 369 if ( m_commandOrig == PCMCIA_Socket1 ||
364 popUp( tr( "CF/PCMCIA card eject failed!" ) ); 370 m_commandOrig == PCMCIA_Socket2 ) {
365 } else if ( m_commandOrig == 2 ) { 371 popUp( tr( "CF/PCMCIA card eject failed!" ) );
366 popUp( tr( "SD/MMC card eject failed!" ) ); 372 } else if ( m_commandOrig == MMC_Socket ) {
367 } else if ( m_commandOrig == 3 ) { 373 popUp( tr( "SD/MMC card eject failed!" ) );
368 popUp( tr( "CF/PCMCIA card eject failed!" ) ); 374 }
369 } 375 }
370 } 376 }
371 }
372} 377}
373 378
374EXPORT_OPIE_APPLET_v1( CardMonitor ) 379EXPORT_OPIE_APPLET_v1( CardMonitor )
375 380
diff --git a/core/applets/cardmon/cardmon.h b/core/applets/cardmon/cardmon.h
index b02c8b1..400f5ae 100644
--- a/core/applets/cardmon/cardmon.h
+++ b/core/applets/cardmon/cardmon.h
@@ -1,70 +1,76 @@
1/* 1/*
2 * cardmon.h 2 * cardmon.h
3 * 3 *
4 * --------------------- 4 * ---------------------
5 * 5 *
6 * copyright : (c) 2003 by Maximilian Reiss 6 * copyright : (c) 2003 by Maximilian Reiss
7 * email : max.reiss@gmx.de 7 * email : max.reiss@gmx.de
8 * based on two apps by Devin Butterfield 8 * based on two apps by Devin Butterfield
9 */ 9 */
10/*************************************************************************** 10/***************************************************************************
11 * * 11 * *
12 * This program is free software; you can redistribute it and/or modify * 12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by * 13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or * 14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. * 15 * (at your option) any later version. *
16 * * 16 * *
17 ***************************************************************************/ 17 ***************************************************************************/
18 18
19#ifndef CARDMON_H 19#ifndef CARDMON_H
20#define CARDMON_H 20#define CARDMON_H
21 21
22#include <qwidget.h> 22#include <qwidget.h>
23#include <qpixmap.h> 23#include <qpixmap.h>
24#include <qpopupmenu.h> 24#include <qpopupmenu.h>
25 25
26namespace Opie { 26namespace Opie {
27 namespace Core { 27 namespace Core {
28 class OProcess; 28 class OProcess;
29 } 29 }
30} 30}
31 31
32class CardMonitor : public QWidget { 32class CardMonitor : public QWidget {
33 Q_OBJECT 33 Q_OBJECT
34public: 34public:
35 enum {
36 PCMCIA_Socket1,
37 PCMCIA_Socket2,
38 MMC_Socket
39 };
40
35 CardMonitor( QWidget *parent = 0 ); 41 CardMonitor( QWidget *parent = 0 );
36 ~CardMonitor(); 42 ~CardMonitor();
37 bool getStatusPcmcia( int showPopUp = FALSE ); 43 bool getStatusPcmcia( int showPopUp = FALSE );
38 bool getStatusSd( int showPopUp = FALSE ); 44 bool getStatusSd( int showPopUp = FALSE );
39 static int position(); 45 static int position();
40private slots: 46private slots:
41 void cardMessage( const QCString &msg, const QByteArray & ); 47 void cardMessage( const QCString &msg, const QByteArray & );
42 void slotExited( Opie::Core::OProcess* proc ); 48 void slotExited( Opie::Core::OProcess* proc );
43 void popupTimeout(); 49 void popupTimeout();
44 50
45protected: 51protected:
46 void paintEvent( QPaintEvent* ); 52 void paintEvent( QPaintEvent* );
47 void mousePressEvent( QMouseEvent * ); 53 void mousePressEvent( QMouseEvent * );
48 54
49private: 55private:
50 void execCommand( const QString &command ); 56 void execCommand( const QStringList &command );
51 int m_commandOrig; 57 int m_commandOrig;
52 QPixmap pm; 58 QPixmap pm;
53 // pcmcia socket 0 59 // pcmcia socket 0
54 bool cardInPcmcia0; 60 bool cardInPcmcia0;
55 QString cardInPcmcia0Name; 61 QString cardInPcmcia0Name;
56 QString cardInPcmcia0Type; 62 QString cardInPcmcia0Type;
57 // pcmcia socket 1 63 // pcmcia socket 1
58 bool cardInPcmcia1; 64 bool cardInPcmcia1;
59 QString cardInPcmcia1Name; 65 QString cardInPcmcia1Name;
60 QString cardInPcmcia1Type; 66 QString cardInPcmcia1Type;
61 bool cardInSd; 67 bool cardInSd;
62 QString cardSdName; // the device which is mounted 68 QString cardSdName; // the device which is mounted
63 void iconShow(); 69 void iconShow();
64 QPopupMenu *popupMenu; 70 QPopupMenu *popupMenu;
65 void popUp(QString message, QString icon = QString::null ); 71 void popUp(QString message, QString icon = QString::null );
66 Opie::Core::OProcess* m_process; 72 Opie::Core::OProcess* m_process;
67}; 73};
68 74
69#endif 75#endif
70 76