author | zecke <zecke> | 2002-03-24 19:30:27 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-03-24 19:30:27 (UTC) |
commit | 4802684dd785274be50b472c87e315da0e325449 (patch) (side-by-side diff) | |
tree | e15bb479f443d5ce410ccbd9368e663213210517 | |
parent | 6ce8bbff9eb16e0d731755010bda63e7fb43f70b (diff) | |
download | opie-4802684dd785274be50b472c87e315da0e325449.zip opie-4802684dd785274be50b472c87e315da0e325449.tar.gz opie-4802684dd785274be50b472c87e315da0e325449.tar.bz2 |
Hija this adds the "Do you want to scan this device?"
to launcher and should speed up some things.
Please test launcher and report bugs to me
-rw-r--r-- | core/launcher/launcher.cpp | 84 | ||||
-rw-r--r-- | core/launcher/mediummountgui.cpp | 10 |
2 files changed, 66 insertions, 28 deletions
diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp index 1c38a05..cf1a3c8 100644 --- a/core/launcher/launcher.cpp +++ b/core/launcher/launcher.cpp @@ -1,752 +1,788 @@ /********************************************************************** ** Copyright (c) 2002 Holger zecke Freyther ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT // have this class. #define QTOPIA_INTERNAL_FSLP #include <opie/oconfig.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/resource.h> #include <qpe/applnk.h> #include <qpe/config.h> #include <qpe/global.h> #include <qpe/qpeapplication.h> #include <qpe/mimetype.h> #include <qpe/storage.h> #include <qpe/palmtoprecord.h> #include <qdatetime.h> #include <qdir.h> #include <qwindowsystem_qws.h> #include <qtimer.h> #include <qcombobox.h> #include <qvbox.h> #include <qlayout.h> #include <qstyle.h> #include <qpushbutton.h> #include <qtabbar.h> #include <qwidgetstack.h> #include <qlayout.h> #include <qregexp.h> #include <qmessagebox.h> #include <qframe.h> #include <qpainter.h> #include <qlabel.h> #include <qtextstream.h> #include "launcherview.h" #include "launcher.h" #include "syncdialog.h" #include "desktop.h" #include <qpe/lnkproperties.h> #include "mrulist.h" #include "qrsync.h" #include <stdlib.h> #include <unistd.h> #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) #include <stdio.h> #include <sys/vfs.h> #include <mntent.h> #endif #include <qpe/storage.h> #include "mediummountgui.h" //#define SHOW_ALL // uidGen // uidGen +namespace { + QStringList configToMime( Config *cfg ){ + QStringList mimes; + bool tmpMime; + cfg->setGroup("mimetypes" ); + tmpMime = cfg->readBoolEntry("all" ,false); + if( tmpMime ){ + mimes << QString::null; + return mimes; + }else{ + tmpMime = cfg->readBoolEntry("audio", true ); + if(tmpMime ) + mimes.append("audio//*" ); + + tmpMime = cfg->readBoolEntry("image", true ); + if(tmpMime ) + mimes.append("image//*" ); + + tmpMime = cfg->readBoolEntry("text", true ); + if(tmpMime ) + mimes.append("text//*"); + + tmpMime = cfg->readBoolEntry("video", true ); + if(tmpMime ) + mimes.append("video//*" ); + } + return mimes; + } + +} + CategoryTabWidget::CategoryTabWidget( QWidget* parent ) : QVBox( parent ) { categoryBar = 0; stack = 0; } void CategoryTabWidget::prevTab() { if ( categoryBar ) { int n = categoryBar->count(); int tab = categoryBar->currentTab(); if ( tab >= 0 ) categoryBar->setCurrentTab( (tab - 1 + n)%n ); } } void CategoryTabWidget::nextTab() { if ( categoryBar ) { int n = categoryBar->count(); int tab = categoryBar->currentTab(); categoryBar->setCurrentTab( (tab + 1)%n ); } } void CategoryTabWidget::addItem( const QString& linkfile ) { int i=0; AppLnk *app = new AppLnk(linkfile); if ( !app->isValid() ) { delete app; return; } if ( !app->file().isEmpty() ) { // A document delete app; app = new DocLnk(linkfile); ((LauncherView*)(stack->widget(ids.count()-1)))->addItem(app); return; } for ( QStringList::Iterator it=ids.begin(); it!=ids.end(); ++it) { if ( !(*it).isEmpty() ) { QRegExp tf(*it,FALSE,TRUE); if ( tf.match(app->type()) >= 0 ) { ((LauncherView*)stack->widget(i))->addItem(app); return; } i++; } } } void CategoryTabWidget::initializeCategories(AppLnkSet* rootFolder, AppLnkSet* docFolder, const QList<FileSystem> &fs) { delete categoryBar; categoryBar = new CategoryTabBar( this ); QPalette pal = categoryBar->palette(); pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) ); pal.setColor( QColorGroup::Background, pal.active().background().light(110) ); categoryBar->setPalette( pal ); delete stack; stack = new QWidgetStack(this); tabs=0; ids.clear(); QStringList types = rootFolder->types(); for ( QStringList::Iterator it=types.begin(); it!=types.end(); ++it) { if ( !(*it).isEmpty() ) { newView(*it,rootFolder->typePixmap(*it),rootFolder->typeName(*it)); } } QListIterator<AppLnk> it( rootFolder->children() ); AppLnk* l; while ( (l=it.current()) ) { if ( l->type() == "Separator" ) { rootFolder->remove(l); delete l; } else { int i=0; for ( QStringList::Iterator it=types.begin(); it!=types.end(); ++it) { if ( *it == l->type() ) ((LauncherView*)stack->widget(i))->addItem(l,FALSE); i++; } } ++it; } rootFolder->detachChildren(); for (int i=0; i<tabs; i++) ((LauncherView*)stack->widget(i))->sort(); // all documents docview = newView( QString::null, Resource::loadPixmap("DocsIcon"), tr("Documents")); docview->populate( docFolder, QString::null ); docFolder->detachChildren(); docview->setFileSystems(fs); docview->setToolsEnabled(TRUE); connect( categoryBar, SIGNAL(selected(int)), stack, SLOT(raiseWidget(int)) ); ((LauncherView*)stack->widget(0))->setFocus(); categoryBar->show(); stack->show(); } void CategoryTabWidget::updateDocs(AppLnkSet* docFolder, const QList<FileSystem> &fs) { docview->populate( docFolder, QString::null ); docFolder->detachChildren(); docview->setFileSystems(fs); docview->updateTools(); } LauncherView* CategoryTabWidget::newView( const QString& id, const QPixmap& pm, const QString& label ) { LauncherView* view = new LauncherView( stack ); connect( view, SIGNAL(clicked(const AppLnk*)), this, SIGNAL(clicked(const AppLnk*))); connect( view, SIGNAL(rightPressed(AppLnk*)), this, SIGNAL(rightPressed(AppLnk*))); ids.append(id); categoryBar->addTab( new QTab( pm, label ) ); stack->addWidget( view, tabs++ ); return view; } void CategoryTabWidget::updateLink(const QString& linkfile) { int i=0; LauncherView* view; while ((view = (LauncherView*)stack->widget(i++))) { if ( view->removeLink(linkfile) ) break; } addItem(linkfile); docview->updateTools(); } void CategoryTabWidget::paletteChange( const QPalette &p ) { QVBox::paletteChange( p ); QPalette pal = palette(); pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) ); pal.setColor( QColorGroup::Background, pal.active().background().light(110) ); categoryBar->setPalette( pal ); categoryBar->update(); } void CategoryTabWidget::setBusy(bool on) { if ( on ) ((LauncherView*)stack->visibleWidget())->setBusy(TRUE); else for (int i=0; i<tabs; i++) ((LauncherView*)stack->widget(i))->setBusy(FALSE); } CategoryTabBar::CategoryTabBar( QWidget *parent, const char *name ) : QTabBar( parent, name ) { setFocusPolicy( NoFocus ); connect( this, SIGNAL( selected(int) ), this, SLOT( layoutTabs() ) ); } CategoryTabBar::~CategoryTabBar() { } void CategoryTabBar::layoutTabs() { if ( !count() ) return; // int percentFalloffTable[] = { 100, 70, 40, 12, 6, 3, 1, 0 }; int hiddenTabWidth = -12; int middleTab = currentTab(); int hframe, vframe, overlap; style().tabbarMetrics( this, hframe, vframe, overlap ); QFontMetrics fm = fontMetrics(); int x = 0; QRect r; QTab *t; int available = width()-1; int required = 0; for ( int i = 0; i < count(); i++ ) { t = tab(i); // if (( i < (middleTab - 1) ) || ( i > (middleTab + 1) )) { if ( i != middleTab ) { // required += hiddenTabWidth + hframe - overlap; available -= hiddenTabWidth + hframe - overlap; if ( t->iconSet() != 0 ) available -= t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); } else { required += fm.width( t->text() ) + hframe - overlap; if ( t->iconSet() != 0 ) required += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); } } for ( int i = 0; i < count(); i++ ) { t = tab(i); // if (( i < (middleTab - 1) ) || ( i > (middleTab + 1) )) { if ( i != middleTab ) { int w = hiddenTabWidth; int ih = 0; if ( t->iconSet() != 0 ) { w += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); } int h = QMAX( fm.height(), ih ); h = QMAX( h, QApplication::globalStrut().height() ); h += vframe; w += hframe; t->setRect( QRect(x, 0, w, h) ); x += t->rect().width() - overlap; r = r.unite( t->rect() ); } else { int w = fm.width( t->text() ); int ih = 0; if ( t->iconSet() != 0 ) { w += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); } int h = QMAX( fm.height(), ih ); h = QMAX( h, QApplication::globalStrut().height() ); h += vframe; w += hframe; // t->setRect( QRect(x, 0, w * available/required, h) ); t->setRect( QRect(x, 0, available, h) ); x += t->rect().width() - overlap; r = r.unite( t->rect() ); } } QRect rr = tab(count()-1)->rect(); rr.setRight(width()-1); tab(count()-1)->setRect( rr ); for ( t = tabList()->first(); t; t = tabList()->next() ) { QRect tr = t->rect(); tr.setHeight( r.height() ); t->setRect( tr ); } update(); } void CategoryTabBar::paint( QPainter * p, QTab * t, bool selected ) const { #if QT_VERSION >= 300 QStyle::SFlags flags = QStyle::Style_Default; if ( selected ) flags |= QStyle::Style_Selected; style().drawControl( QStyle::CE_TabBarTab, p, this, t->rect(), colorGroup(), flags, QStyleOption(t) ); #else style().drawTab( p, this, t, selected ); #endif QRect r( t->rect() ); QFont f( font() ); if ( selected ) f.setBold( TRUE ); p->setFont( f ); int iw = 0; int ih = 0; if ( t->iconSet() != 0 ) { iw = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 2; ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); } int w = iw + p->fontMetrics().width( t->text() ) + 4; int h = QMAX(p->fontMetrics().height() + 4, ih ); paintLabel( p, QRect( r.left() + (r.width()-w)/2 - 3, r.top() + (r.height()-h)/2, w, h ), t, #if QT_VERSION >= 300 t->identifier() == keyboardFocusTab() #else t->identitifer() == keyboardFocusTab() #endif ); } void CategoryTabBar::paintLabel( QPainter* p, const QRect&, QTab* t, bool has_focus ) const { QRect r = t->rect(); // if ( t->id != currentTab() ) //r.moveBy( 1, 1 ); // if ( t->iconSet() ) { // the tab has an iconset, draw it in the right mode QIconSet::Mode mode = (t->isEnabled() && isEnabled()) ? QIconSet::Normal : QIconSet::Disabled; if ( mode == QIconSet::Normal && has_focus ) mode = QIconSet::Active; QPixmap pixmap = t->iconSet()->pixmap( QIconSet::Small, mode ); int pixw = pixmap.width(); int pixh = pixmap.height(); p->drawPixmap( r.left() + 6, r.center().y() - pixh / 2 + 1, pixmap ); r.setLeft( r.left() + pixw + 5 ); } QRect tr = r; if ( r.width() < 20 ) return; if ( t->isEnabled() && isEnabled() ) { #if defined(_WS_WIN32_) if ( colorGroup().brush( QColorGroup::Button ) == colorGroup().brush( QColorGroup::Background ) ) p->setPen( colorGroup().buttonText() ); else p->setPen( colorGroup().foreground() ); #else p->setPen( colorGroup().foreground() ); #endif p->drawText( tr, AlignCenter | AlignVCenter | ShowPrefix, t->text() ); } else { p->setPen( palette().disabled().foreground() ); p->drawText( tr, AlignCenter | AlignVCenter | ShowPrefix, t->text() ); } } //--------------------------------------------------------------------------- Launcher::Launcher( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { setCaption( tr("Launcher") ); syncDialog = 0; // we have a pretty good idea how big we'll be setGeometry( 0, 0, qApp->desktop()->width(), qApp->desktop()->height() ); tabs = 0; rootFolder = 0; docsFolder = 0; - int stamp = uidgen.generate(); - uidgen.store( stamp ); + int stamp = uidgen.generate(); // this is our timestamp to see which devices we know + //uidgen.store( stamp ); m_timeStamp = QString::number( stamp ); tabs = new CategoryTabWidget( this ); tabs->setMaximumWidth( qApp->desktop()->width() ); setCentralWidget( tabs ); connect( tabs, SIGNAL(selected(const QString&)), this, SLOT(viewSelected(const QString&)) ); connect( tabs, SIGNAL(clicked(const AppLnk*)), this, SLOT(select(const AppLnk*))); connect( tabs, SIGNAL(rightPressed(AppLnk*)), this, SLOT(properties(AppLnk*))); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QCopChannel* sysChannel = new QCopChannel( "QPE/System", this ); connect( sysChannel, SIGNAL(received(const QCString &, const QByteArray &)), this, SLOT(systemMessage( const QCString &, const QByteArray &)) ); #endif storage = new StorageInfo( this ); connect( storage, SIGNAL( disksChanged() ), SLOT( storageChanged() ) ); updateTabs(); preloadApps(); in_lnk_props = FALSE; got_lnk_change = FALSE; } Launcher::~Launcher() { } static bool isVisibleWindow(int wid) { const QList<QWSWindow> &list = qwsServer->clientWindows(); QWSWindow* w; for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) { if ( w->winId() == wid ) return !w->isFullyObscured(); } return FALSE; } void Launcher::showMaximized() { if ( isVisibleWindow( winId() ) ) doMaximize(); else QTimer::singleShot( 20, this, SLOT(doMaximize()) ); } void Launcher::doMaximize() { QMainWindow::showMaximized(); } void Launcher::updateMimeTypes() { MimeType::clear(); updateMimeTypes(rootFolder); } void Launcher::updateMimeTypes(AppLnkSet* folder) { for ( QListIterator<AppLnk> it( folder->children() ); it.current(); ++it ) { AppLnk *app = it.current(); if ( app->type() == "Folder" ) updateMimeTypes((AppLnkSet *)app); else { MimeType::registerApp(*app); } } } void Launcher::loadDocs() // ok here comes a hack belonging to Global:: { qWarning("loading Documents" ); qWarning("The currentTimeStamp is: %s", m_timeStamp.latin1() ); delete docsFolder; docsFolder = new DocLnkSet; qWarning("new DocLnkSet" ); + DocLnkSet *tmp = 0; + QString home = QString(getenv("HOME")) + "/Documents"; + tmp = new DocLnkSet( home , QString::null); + docsFolder->appendFrom( *tmp ); + delete tmp; // find out wich filesystems are new in this round // We will do this by having a timestamp inside each mountpoint // if the current timestamp doesn't match this is a new file system and // come up with our MediumMountGui :) let the hacking begin int stamp = uidgen.generate(); - QString newStamp = QString::number( stamp ); - qWarning("new time stamp is: %s", newStamp.latin1() ); + QString newStamp = QString::number( stamp ); // generates newtime Stamp StorageInfo storage; const QList<FileSystem> &fileSystems = storage.fileSystems(); - qWarning("QList<FileSystem>" ); QListIterator<FileSystem> it ( fileSystems ); - qWarning("iterator initiliazed" ); for ( ; it.current(); ++it ) { - qWarning("inside for loop" ); - qWarning("checking device %s", (*it)->path().latin1() ); if ( (*it)->isRemovable() ) { // let's find out if we should search on it qWarning("%s is removeable", (*it)->path().latin1() ); OConfig cfg( (*it)->path() + "/.opiestorage.cf"); cfg.setGroup("main"); QString stamp = cfg.readEntry("timestamp", QDateTime::currentDateTime().toString() ); if( stamp == m_timeStamp ){ // ok we know this card - qWarning("time stamp match" ); - cfg.writeEntry("timestamp", newStamp ); + cfg.writeEntry("timestamp", newStamp ); //just write a new timestamp // we need to scan the list now. Hopefully the cache will be there - }else{ // come up with the gui - qWarning("time stamp doesn't match" ); + // read the mimetypes from the config and search for documents + QStringList mimetypes = configToMime( &cfg); + tmp = new DocLnkSet( (*it)->path(), mimetypes.join(";") ); + docsFolder->appendFrom( *tmp ); + delete tmp; + + }else{ // come up with the gui cause this a new card MediumMountGui medium((*it)->path() ); - qWarning("medium mount gui created" ); - if( medium.check() ){ - qWarning("need to check this device" ); - if( medium.exec() ){ //ok + if( medium.check() ){ // we did not ask before or ask again is off + if( medium.exec() ){ // he clicked yes so search it // speicher - qWarning("execed" ); - cfg.read(); + cfg.read(); // cause of a race we need to reread cfg.writeEntry("timestamp", newStamp ); - } - }else{ - qWarning("wrong :(" ); + }// no else + }else{ // we checked // do something different see what we need to do + // let's see if we should check the device + cfg.setGroup("main" ); + bool check = cfg.readBoolEntry("autocheck", true ); + if( check ){ // find the documents + tmp = new DocLnkSet( (*it)->path(), configToMime(&cfg ).join(";") ); + docsFolder->appendFrom( *tmp ); + delete tmp; + } } } } } - qWarning("findDocuments" ); - Global::findDocuments(docsFolder); // get rid of this call later - qWarning("done" ); m_timeStamp = newStamp; } void Launcher::updateTabs() { MimeType::updateApplications(); // ### reads all applnks twice delete rootFolder; rootFolder = new AppLnkSet( MimeType::appsFolderName() ); loadDocs(); tabs->initializeCategories(rootFolder, docsFolder, storage->fileSystems()); } void Launcher::updateDocs() { loadDocs(); tabs->updateDocs(docsFolder,storage->fileSystems()); } void Launcher::viewSelected(const QString& s) { setCaption( s + tr(" - Launcher") ); } void Launcher::nextView() { tabs->nextTab(); } void Launcher::select( const AppLnk *appLnk ) { if ( appLnk->type() == "Folder" ) { // Not supported: flat is simpler for the user } else { if ( appLnk->exec().isNull() ) { QMessageBox::information(this,tr("No application"), tr("<p>No application is defined for this document." "<p>Type is %1.").arg(appLnk->type())); return; } tabs->setBusy(TRUE); emit executing( appLnk ); appLnk->execute(); } } void Launcher::externalSelected(const AppLnk *appLnk) { tabs->setBusy(TRUE); emit executing( appLnk ); } void Launcher::properties( AppLnk *appLnk ) { if ( appLnk->type() == "Folder" ) { // Not supported: flat is simpler for the user } else { in_lnk_props = TRUE; got_lnk_change = FALSE; LnkProperties prop(appLnk); connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *))); prop.showMaximized(); prop.exec(); in_lnk_props = FALSE; if ( got_lnk_change ) { updateLink(lnk_change); } } } void Launcher::updateLink(const QString& link) { if (link.isNull()) updateTabs(); else if (link.isEmpty()) updateDocs(); else tabs->updateLink(link); } void Launcher::systemMessage( const QCString &msg, const QByteArray &data) { QDataStream stream( data, IO_ReadOnly ); if ( msg == "linkChanged(QString)" ) { QString link; stream >> link; if ( in_lnk_props ) { got_lnk_change = TRUE; lnk_change = link; } else { updateLink(link); } } else if ( msg == "busy()" ) { emit busy(); } else if ( msg == "notBusy(QString)" ) { QString app; stream >> app; tabs->setBusy(FALSE); emit notBusy(app); } else if ( msg == "mkdir(QString)" ) { QString dir; stream >> dir; if ( !dir.isEmpty() ) mkdir( dir ); } else if ( msg == "rdiffGenSig(QString,QString)" ) { QString baseFile, sigFile; stream >> baseFile >> sigFile; QRsync::generateSignature( baseFile, sigFile ); } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) { QString baseFile, sigFile, deltaFile; stream >> baseFile >> sigFile >> deltaFile; QRsync::generateDiff( baseFile, sigFile, deltaFile ); } else if ( msg == "rdiffApplyPatch(QString,QString)" ) { QString baseFile, deltaFile; stream >> baseFile >> deltaFile; if ( !QFile::exists( baseFile ) ) { QFile f( baseFile ); f.open( IO_WriteOnly ); f.close(); } QRsync::applyDiff( baseFile, deltaFile ); QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" ); e << baseFile; } else if ( msg == "rdiffCleanup()" ) { mkdir( "/tmp/rdiff" ); QDir dir; dir.setPath( "/tmp/rdiff" ); QStringList entries = dir.entryList(); for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it ) dir.remove( *it ); } else if ( msg == "sendHandshakeInfo()" ) { QString home = getenv( "HOME" ); QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" ); e << home; int locked = (int) Desktop::screenLocked(); e << locked; // register an app for autostart // if clear is send the list is cleared. } else if ( msg == "autoStart(QString)" ) { QString appName; stream >> appName; Config cfg( "autostart" ); cfg.setGroup( "AutoStart" ); if ( appName.compare("clear") == 0){ cfg.writeEntry("Apps", ""); } } else if ( msg == "autoStart(QString,QString)" ) { QString modifier, appName; stream >> modifier >> appName; Config cfg( "autostart" ); cfg.setGroup( "AutoStart" ); if ( modifier.compare("add") == 0 ){ // only add it appname is entered if (!appName.isEmpty()) { cfg.writeEntry("Apps", appName); } } else if (modifier.compare("remove") == 0 ) { // need to change for multiple entries // actually remove is right now simular to clear, but in future there // should be multiple apps in autostart possible. QString checkName; checkName = cfg.readEntry("Apps", ""); if (checkName == appName) { cfg.writeEntry("Apps", ""); } } } else if ( msg == "sendCardInfo()" ) { QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" ); const QList<FileSystem> &fs = storage->fileSystems(); QListIterator<FileSystem> it ( fs ); QString s; QString homeDir = getenv("HOME"); QString hardDiskHome; for ( ; it.current(); ++it ) { if ( (*it)->isRemovable() ) s += (*it)->name() + "=" + (*it)->path() + "/Documents " + QString::number( (*it)->availBlocks() * (*it)->blockSize() ) + " " + (*it)->options() + ";"; else if ( (*it)->disk() == "/dev/mtdblock1" || (*it)->disk() == "/dev/mtdblock/1" ) s += (*it)->name() + "=" + homeDir + "/Documents " + QString::number( (*it)->availBlocks() * (*it)->blockSize() ) + " " + (*it)->options() + ";"; else if ( (*it)->name().contains( "Hard Disk") && homeDir.contains( (*it)->path() ) && (*it)->path().length() > hardDiskHome.length() ) hardDiskHome = (*it)->name() + "=" + homeDir + "/Documents " + QString::number( (*it)->availBlocks() * (*it)->blockSize() ) diff --git a/core/launcher/mediummountgui.cpp b/core/launcher/mediummountgui.cpp index e3fa5bd..f0de85b 100644 --- a/core/launcher/mediummountgui.cpp +++ b/core/launcher/mediummountgui.cpp @@ -1,233 +1,235 @@ #include "mediummountgui.h" #include <qvariant.h> #include <qcheckbox.h> #include <qgroupbox.h> #include <qlabel.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qlayout.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h> #include <qpe/resource.h> #include <opie/oconfig.h> #include <qapplication.h> MediumMountGui::MediumMountGui( const QString &path ,QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, true ) { QWidget *d = QApplication::desktop(); int w=d->width(); int h=d->height(); resize( w , h ); setCaption( tr( "Medium inserted" ) ); mediumPath = path; readConfig(); startGui(); } void MediumMountGui::readConfig(){ OConfig cfg (mediumPath +"/.opiestorage.cf"); cfg.setGroup("main"); checkagain = cfg.readBoolEntry("check", false); cfg.setGroup("mimetypes"); checkmimeaudio = cfg.readBoolEntry("audio", true); checkmimeimage = cfg.readBoolEntry("image", true); checkmimetext = cfg.readBoolEntry("text", true); checkmimevideo = cfg.readBoolEntry("video", true); checkmimeall = cfg.readBoolEntry("all", true); cfg.setGroup("dirs"); limittodirs = cfg.readEntry("dirs", ""); } bool MediumMountGui::check() { return !checkagain; } QStringList MediumMountGui::dirs() { QStringList list = QStringList::split(",", limittodirs ); return list; } void MediumMountGui::writeConfig(bool autocheck) { OConfig cfg (mediumPath +"/.opiestorage.cf"); cfg.setGroup("main"); cfg.writeEntry("check", AskBox->isChecked() ); cfg.writeEntry("autocheck", autocheck ); cfg.setGroup("mimetypes"); cfg.writeEntry("audio", CheckBoxAudio->isChecked() ); cfg.writeEntry("image",CheckBoxImage->isChecked() ); cfg.writeEntry("text",CheckBoxImage->isChecked() ); cfg.writeEntry("video",CheckBoxVideo->isChecked() ); cfg.writeEntry("all",CheckBoxAll->isChecked() ); cfg.setGroup("dirs"); cfg.writeEntry("dirs", ""); - // if all is checked then add only "null" to the list. + // if all is checked then add only "QString::null" to the list. if (checkmimeall) { - mimeTypeList += ("null"); + mimeTypeList.clear(); + mimeTypeList += QString::null; } else { if (checkmimeaudio) { mimeTypeList += ("audio//*"); } if (checkmimetext) { mimeTypeList += ("text//*"); } if (checkmimevideo) { mimeTypeList += ("video//*"); } if (checkmimeimage) { mimeTypeList += ("image//*"); } if (checkmimeall) { - mimeTypeList << ("null"); + mimeTypeList.clear(); + mimeTypeList << QString::null; } } - cfg.write(); + cfg.write(); // not really needed here but just to be sure } void MediumMountGui::startGui() { QPixmap image = Resource::loadPixmap( "HelpBrowser"); Text_2 = new QLabel( this ); Text_2->setGeometry( QRect( 10, 15, 40, 40 ) ); Text_2->setPixmap( image ); Text = new QLabel( this, "Text" ); Text->setGeometry( QRect( 55, 11, this->width()-50, 50 ) ); Text->setText( tr( "A <b>storage medium</b> was inserted. Should it be scanned for media files?" ) ); // media box GroupBox1 = new QGroupBox( this, "GroupBox1" ); GroupBox1->setGeometry( QRect( 10, 80, (this->width())-25, 80 ) ); GroupBox1->setTitle( tr( "Which media files" ) ); CheckBoxAudio = new QCheckBox( GroupBox1, "CheckBoxAudio" ); CheckBoxAudio->setGeometry( QRect( 10, 15, (GroupBox1->width()/2)-15 , 15 ) ); CheckBoxAudio->setText( tr( "Audio" ) ); CheckBoxImage = new QCheckBox( GroupBox1, "CheckBoxImage" ); CheckBoxImage->setGeometry( QRect( 10, 35,(GroupBox1->width()/2)-15, 15 ) ); CheckBoxImage->setText( tr( "Image" ) ); CheckBoxText = new QCheckBox( GroupBox1, "CheckBoxText" ); CheckBoxText->setGeometry( QRect((GroupBox1->width()/2) , 15, (GroupBox1->width()/2)-15, 15 ) ); CheckBoxText->setText( tr( "Text" ) ); CheckBoxVideo = new QCheckBox( GroupBox1, "CheckBoxVideo" ); CheckBoxVideo->setGeometry( QRect( (GroupBox1->width()/2), 35, (GroupBox1->width()/2)-15, 15 ) ); CheckBoxVideo->setText( tr( "Video" ) ); CheckBoxAll = new QCheckBox ( GroupBox1); CheckBoxAll->setGeometry( QRect( 10, 55, (GroupBox1->width()/2)-15, 15 ) ); CheckBoxAll->setText( tr( "All" ) ); QObject::connect( (QObject*)CheckBoxAll, SIGNAL( clicked() ), this, SLOT( deactivateOthers()) ); CheckBoxLink = new QCheckBox ( GroupBox1); CheckBoxLink->setGeometry( QRect( (GroupBox1->width()/2), 55, (GroupBox1->width()/2)-15, 15 ) ); CheckBoxLink->setText( tr( "Link apps" ) ); // as long as the feature is not supported CheckBoxLink->setEnabled(false); // select dirs DirSelectText = new QLabel( this, "DirSelectText" ); DirSelectText->setGeometry( QRect( 10, 160,this->width() , 20 ) ); DirSelectText->setText( tr( "Limit search to dir: (not used yet)" ) ); LineEdit1 = new QLineEdit( this ); LineEdit1->setGeometry( QRect( 10, 180, (this->width())-60, 20 ) ); PushButton3 = new QPushButton( this ); PushButton3->setGeometry( QRect( (this->width())-40, 180, 30, 20 ) ); PushButton3->setText( tr( "Add" ) ); // decision DirSelectText_2 = new QLabel( this ); DirSelectText_2->setGeometry( QRect( 10,240,this->width(), 15 ) ); DirSelectText_2->setText( tr( "Your decision will be stored on the medium." ) ); // ask again AskBox = new QCheckBox( this ); AskBox->setGeometry( QRect( 10, 215, (this->width())-15 , 15 ) ); AskBox->setText( tr( "Do not ask again for this medium" ) ); AskBox->setChecked(checkagain); CheckBoxAudio->setChecked(checkmimeaudio); CheckBoxImage->setChecked(checkmimeimage); CheckBoxText->setChecked(checkmimetext); CheckBoxVideo->setChecked(checkmimevideo); // buttons quit = new QPushButton( this ); quit->setGeometry( QRect( (this->width()/2)- 90 , 260, 80, 22 ) ); quit->setFocus(); quit->setText( tr( "Yes" ) ); quit_2 = new QPushButton( this ); quit_2->setGeometry( QRect((this->width()/2) , 260, 80, 22 ) ); quit_2->setText( tr( "No" ) ); QObject::connect( (QObject*)quit, SIGNAL( clicked() ), this, SLOT(yesPressed() ) ); QObject::connect( (QObject*)quit_2, SIGNAL( clicked() ), this, SLOT(noPressed() ) ); } void MediumMountGui::deactivateOthers() { bool mod = !(CheckBoxAll->isChecked()); //if (!CheckBoxVideo->isChecked()){ // mod = false; //} else { // mod = true; //} CheckBoxVideo->setEnabled(mod); CheckBoxAudio->setEnabled(mod); CheckBoxText->setEnabled(mod); CheckBoxImage->setEnabled(mod); } void MediumMountGui::yesPressed() { writeConfig(true); // and do something accept(); } QStringList MediumMountGui::mimeTypes(){ return mimeTypeList; } void MediumMountGui::noPressed() { writeConfig(false); reject(); } MediumMountGui::~MediumMountGui(){ } |