summaryrefslogtreecommitdiff
path: root/library/applnk.cpp
authorwimpie <wimpie>2005-01-09 02:59:13 (UTC)
committer wimpie <wimpie>2005-01-09 02:59:13 (UTC)
commit987bc9a2c5b39ddd4dc2a665cea65688bfd2179e (patch) (side-by-side diff)
tree815fc6d12162f1a5eccc4b1ae0da61dea3811bdf /library/applnk.cpp
parente54346d28b19d3ac671802a25e8c03f346693291 (diff)
downloadopie-987bc9a2c5b39ddd4dc2a665cea65688bfd2179e.zip
opie-987bc9a2c5b39ddd4dc2a665cea65688bfd2179e.tar.gz
opie-987bc9a2c5b39ddd4dc2a665cea65688bfd2179e.tar.bz2
applnk : lazy loading of mime type icons (load only when needed)
resource.cpp : print warning when requested image cannot be found and print the name of that image too
Diffstat (limited to 'library/applnk.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/applnk.cpp130
1 files changed, 81 insertions, 49 deletions
diff --git a/library/applnk.cpp b/library/applnk.cpp
index 1c1a227..80f2c62 100644
--- a/library/applnk.cpp
+++ b/library/applnk.cpp
@@ -980,19 +980,54 @@ void AppLnk::removeLinkFile()
#endif
}
}
+class AppLnkImagePrivate {
+public :
+ AppLnkImagePrivate( const QString & ImageName ) {
+ IconName = ImageName;
+ Small = 0;
+ Big = 0;
+ }
+ ~AppLnkImagePrivate( ) {
+ if ( Small ) delete Small;
+ if ( Big ) delete Big;
+ }
+
+ inline QPixmap * small( void ) {
+ if( ! Small ) {
+ QImage unscaledIcon = Resource::loadImage( IconName );
+ // works as long as smallSize remains static
+ Small = new QPixmap();
+ Small->convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
+ }
+ return Small;
+ }
+
+ inline QPixmap * big( void ) {
+ if( ! Big ) {
+ QImage unscaledIcon = Resource::loadImage( IconName );
+ // works as long as bigSize remains static
+ Big = new QPixmap();
+ Big->convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
+ }
+ return Big;
+ }
+
+ QString IconName;
+ QPixmap * Small;
+ QPixmap * Big;
+};
+
class AppLnkSetPrivate {
public:
AppLnkSetPrivate()
{
- typPix.setAutoDelete(TRUE);
- typPixBig.setAutoDelete(TRUE);
- typName.setAutoDelete(TRUE);
+ typPix.setAutoDelete(TRUE);
+ typName.setAutoDelete(TRUE);
}
- QDict<QPixmap> typPix;
- QDict<QPixmap> typPixBig;
+ QDict<AppLnkImagePrivate> typPix;
QDict<QString> typName;
};
/*!
@@ -1085,57 +1120,54 @@ void AppLnkSet::findChildren(const QString &dr, const QString& typ, const QStrin
QDir dir( dr );
QString typNameLocal = typName;
if ( dir.exists( ".directory" ) ) {
- Config config( dr + "/.directory", Config::File );
- config.setGroup( "Desktop Entry" );
- typNameLocal = config.readEntry( "Name", typNameLocal );
- if ( !typ.isEmpty() ) {
- QString iconFile = config.readEntry( "Icon", "AppsIcon" );
- QImage unscaledIcon = Resource::loadImage( iconFile );
- QPixmap pm, bpm;
- pm.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
- bpm.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
- d->typPix.insert(typ, new QPixmap(pm));
- d->typPixBig.insert(typ, new QPixmap(bpm));
- d->typName.insert(typ, new QString(typNameLocal));
- }
+ Config config( dr + "/.directory", Config::File );
+ config.setGroup( "Desktop Entry" );
+ typNameLocal = config.readEntry( "Name", typNameLocal );
+ if ( !typ.isEmpty() ) {
+ d->typPix.insert( typ,
+ new AppLnkImagePrivate( config.readEntry( "Icon", "AppsIcon" ) )
+ );
+ d->typName.insert(typ, new QString(typNameLocal));
+
+ }
}
const QFileInfoList *list = dir.entryInfoList();
if ( list ) {
- QFileInfo* fi;
- bool cadded=FALSE;
- for ( QFileInfoListIterator it(*list); (fi=*it); ++it ) {
- QString bn = fi->fileName();
-// qDebug("findChildren "+bn);
- if ( bn[0] != '.' && bn != "CVS" ) {
- if ( fi->isDir() ) {
- QString c = typ.isNull() ? bn : typ+"/"+bn;
- QString d = typNameLocal.isNull() ? bn : typNameLocal+"/"+bn;
- findChildren(fi->filePath(), c, d, depth );
- } else {
- if ( fi->extension(FALSE) == "desktop" ) {
- AppLnk* app = new AppLnk( fi->filePath() );
+ QFileInfo* fi;
+ bool cadded=FALSE;
+ for ( QFileInfoListIterator it(*list); (fi=*it); ++it ) {
+ QString bn = fi->fileName();
+ // qDebug("findChildren "+bn);
+ if ( bn[0] != '.' && bn != "CVS" ) {
+ if ( fi->isDir() ) {
+ QString c = typ.isNull() ? bn : typ+"/"+bn;
+ QString d = typNameLocal.isNull() ? bn : typNameLocal+"/"+bn;
+ findChildren(fi->filePath(), c, d, depth );
+ } else {
+ if ( fi->extension(FALSE) == "desktop" ) {
+ AppLnk* app = new AppLnk( fi->filePath() );
#ifdef QT_NO_QWS_MULTIPROCESS
- if ( !Global::isBuiltinCommand( app->exec() ) )
- delete app;
- else
+ if ( !Global::isBuiltinCommand( app->exec() ) )
+ delete app;
+ else
#endif
- {
- if ( !typ.isEmpty() ) {
- if ( !cadded ) {
- typs.append(typ);
- cadded = TRUE;
- }
- app->setType(typ);
+ {
+ if ( !typ.isEmpty() ) {
+ if ( !cadded ) {
+ typs.append(typ);
+ cadded = TRUE;
+ }
+ app->setType(typ);
+ }
+ add(app);
+ }
+ }
}
- add(app);
- }
}
- }
}
- }
}
}
/*!
@@ -1191,10 +1223,10 @@ QString AppLnkSet::typeName( const QString& t ) const
for documents the type is the document's MIME type.
*/
QPixmap AppLnkSet::typePixmap( const QString& t ) const
{
- QPixmap *pm = d->typPix.find(t);
- return pm ? *pm : QPixmap();
+ AppLnkImagePrivate *alip = d->typPix.find(t);
+ return alip ? *(alip->small()) : QPixmap();
}
/*!
Returns the large pixmap associated with type \a t.
@@ -1203,10 +1235,10 @@ QPixmap AppLnkSet::typePixmap( const QString& t ) const
for documents the type is the document's MIME type.
*/
QPixmap AppLnkSet::typeBigPixmap( const QString& t ) const
{
- QPixmap *pm = d->typPixBig.find(t);
- return pm ? *pm : QPixmap();
+ AppLnkImagePrivate *alip = d->typPix.find(t);
+ return alip ? *(alip->big()) : QPixmap();
}
/*!
Returns the AppLnk with the given \a id.