konq_pixmapprovider.cc
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <qbitmap.h>
00021
00022 #include <kapplication.h>
00023 #include <kiconloader.h>
00024 #include <kmimetype.h>
00025 #include <kprotocolinfo.h>
00026
00027 #include "konq_pixmapprovider.h"
00028
00029 KonqPixmapProvider * KonqPixmapProvider::s_self = 0L;
00030
00031 KonqPixmapProvider * KonqPixmapProvider::self()
00032 {
00033 if ( !s_self )
00034 s_self = new KonqPixmapProvider( kapp, "KonqPixmapProvider" );
00035
00036 return s_self;
00037 }
00038
00039 KonqPixmapProvider::KonqPixmapProvider( QObject *parent, const char *name )
00040 : KPixmapProvider(),
00041 KonqFavIconMgr( parent, name )
00042 {
00043 }
00044
00045 KonqPixmapProvider::~KonqPixmapProvider()
00046 {
00047 s_self = 0L;
00048 }
00049
00050
00051
00052
00053
00054 QPixmap KonqPixmapProvider::pixmapFor( const QString& url, int size )
00055 {
00056 QMapIterator<QString,QString> it = iconMap.find( url );
00057 QString icon;
00058 if ( it != iconMap.end() ) {
00059 icon = it.data();
00060 if ( !icon.isEmpty() )
00061 return loadIcon( url, icon, size );
00062 }
00063
00064 KURL u;
00065 if ( url.at(0) == '/' )
00066 u.setPath( url );
00067 else
00068 u = url;
00069
00070 icon = KMimeType::iconForURL( u );
00071
00072 Q_ASSERT( !icon.isEmpty() );
00073
00074
00075 iconMap.insert( url, icon );
00076
00077 return loadIcon( url, icon, size );
00078 }
00079
00080
00081 void KonqPixmapProvider::load( KConfig *kc, const QString& key )
00082 {
00083 iconMap.clear();
00084 QStringList list;
00085 list = kc->readListEntry( key );
00086 QStringList::Iterator it = list.begin();
00087 QString url, icon;
00088 while ( it != list.end() ) {
00089 url = (*it);
00090 if ( ++it == list.end() )
00091 break;
00092 icon = (*it);
00093 iconMap.insert( url, icon );
00094
00095 ++it;
00096 }
00097 }
00098
00099
00100
00101 void KonqPixmapProvider::save( KConfig *kc, const QString& key,
00102 const QStringList& items )
00103 {
00104 QStringList list;
00105 QStringList::ConstIterator it = items.begin();
00106 QMapConstIterator<QString,QString> mit;
00107 while ( it != items.end() ) {
00108 mit = iconMap.find( *it );
00109 if ( mit != iconMap.end() ) {
00110 list.append( mit.key() );
00111 list.append( mit.data() );
00112 }
00113
00114 ++it;
00115 }
00116 kc->writeEntry( key, list );
00117 }
00118
00119 void KonqPixmapProvider::notifyChange( bool isHost, QString hostOrURL,
00120 QString iconName )
00121 {
00122 for ( QMapIterator<QString,QString> it = iconMap.begin();
00123 it != iconMap.end();
00124 ++it )
00125 {
00126 KURL url( it.key() );
00127 if ( url.protocol().startsWith("http") &&
00128 ( ( isHost && url.host() == hostOrURL ) ||
00129 ( url.host() + url.path() == hostOrURL ) ) )
00130 {
00131
00132
00133 QString icon = isHost ? KMimeType::favIconForURL( url ) : iconName;
00134 if ( !icon.isEmpty() )
00135 *it = icon;
00136 }
00137 }
00138
00139 emit changed();
00140 }
00141
00142 void KonqPixmapProvider::clear()
00143 {
00144 iconMap.clear();
00145 }
00146
00147 QPixmap KonqPixmapProvider::loadIcon( const QString& url, const QString& icon,
00148 int size )
00149 {
00150 if ( size <= KIcon::SizeSmall )
00151 return SmallIcon( icon, size );
00152
00153 KURL u;
00154 if ( url.at(0) == '/' )
00155 u.setPath( url );
00156 else
00157 u = url;
00158
00159 QPixmap big;
00160
00161
00162 if ( url.startsWith( "http:/" ) && icon.startsWith("favicons/") ) {
00163 QPixmap small = SmallIcon( icon, size );
00164 big = KGlobal::iconLoader()->loadIcon( KProtocolInfo::icon("http"),
00165 KIcon::Panel, size );
00166
00167 int x = big.width() - small.width();
00168 int y = 0;
00169
00170 if ( big.mask() ) {
00171 QBitmap mask = *big.mask();
00172 bitBlt( &mask, x, y,
00173 small.mask() ? const_cast<QBitmap *>(small.mask()) : &small, 0, 0,
00174 small.width(), small.height(),
00175 small.mask() ? OrROP : SetROP );
00176 big.setMask( mask );
00177 }
00178
00179 bitBlt( &big, x, y, &small );
00180 }
00181
00182 else
00183 big = KGlobal::iconLoader()->loadIcon( icon, KIcon::Panel, size );
00184
00185 return big;
00186 }
This file is part of the documentation for libkonq Library Version 3.2.1.