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) (unidiff)
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) (show whitespace changes)
-rw-r--r--library/applnk.cpp60
1 files changed, 46 insertions, 14 deletions
diff --git a/library/applnk.cpp b/library/applnk.cpp
index 1c1a227..80f2c62 100644
--- a/library/applnk.cpp
+++ b/library/applnk.cpp
@@ -981,17 +981,52 @@ void AppLnk::removeLinkFile()
981 } 981 }
982} 982}
983 983
984class AppLnkImagePrivate {
985public :
986 AppLnkImagePrivate( const QString & ImageName ) {
987 IconName = ImageName;
988 Small = 0;
989 Big = 0;
990 }
991 ~AppLnkImagePrivate( ) {
992 if ( Small ) delete Small;
993 if ( Big ) delete Big;
994 }
995
996 inline QPixmap * small( void ) {
997 if( ! Small ) {
998 QImage unscaledIcon = Resource::loadImage( IconName );
999 // works as long as smallSize remains static
1000 Small = new QPixmap();
1001 Small->convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
1002 }
1003 return Small;
1004 }
1005
1006 inline QPixmap * big( void ) {
1007 if( ! Big ) {
1008 QImage unscaledIcon = Resource::loadImage( IconName );
1009 // works as long as bigSize remains static
1010 Big = new QPixmap();
1011 Big->convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
1012 }
1013 return Big;
1014 }
1015
1016 QString IconName;
1017 QPixmap * Small;
1018 QPixmap * Big;
1019};
1020
984class AppLnkSetPrivate { 1021class AppLnkSetPrivate {
985public: 1022public:
986 AppLnkSetPrivate() 1023 AppLnkSetPrivate()
987 { 1024 {
988 typPix.setAutoDelete(TRUE); 1025 typPix.setAutoDelete(TRUE);
989 typPixBig.setAutoDelete(TRUE);
990 typName.setAutoDelete(TRUE); 1026 typName.setAutoDelete(TRUE);
991 } 1027 }
992 1028
993 QDict<QPixmap> typPix; 1029 QDict<AppLnkImagePrivate> typPix;
994 QDict<QPixmap> typPixBig;
995 QDict<QString> typName; 1030 QDict<QString> typName;
996}; 1031};
997 1032
@@ -1090,14 +1125,11 @@ void AppLnkSet::findChildren(const QString &dr, const QString& typ, const QStrin
1090 config.setGroup( "Desktop Entry" ); 1125 config.setGroup( "Desktop Entry" );
1091 typNameLocal = config.readEntry( "Name", typNameLocal ); 1126 typNameLocal = config.readEntry( "Name", typNameLocal );
1092 if ( !typ.isEmpty() ) { 1127 if ( !typ.isEmpty() ) {
1093 QString iconFile = config.readEntry( "Icon", "AppsIcon" ); 1128 d->typPix.insert( typ,
1094 QImage unscaledIcon = Resource::loadImage( iconFile ); 1129 new AppLnkImagePrivate( config.readEntry( "Icon", "AppsIcon" ) )
1095 QPixmap pm, bpm; 1130 );
1096 pm.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
1097 bpm.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
1098 d->typPix.insert(typ, new QPixmap(pm));
1099 d->typPixBig.insert(typ, new QPixmap(bpm));
1100 d->typName.insert(typ, new QString(typNameLocal)); 1131 d->typName.insert(typ, new QString(typNameLocal));
1132
1101 } 1133 }
1102 } 1134 }
1103 1135
@@ -1192,8 +1224,8 @@ QString AppLnkSet::typeName( const QString& t ) const
1192*/ 1224*/
1193QPixmap AppLnkSet::typePixmap( const QString& t ) const 1225QPixmap AppLnkSet::typePixmap( const QString& t ) const
1194{ 1226{
1195 QPixmap *pm = d->typPix.find(t); 1227 AppLnkImagePrivate *alip = d->typPix.find(t);
1196 return pm ? *pm : QPixmap(); 1228 return alip ? *(alip->small()) : QPixmap();
1197} 1229}
1198 1230
1199/*! 1231/*!
@@ -1204,8 +1236,8 @@ QPixmap AppLnkSet::typePixmap( const QString& t ) const
1204*/ 1236*/
1205QPixmap AppLnkSet::typeBigPixmap( const QString& t ) const 1237QPixmap AppLnkSet::typeBigPixmap( const QString& t ) const
1206{ 1238{
1207 QPixmap *pm = d->typPixBig.find(t); 1239 AppLnkImagePrivate *alip = d->typPix.find(t);
1208 return pm ? *pm : QPixmap(); 1240 return alip ? *(alip->big()) : QPixmap();
1209} 1241}
1210 1242
1211/*! 1243/*!