summaryrefslogtreecommitdiff
path: root/core/applets/cardmon/cardmon.cpp
Unidiff
Diffstat (limited to 'core/applets/cardmon/cardmon.cpp') (more/less context) (show whitespace changes)
-rw-r--r--core/applets/cardmon/cardmon.cpp118
1 files changed, 72 insertions, 46 deletions
diff --git a/core/applets/cardmon/cardmon.cpp b/core/applets/cardmon/cardmon.cpp
index 9293c6f..25bb137 100644
--- a/core/applets/cardmon/cardmon.cpp
+++ b/core/applets/cardmon/cardmon.cpp
@@ -29,6 +29,7 @@
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtimer.h> 31#include <qtimer.h>
32#include <qapplication.h>
32 33
33#include <stdio.h> 34#include <stdio.h>
34#include <unistd.h> 35#include <unistd.h>
@@ -45,15 +46,19 @@
45using namespace Opie; 46using namespace Opie;
46 47
47CardMonitor::CardMonitor( QWidget *parent ) : QWidget( parent ), 48CardMonitor::CardMonitor( QWidget *parent ) : QWidget( parent ),
48 pm( Resource::loadPixmap( "cardmon/pcmcia" ) ) { 49pm(Resource::
50 loadPixmap("cardmon/pcmcia"))
51{
49 52
50 QCopChannel* pcmciaChannel = new QCopChannel( "QPE/Card", this ); 53 QCopChannel* pcmciaChannel = new QCopChannel( "QPE/Card", this );
51 connect( pcmciaChannel, SIGNAL( received( const QCString &, const QByteArray &) ), 54 connect(pcmciaChannel,
52 this, SLOT( cardMessage( const QCString &, const QByteArray &) ) ); 55 SIGNAL(received(const QCString &, const QByteArray &)), this,
56 SLOT(cardMessage(const QCString &, const QByteArray &)));
53 57
54 QCopChannel* sdChannel = new QCopChannel( "QPE/Card", this ); 58 QCopChannel* sdChannel = new QCopChannel( "QPE/Card", this );
55 connect( sdChannel, SIGNAL( received( const QCString &, const QByteArray &) ), 59 connect(sdChannel,
56 this, SLOT( cardMessage( const QCString &, const QByteArray &) ) ); 60 SIGNAL(received(const QCString &, const QByteArray &)), this,
61 SLOT(cardMessage(const QCString &, const QByteArray &)));
57 62
58 cardInPcmcia0 = FALSE; 63 cardInPcmcia0 = FALSE;
59 cardInPcmcia1 = FALSE; 64 cardInPcmcia1 = FALSE;
@@ -66,13 +71,15 @@ CardMonitor::CardMonitor( QWidget *parent ) : QWidget( parent ),
66 popupMenu = 0; 71 popupMenu = 0;
67} 72}
68 73
69CardMonitor::~CardMonitor() { 74CardMonitor::~CardMonitor()
75{
70 if( popupMenu ) { 76 if( popupMenu ) {
71 delete popupMenu; 77 delete popupMenu;
72 } 78 }
73} 79}
74 80
75void CardMonitor::popUp( QString message, QString icon ) { 81void CardMonitor::popUp(QString message, QString icon)
82{
76 if ( ! popupMenu ) { 83 if ( ! popupMenu ) {
77 popupMenu = new QPopupMenu(this); 84 popupMenu = new QPopupMenu(this);
78 } 85 }
@@ -81,74 +88,77 @@ void CardMonitor::popUp( QString message, QString icon ) {
81 if( icon.isEmpty() ) { 88 if( icon.isEmpty() ) {
82 popupMenu->insertItem( message, 0 ); 89 popupMenu->insertItem( message, 0 );
83 } else { 90 } else {
84 popupMenu->insertItem( QIconSet ( Resource::loadPixmap ( icon ) ), message, 0 ); 91 popupMenu->insertItem(QIconSet(Resource::loadPixmap(icon)),
92 message, 0);
85 } 93 }
86 94
87 QPoint p = mapToGlobal ( QPoint ( 0, 0 ) ); 95 QPoint p = mapToGlobal ( QPoint ( 0, 0 ) );
88 QSize s = popupMenu->sizeHint (); 96 QSize s = popupMenu->sizeHint ();
89 popupMenu->popup( QPoint ( 97 popupMenu->popup(QPoint(p.x() + (width() / 2) - (s.width() / 2),
90 p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ),
91 p. y ( ) - s. height ( ) ), 0); 98 p. y ( ) - s. height ( ) ), 0);
92 99
93 QTimer::singleShot( 2000, this, SLOT(popupTimeout() ) ); 100 QTimer::singleShot( 2000, this, SLOT(popupTimeout() ) );
94} 101}
95 102
96void CardMonitor::popupTimeout() { 103void CardMonitor::popupTimeout()
104{
97 popupMenu->hide(); 105 popupMenu->hide();
98} 106}
99 107
100void CardMonitor::mousePressEvent( QMouseEvent * ) { 108void CardMonitor::mousePressEvent(QMouseEvent *)
109{
101 QPopupMenu *menu = new QPopupMenu(this); 110 QPopupMenu *menu = new QPopupMenu(this);
102 QString cmd; 111 QString cmd;
103 int err=0; 112 int err=0;
104 113
105 if ( cardInSd ) { 114 if ( cardInSd ) {
106 menu->insertItem( tr("Eject SD/MMC card"), 0 ); 115 menu->insertItem(QIconSet(Resource::loadPixmap("cardmon/ide")),
116 tr("Eject SD/MMC card"), 0);
107 } 117 }
108 118
109 if ( cardInPcmcia0 ) { 119 if ( cardInPcmcia0 ) {
110 menu->insertItem( QIconSet ( Resource::loadPixmap ( "cardmon/" + cardInPcmcia0Type ) ), 120 menu->
121 insertItem(QIconSet
122 (Resource::loadPixmap("cardmon/" + cardInPcmcia0Type)),
111 tr( "Eject card 0: %1" ).arg(cardInPcmcia0Name ), 1 ); 123 tr( "Eject card 0: %1" ).arg(cardInPcmcia0Name ), 1 );
112 } 124 }
113 125
114 if ( cardInPcmcia1 ) { 126 if ( cardInPcmcia1 ) {
115 menu->insertItem( QIconSet ( Resource::loadPixmap ( "cardmon/" + cardInPcmcia1Type ) ), 127 menu->
128 insertItem(QIconSet
129 (Resource::loadPixmap("cardmon/" + cardInPcmcia1Type)),
116 tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 ); 130 tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 );
117 } 131 }
118 132
119 QPoint p = mapToGlobal ( QPoint ( 0, 0 ) ); 133 QPoint p = mapToGlobal ( QPoint ( 0, 0 ) );
120 QSize s = menu->sizeHint (); 134 QSize s = menu->sizeHint ();
121 int opt = menu->exec( QPoint ( 135 int opt = menu->exec(QPoint(p.x() + (width() / 2) - (s.width() / 2),
122 p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ),
123 p. y ( ) - s. height ( ) ), 0); 136 p. y ( ) - s. height ( ) ), 0);
124 137
125 if ( opt == 1 ) { 138 if ( opt == 1 ) {
126 cmd = "/sbin/cardctl eject 0"; 139 cmd = "/sbin/cardctl eject 0";
127 err = system( ( const char * ) cmd ); 140 err = system( ( const char * ) cmd );
128 if ( ( err == 127 ) || ( err < 0 ) ) { 141 if (err != 0) {
129 qDebug( "Could not execute `/sbin/cardctl eject 0'! err=%d", err ); 142 qDebug("Could not execute `/sbin/cardctl eject 0'! err=%d",
143 err);
130 popUp( tr( "CF/PCMCIA card eject failed!" ) ); 144 popUp( tr( "CF/PCMCIA card eject failed!" ) );
131 } 145 }
132 } else if ( opt == 0 ) { 146 } else if ( opt == 0 ) {
133 if ( ODevice::inst()->system() == System_Familiar ) { 147 if ( ODevice::inst()->system() == System_Familiar ) {
134 cmd = "umount /dev/mmc/part1"; 148 cmd = "umount /dev/mmc/part1";
135 err = system( ( const char *) cmd );
136 if ( ( err != 0 ) ) {
137 popUp( tr("SD/MMC card eject failed!") );
138 }
139 } else { 149 } else {
140 cmd = "/etc/sdcontrol compeject"; 150 cmd = "umount /dev/mmcda1";
151 }
141 err = system( ( const char *) cmd ); 152 err = system( ( const char *) cmd );
142 if ( ( err != 0 ) ) { 153 if (err != 0) {
143 qDebug( "Could not execute `/etc/sdcontrol comeject'! err=%d", err );
144 popUp( tr("SD/MMC card eject failed!") ); 154 popUp( tr("SD/MMC card eject failed!") );
145 } 155 }
146 }
147 } else if ( opt == 2 ) { 156 } else if ( opt == 2 ) {
148 cmd = "/sbin/cardctl eject 1"; 157 cmd = "/sbin/cardctl eject 1";
149 err = system( ( const char *) cmd ); 158 err = system( ( const char *) cmd );
150 if ( ( err == 127 ) || ( err < 0 ) ) { 159 if (err != 0) {
151 qDebug( "Could not execute `/sbin/cardctl eject 1'! err=%d", err ); 160 qDebug("Could not execute `/sbin/cardctl eject 1'! err=%d",
161 err);
152 popUp( tr( "CF/PCMCIA card eject failed!" ) ); 162 popUp( tr( "CF/PCMCIA card eject failed!" ) );
153 } 163 }
154 } 164 }
@@ -156,17 +166,19 @@ void CardMonitor::mousePressEvent( QMouseEvent * ) {
156} 166}
157 167
158 168
159void CardMonitor::cardMessage( const QCString &msg, const QByteArray & ) { 169void CardMonitor::cardMessage(const QCString & msg, const QByteArray &)
170{
160 if ( msg == "stabChanged()" ) { 171 if ( msg == "stabChanged()" ) {
161 // qDebug("Pcmcia: stabchanged"); 172 // qDebug("Pcmcia: stabchanged");
162 getStatusPcmcia(); 173 getStatusPcmcia();
163 } else if ( msg == "mtabChanged()" ) { 174 } else if ( msg == "mtabChanged()" ) {
164 qDebug("CARDMONAPPLET: mtabchanged"); 175 // qDebug("CARDMONAPPLET: mtabchanged");
165 getStatusSd(); 176 getStatusSd();
166 } 177 }
167} 178}
168 179
169bool CardMonitor::getStatusPcmcia( int showPopUp ) { 180bool CardMonitor::getStatusPcmcia(int showPopUp)
181{
170 182
171 bool cardWas0 = cardInPcmcia0; // remember last state 183 bool cardWas0 = cardInPcmcia0; // remember last state
172 bool cardWas1 = cardInPcmcia1; 184 bool cardWas1 = cardInPcmcia1;
@@ -190,36 +202,46 @@ bool CardMonitor::getStatusPcmcia( int showPopUp ) {
190 QString streamIn; 202 QString streamIn;
191 streamIn = stream.read(); 203 streamIn = stream.read();
192 list = QStringList::split( "\n", streamIn ); 204 list = QStringList::split( "\n", streamIn );
193 for( QStringList::Iterator line=list.begin(); line!=list.end(); line++ ) { 205 for (QStringList::Iterator line = list.begin(); line != list.end();
206 line++) {
194 if( (*line).startsWith( "Socket 0:" ) ){ 207 if( (*line).startsWith( "Socket 0:" ) ){
195 if( (*line).startsWith( "Socket 0: empty" ) && cardInPcmcia0 ){ 208 if( (*line).startsWith( "Socket 0: empty" ) && cardInPcmcia0 ){
196 cardInPcmcia0 = FALSE; 209 cardInPcmcia0 = FALSE;
197 } else if ( !(*line).startsWith( "Socket 0: empty" ) && !cardInPcmcia0 ){ 210 } else if (!(*line).startsWith("Socket 0: empty")
198 cardInPcmcia0Name = (*line).mid( ( (*line).find( ':' ) + 1 ), (*line).length() - 9 ); 211 && !cardInPcmcia0) {
212 cardInPcmcia0Name =
213 (*line).mid(((*line).find(':') + 1),
214 (*line).length() - 9);
199 cardInPcmcia0Name.stripWhiteSpace(); 215 cardInPcmcia0Name.stripWhiteSpace();
200 cardInPcmcia0 = TRUE; 216 cardInPcmcia0 = TRUE;
201 show(); 217 show();
202 line++; 218 line++;
203 int pos=(*line).find('\t' ) + 1; 219 int pos=(*line).find('\t' ) + 1;
204 cardInPcmcia0Type = (*line).mid( pos, (*line).find( "\t" , pos) - pos ); 220 cardInPcmcia0Type =
221 (*line).mid(pos, (*line).find("\t", pos) - pos);
205 } 222 }
206 } else if( (*line).startsWith( "Socket 1:" ) ){ 223 } else if( (*line).startsWith( "Socket 1:" ) ){
207 if( (*line).startsWith( "Socket 1: empty" ) && cardInPcmcia1 ) { 224 if( (*line).startsWith( "Socket 1: empty" ) && cardInPcmcia1 ) {
208 cardInPcmcia1 = FALSE; 225 cardInPcmcia1 = FALSE;
209 } else if ( !(*line).startsWith( "Socket 1: empty" ) && !cardInPcmcia1 ) { 226 } else if (!(*line).startsWith("Socket 1: empty")
210 cardInPcmcia1Name = (*line).mid(((*line).find(':') + 1), (*line).length() - 9 ); 227 && !cardInPcmcia1) {
228 cardInPcmcia1Name =
229 (*line).mid(((*line).find(':') + 1),
230 (*line).length() - 9);
211 cardInPcmcia1Name.stripWhiteSpace(); 231 cardInPcmcia1Name.stripWhiteSpace();
212 cardInPcmcia1 = TRUE; 232 cardInPcmcia1 = TRUE;
213 show(); 233 show();
214 line++; 234 line++;
215 int pos=(*line).find('\t') + 1; 235 int pos=(*line).find('\t') + 1;
216 cardInPcmcia1Type = (*line).mid( pos, (*line).find("\t", pos) - pos ); 236 cardInPcmcia1Type =
237 (*line).mid(pos, (*line).find("\t", pos) - pos);
217 } 238 }
218 } 239 }
219 } 240 }
220 f.close(); 241 f.close();
221 242
222 if( !showPopUp && (cardWas0 != cardInPcmcia0 || cardWas1 != cardInPcmcia1) ) { 243 if (!showPopUp
244 && (cardWas0 != cardInPcmcia0 || cardWas1 != cardInPcmcia1)) {
223 QString text = QString::null; 245 QString text = QString::null;
224 QString what = QString::null; 246 QString what = QString::null;
225 if(cardWas0 != cardInPcmcia0) { 247 if(cardWas0 != cardInPcmcia0) {
@@ -253,11 +275,13 @@ bool CardMonitor::getStatusPcmcia( int showPopUp ) {
253 cardInPcmcia0 = FALSE; 275 cardInPcmcia0 = FALSE;
254 cardInPcmcia1 = FALSE; 276 cardInPcmcia1 = FALSE;
255 } 277 }
256 return ( (cardWas0 == cardInPcmcia0 && cardWas1 == cardInPcmcia1 ) ? FALSE : TRUE ); 278 return ((cardWas0 == cardInPcmcia0
279 && cardWas1 == cardInPcmcia1) ? FALSE : TRUE);
257} 280}
258 281
259 282
260bool CardMonitor::getStatusSd( int showPopUp ) { 283bool CardMonitor::getStatusSd(int showPopUp)
284{
261 285
262 bool cardWas = cardInSd; // remember last state 286 bool cardWas = cardInSd; // remember last state
263 cardInSd = FALSE; 287 cardInSd = FALSE;
@@ -270,7 +294,8 @@ bool CardMonitor::getStatusSd( int showPopUp ) {
270 while ( ( me = getmntent( mntfp ) ) != 0 ) { 294 while ( ( me = getmntent( mntfp ) ) != 0 ) {
271 QString fs = me->mnt_fsname; 295 QString fs = me->mnt_fsname;
272 //qDebug( fs ); 296 //qDebug( fs );
273 if ( fs.left( 14 ) == "/dev/mmc/part1" || fs.left( 7 ) == "/dev/sd" || fs.left( 9 ) == "/dev/mmcd" ) { 297 if (fs.left(14) == "/dev/mmc/part1" || fs.left(7) == "/dev/sd"
298 || fs.left(9) == "/dev/mmcd") {
274 cardInSd = TRUE; 299 cardInSd = TRUE;
275 show(); 300 show();
276 } 301 }
@@ -285,10 +310,10 @@ bool CardMonitor::getStatusSd( int showPopUp ) {
285 QString text = QString::null; 310 QString text = QString::null;
286 QString what = QString::null; 311 QString what = QString::null;
287 if( cardInSd ) { 312 if( cardInSd ) {
288 text += "SD Inserted"; 313 text += "New card: SD/MMC";
289 what = "on"; 314 what = "on";
290 } else { 315 } else {
291 text += "SD Removed"; 316 text += "Ejected: SD/MMC";
292 what = "off"; 317 what = "off";
293 } 318 }
294 //qDebug("TEXT: " + text ); 319 //qDebug("TEXT: " + text );
@@ -301,7 +326,8 @@ bool CardMonitor::getStatusSd( int showPopUp ) {
301 return ( ( cardWas == cardInSd) ? FALSE : TRUE ); 326 return ( ( cardWas == cardInSd) ? FALSE : TRUE );
302} 327}
303 328
304void CardMonitor::paintEvent( QPaintEvent * ) { 329void CardMonitor::paintEvent(QPaintEvent *)
330{
305 331
306 QPainter p( this ); 332 QPainter p( this );
307 333