33#include <QtCore/QCache>
34#include <QtCore/QFileInfo>
36#include <QtCore/QBuffer>
37#include <QtCore/QDataStream>
38#include <QtCore/QByteArray>
39#include <QtCore/QStringBuilder>
41#include <QtGui/QImage>
42#include <QtGui/QMovie>
43#include <QtGui/QPainter>
44#include <QtGui/QPixmap>
45#include <QtGui/QPixmapCache>
47#include <QtSvg/QSvgRenderer>
72static
bool pathIsRelative(const QString &path)
75 return (!path.isEmpty() && path[0] != QChar(
'/'));
77 return QDir::isRelativePath(path);
102 void printTree(QString& dbgString)
const;
107KIconThemeNode::KIconThemeNode(
KIconTheme *_theme)
112KIconThemeNode::~KIconThemeNode()
117void KIconThemeNode::printTree(QString& dbgString)
const
122 dbgString += theme->
name();
126void KIconThemeNode::queryIcons(QStringList *result,
130 *result += theme->queryIcons(size, context);
133void KIconThemeNode::queryIconsByContext(QStringList *result,
137 *result += theme->queryIconsByContext(size, context);
140K3Icon KIconThemeNode::findIcon(
const QString& name,
int size,
143 return theme->iconPath(name, size, match);
157class KIconLoaderPrivate
167 ~KIconLoaderPrivate()
184 bool initIconThemes();
191 K3Icon findMatchingIcon(
const QString& name,
int size)
const;
199 K3Icon findMatchingIconWithGenericFallbacks(
const QString& name,
int size)
const;
205 void addAppThemes(
const QString& appname);
212 void addBaseThemes(KIconThemeNode *node,
const QString &appname);
219 void addInheritedThemes(KIconThemeNode *node,
const QString &appname);
227 void addThemeByName(
const QString &themename,
const QString &appname);
233 QString unknownIconPath(
int size )
const;
239 QString removeIconExtension(
const QString &name)
const;
254 QString makeCacheKey(
const QString &name,
KIconLoader::Group group,
const QStringList &overlays,
255 int size,
int state)
const;
263 QImage createIconImage(
const QString &path,
int size = 0);
269 void insertCachedPixmapWithPath(
const QString &key,
const QPixmap &data,
const QString &path);
276 bool findCachedPixmapWithPath(
const QString &key, QPixmap &data, QString &path);
280 QStringList mThemesInTree;
281 KIconGroup *mpGroups;
282 KIconThemeNode *mpThemeRoot;
291 QCache<QString, PixmapWithPath> mPixmapCache;
293 bool extraDesktopIconsLoaded :1;
296 bool mIconThemeInited :1;
302class KIconLoaderGlobalData
305 KIconLoaderGlobalData() {
308 Q_FOREACH(
const QString& file, genericIconsFiles) {
309 parseGenericIconsFiles(file);
313 QString genericIconFor(
const QString& icon)
const {
314 return m_genericIcons.value(icon);
318 void parseGenericIconsFiles(
const QString& fileName);
322void KIconLoaderGlobalData::parseGenericIconsFiles(
const QString& fileName)
324 QFile file(fileName);
325 if (file.open(QIODevice::ReadOnly)) {
326 QTextStream stream(&file);
327 stream.setCodec(
"ISO 8859-1");
328 while (!stream.atEnd()) {
329 const QString line = stream.readLine();
330 if (line.isEmpty() || line[0] ==
'#')
332 const int pos = line.indexOf(
':');
335 QString mimeIcon = line.left(pos);
336 const int slashindex = mimeIcon.indexOf(QLatin1Char(
'/'));
337 if (slashindex != -1) {
338 mimeIcon[slashindex] = QLatin1Char(
'-');
341 const QString genericIcon = line.mid(pos+1);
342 m_genericIcons.insert(mimeIcon, genericIcon);
350void KIconLoaderPrivate::drawOverlays(
const KIconLoader *iconLoader,
KIconLoader::Group group,
int state, QPixmap& pix,
const QStringList& overlays)
352 if (overlays.isEmpty()) {
356 const int width = pix.size().width();
357 const int height = pix.size().height();
358 const int iconSize = qMin(width, height);
363 }
else if (iconSize <= 48) {
365 }
else if (iconSize <= 96) {
367 }
else if (iconSize < 256) {
373 QPainter painter(&pix);
376 foreach (
const QString& overlay, overlays) {
380 if (overlay.isEmpty()) {
388 const QPixmap pixmap = iconLoader->
loadIcon(overlay, group, overlaySize, state, QStringList(), 0,
true);
390 if (pixmap.isNull()) {
398 startPoint = QPoint(2, height - overlaySize - 2);
402 startPoint = QPoint(width - overlaySize - 2,
403 height - overlaySize - 2);
407 startPoint = QPoint(width - overlaySize - 2, 2);
411 startPoint = QPoint(2, 2);
415 painter.drawPixmap(startPoint, pixmap);
427 setObjectName(_appname);
428 d =
new KIconLoaderPrivate(
this);
432 d->init( _appname, _dirs );
439 d =
new KIconLoaderPrivate(
this);
448 d->mIconCache->clear();
450 d =
new KIconLoaderPrivate(
this);
451 d->init( _appname, _dirs );
454void KIconLoaderPrivate::init(
const QString& _appname,
KStandardDirs *_dirs )
456 extraDesktopIconsLoaded=
false;
457 mIconThemeInited =
false;
466 if (appname.isEmpty())
473 mPixmapCache.setMaxCost(10 * 1024 * 1024);
476 static const char *
const groups[] = {
"Desktop",
"Toolbar",
"MainToolbar",
"Small",
"Panel",
"Dialog", 0L };
481 KIconTheme *defaultSizesTheme = links.empty() ? 0 : links.first()->theme;
484 if (groups[i] == 0L) {
488 KConfigGroup cg(config, QLatin1String(groups[i]) +
"Icons");
489 mpGroups[i].size = cg.readEntry(
"Size", 0);
490 if (QPixmap::defaultDepth() > 8) {
491 mpGroups[i].alphaBlending = cg.readEntry(
"AlphaBlending",
true);
493 mpGroups[i].alphaBlending =
false;
496 if (!mpGroups[i].size && defaultSizesTheme) {
497 mpGroups[i].size = defaultSizesTheme->
defaultSize(i);
502bool KIconLoaderPrivate::initIconThemes()
504 if (mIconThemeInited) {
506 return (mpThemeRoot != 0);
509 mIconThemeInited =
true;
517 kDebug(264) <<
"Couldn't find current icon theme, falling back to default.";
526 mpThemeRoot =
new KIconThemeNode(def);
528 links.append(mpThemeRoot);
529 addBaseThemes(mpThemeRoot, appname);
532 mpDirs->addResourceType(
"appicon",
"data", appname +
"/pics/");
534 mpDirs->addResourceType(
"appicon",
"data", appname +
"/toolbar/");
541 dirs +=
"/usr/share/pixmaps";
544 for (QStringList::ConstIterator it =
dirs.constBegin(); it !=
dirs.constEnd(); ++it)
545 mpDirs->addResourceDir(
"appicon", *it);
548 QString dbgString =
"Theme tree: ";
549 mpThemeRoot->printTree(dbgString);
565 d->mpDirs->addResourceType(
"appicon",
"data", appname +
"/pics/");
567 d->mpDirs->addResourceType(
"appicon",
"data", appname +
"/toolbar/");
568 d->addAppThemes(appname);
571void KIconLoaderPrivate::addAppThemes(
const QString& appname)
580 KIconThemeNode* node =
new KIconThemeNode(def);
581 bool addedToLinks =
false;
583 if (!mThemesInTree.contains(node->theme->internalName())) {
584 mThemesInTree.append(node->theme->internalName());
588 addBaseThemes(node, appname);
596void KIconLoaderPrivate::addBaseThemes(KIconThemeNode *node,
const QString &appname)
608 addInheritedThemes(node, appname);
610 addThemeByName(
"hicolor", appname);
613void KIconLoaderPrivate::addInheritedThemes(KIconThemeNode *node,
const QString &appname)
615 const QStringList lst = node->theme->inherits();
617 for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it) {
618 if ((*it) ==
"hicolor") {
624 addThemeByName(*it, appname);
628void KIconLoaderPrivate::addThemeByName(
const QString &themename,
const QString &appname)
630 if (mThemesInTree.contains(themename + appname)) {
638 KIconThemeNode *n =
new KIconThemeNode(theme);
639 mThemesInTree.append(themename + appname);
641 addInheritedThemes(n, appname);
646 if ( d->extraDesktopIconsLoaded )
return;
652 QStringList::ConstIterator it;
655 for (it=icnlibs.begin(); it!=icnlibs.end(); ++it)
660 const QStringList lst = dir.entryList(QStringList(
"default.*" ), QDir::Dirs);
661 QStringList::ConstIterator it2;
662 for (it2=lst.begin(); it2!=lst.end(); ++it2)
667 r=readlink( QFile::encodeName(*it + *it2) , buf,
sizeof(buf)-1);
671 const QDir dir2( buf );
672 QString themeName=dir2.dirName();
674 if (!list.contains(themeName))
675 list.append(themeName);
680 for (it = list.constBegin(); it != list.constEnd(); ++it)
683 if (*it == QLatin1String(
"default.kde")
684 || *it == QLatin1String(
"default.kde4")) {
687 d->addThemeByName(*it,
"");
690 d->extraDesktopIconsLoaded=
true;
696 return d->extraDesktopIconsLoaded;
701 d->drawOverlays(
this,
group, state, pixmap, overlays);
704QString KIconLoaderPrivate::removeIconExtension(
const QString &name)
const
706 if (name.endsWith(QLatin1String(
".png"))
707 || name.endsWith(QLatin1String(
".xpm"))
708 || name.endsWith(QLatin1String(
".svg"))) {
709 return name.left(name.length() - 4);
710 }
else if (
name.endsWith(QLatin1String(
".svgz"))) {
711 return name.left(
name.length() - 5);
717void KIconLoaderPrivate::normalizeIconMetadata(
KIconLoader::Group &group,
int &size,
int &state)
const
721 kWarning(264) <<
"Illegal icon state: " << state;
746 kWarning(264) <<
"Neither size nor group specified!";
749 size = mpGroups[
group].size;
753QString KIconLoaderPrivate::makeCacheKey(
const QString &name,
KIconLoader::Group group,
754 const QStringList &overlays,
int size,
int state)
const
760 ? QLatin1Literal(
"$kicou_")
761 : QLatin1Literal(
"$kico_"))
764 % QString::number(size)
767 % (
group >= 0 ? mpEffect.fingerprint(group, state)
768 : *NULL_EFFECT_FINGERPRINT);
771QImage KIconLoaderPrivate::createIconImage(
const QString &path,
int size)
775 QString ext = path.right(3).toUpper();
778 if (ext !=
"SVG" && ext !=
"VGZ")
781 img = QImage(path, ext.toLatin1());
783 if (size != 0 && !img.isNull()) {
784 img = img.scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
792 if (renderer.isValid()) {
793 img = QImage(size, size, QImage::Format_ARGB32_Premultiplied);
804void KIconLoaderPrivate::insertCachedPixmapWithPath(
807 const QString &path = QString())
814 output.open(QIODevice::WriteOnly);
816 QDataStream outputStream(&output);
817 outputStream.setVersion(QDataStream::Qt_4_6);
819 outputStream << path;
822 outputStream << data;
827 mIconCache->insert(key,
output.buffer());
831 PixmapWithPath *pixmapPath =
new PixmapWithPath;
832 pixmapPath->pixmap = data;
833 pixmapPath->path = path;
835 mPixmapCache.insert(key, pixmapPath, data.width() * data.height() + 1);
838bool KIconLoaderPrivate::findCachedPixmapWithPath(
const QString &key, QPixmap &data, QString &path)
842 const PixmapWithPath *pixmapPath = mPixmapCache.object(key);
844 path = pixmapPath->path;
845 data = pixmapPath->pixmap;
854 if (!mIconCache->find(key, &result) || result.isEmpty()) {
859 buffer.setBuffer(&result);
860 buffer.open(QIODevice::ReadOnly);
862 QDataStream inputStream(&buffer);
863 inputStream.setVersion(QDataStream::Qt_4_6);
866 inputStream >> tempPath;
868 if (inputStream.status() == QDataStream::Ok) {
870 inputStream >> tempPixmap;
872 if (inputStream.status() == QDataStream::Ok) {
877 PixmapWithPath *newPixmapWithPath =
new PixmapWithPath;
878 newPixmapWithPath->pixmap = data;
879 newPixmapWithPath->path = path;
881 mPixmapCache.insert(key, newPixmapWithPath, data.width() * data.height() + 1);
890K3Icon KIconLoaderPrivate::findMatchingIconWithGenericFallbacks(
const QString& name,
int size)
const
892 K3Icon icon = findMatchingIcon(name, size);
896 const QString genericIcon = s_globalData->genericIconFor(name);
897 if (!genericIcon.isEmpty()) {
898 icon = findMatchingIcon(genericIcon, size);
903K3Icon KIconLoaderPrivate::findMatchingIcon(
const QString& name,
int size)
const
905 const_cast<KIconLoaderPrivate*
>(
this)->initIconThemes();
909 const char *
const ext[4] = {
".png",
".svgz",
".svg",
".xpm" };
910 bool genericFallback =
name.endsWith(QLatin1String(
"-x-generic"));
923 foreach (KIconThemeNode *themeNode, links) {
924 for (
int i = 0 ; i < 4 ; i++) {
926 if (icon.isValid()) {
931 if (icon.isValid()) {
936 if (icon.isValid() && icon.path.contains(
"/apps/")) {
941 foreach (KIconThemeNode *themeNode, links) {
942 QString currentName =
name;
944 while (!currentName.isEmpty()) {
947 for (
int i = 0 ; i < 4 ; i++) {
949 if (icon.isValid()) {
954 if (icon.isValid()) {
960 if (genericFallback) {
965 int rindex = currentName.lastIndexOf(
'-');
967 currentName.truncate(rindex);
969 if (currentName.endsWith(QLatin1String(
"-x")))
974 <<
"text" <<
"application" <<
"image" <<
"audio"
975 <<
"inode" <<
"video" <<
"message" <<
"model" <<
"multipart"
976 <<
"x-content" <<
"x-epoc";
981 if (mediaTypes.contains(currentName)) {
982 currentName += QLatin1String(
"-x-generic");
983 genericFallback =
true;
993inline QString KIconLoaderPrivate::unknownIconPath(
int size )
const
997 K3Icon icon = findMatchingIcon(str_unknown, size);
1000 kDebug(264) <<
"Warning: could not find \"Unknown\" icon for size = "
1010 bool canReturnNull)
const
1012 if (!d->initIconThemes()) {
1016 if (_name.isEmpty() || !pathIsRelative(_name))
1022 QString name = d->removeIconExtension( _name );
1029 path = d->mpDirs->findResource(
"appicon", name + png_ext);
1034 path = d->mpDirs->findResource(
"appicon", name + svgz_ext);
1036 path = d->mpDirs->findResource(
"appicon", name + svg_ext);
1038 path = d->mpDirs->findResource(
"appicon", name + xpm_ext);
1044 kDebug(264) <<
"Illegal icon group: " << group_or_size;
1049 if (group_or_size >= 0)
1050 size = d->mpGroups[group_or_size].size;
1052 size = -group_or_size;
1054 if (_name.isEmpty()) {
1058 return d->unknownIconPath(size);
1061 K3Icon icon = d->findMatchingIconWithGenericFallbacks(name, size);
1063 if (!icon.isValid())
1067 if (!path.isEmpty() || canReturnNull)
1070 return d->unknownIconPath(size);
1076 int state,
const QStringList& overlays, QString *path_store )
const
1078 QString iconName = _iconName;
1079 const int slashindex = iconName.indexOf(QLatin1Char(
'/'));
1080 if (slashindex != -1) {
1081 iconName[slashindex] = QLatin1Char(
'-');
1084 if ( !d->extraDesktopIconsLoaded )
1086 const QPixmap pixmap =
loadIcon( iconName,
group, size, state, overlays, path_store,
true );
1087 if (!pixmap.isNull() ) {
1092 const QPixmap pixmap =
loadIcon(iconName,
group, size, state, overlays, path_store,
true);
1093 if (pixmap.isNull()) {
1095 return loadIcon(
"application-octet-stream",
group, size, state, overlays, path_store,
false);
1101 int state,
const QStringList& overlays,
1102 QString *path_store,
bool canReturnNull)
const
1104 QString name = _name;
1105 bool favIconOverlay =
false;
1107 if (size < 0 || _name.isEmpty())
1121 if (name.startsWith(QLatin1String(
"favicons/")))
1123 favIconOverlay =
true;
1127 bool absolutePath = !pathIsRelative(name);
1128 if (!absolutePath) {
1129 name = d->removeIconExtension(name);
1133 if (name.isEmpty()) {
1139 d->normalizeIconMetadata(
group, size, state);
1142 QString key = d->makeCacheKey(name,
group, overlays, size, state);
1144 bool iconWasUnknown =
false;
1149 if (d->findCachedPixmapWithPath(key, pix, icon.path) && !icon.path.isEmpty()) {
1151 *path_store = icon.path;
1158 if (!d->initIconThemes()) {
1162 favIconOverlay = favIconOverlay && size > 22;
1169 if (absolutePath && !favIconOverlay)
1177 icon = d->findMatchingIconWithGenericFallbacks(favIconOverlay ? QString(
"text-html") : name, size);
1181 if (icon.path.isEmpty()) {
1183 icon.path = (absolutePath) ? name :
1189 if (icon.path.isEmpty() && !canReturnNull) {
1190 icon.path = d->unknownIconPath(size);
1191 iconWasUnknown =
true;
1194 QImage img = d->createIconImage(icon.path, size);
1198 img = d->mpEffect.apply(img,
group, state);
1203 QImage favIcon(name,
"PNG");
1204 if (!favIcon.isNull())
1209 QRect r(favIcon.rect());
1210 r.moveBottomRight(img.rect().bottomRight());
1211 r.adjust(-1, -1, -1, -1);
1214 p.drawImage(r, favIcon);
1218 pix = QPixmap::fromImage(img);
1223 d->drawOverlays(
this,
group, state, pix, overlays);
1227 if (iconWasUnknown) {
1231 d->insertCachedPixmapWithPath(key, pix, icon.path);
1234 *path_store = icon.path;
1245 int dirLen = file.lastIndexOf(
'/');
1247 if (!icon.isEmpty() && file.left(dirLen) != icon.left(dirLen))
1249 QMovie *movie =
new QMovie(file, QByteArray(), parent);
1250 if (!movie->isValid())
1260 if (!d->mpGroups)
return QString();
1262 d->initIconThemes();
1269 if (size == 0 &&
group < 0)
1271 kDebug(264) <<
"Neither size nor group specified!";
1275 QString file = name +
".mng";
1278 file = d->mpDirs->findResource(
"appicon", file);
1283 size = d->mpGroups[
group].size;
1287 foreach(KIconThemeNode *themeNode, d->links)
1294 if ( !icon.isValid() )
1296 foreach(KIconThemeNode *themeNode, d->links)
1304 file = icon.isValid() ? icon.path : QString();
1314 if (!d->mpGroups)
return lst;
1316 d->initIconThemes();
1323 if ((size == 0) && (
group < 0))
1325 kDebug(264) <<
"Neither size nor group specified!";
1329 QString file = name +
"/0001";
1332 file = d->mpDirs->findResource(
"appicon", file +
".png");
1336 size = d->mpGroups[
group].size;
1337 K3Icon icon = d->findMatchingIcon(file, size);
1338 file = icon.isValid() ? icon.path : QString();
1344 QString path = file.left(file.length()-8);
1345 DIR* dp = opendir( QFile::encodeName(path) );
1349 KDE_struct_dirent* ep;
1350 while( ( ep = KDE_readdir( dp ) ) != 0L )
1352 QString fn(QFile::decodeName(ep->d_name));
1353 if(!(fn.left(4)).toUInt())
1365 d->initIconThemes();
1366 if (d->mpThemeRoot)
return d->mpThemeRoot->theme;
1372 if (!d->mpGroups)
return -1;
1379 return d->mpGroups[
group].size;
1384 const QDir dir(iconsDir);
1385 const QStringList formats = QStringList() <<
"*.png" <<
"*.xpm" <<
"*.svg" <<
"*.svgz";
1386 const QStringList lst = dir.entryList(formats, QDir::Files);
1388 QStringList::ConstIterator it;
1389 for (it=lst.begin(); it!=lst.end(); ++it)
1390 result += iconsDir +
'/' + *it;
1397 d->initIconThemes();
1402 kDebug(264) <<
"Illegal icon group: " << group_or_size;
1406 if (group_or_size >= 0)
1407 size = d->mpGroups[group_or_size].size;
1409 size = -group_or_size;
1411 foreach(KIconThemeNode *themeNode, d->links)
1412 themeNode->queryIconsByContext(&result, size, context);
1416 QStringList res2, entries;
1417 QStringList::ConstIterator it;
1418 for (it=result.constBegin(); it!=result.constEnd(); ++it)
1420 int n = (*it).lastIndexOf(
'/');
1424 name = (*it).mid(n+1);
1425 name = d->removeIconExtension(name);
1426 if (!entries.contains(name))
1438 d->initIconThemes();
1443 kDebug(264) <<
"Illegal icon group: " << group_or_size;
1447 if (group_or_size >= 0)
1448 size = d->mpGroups[group_or_size].size;
1450 size = -group_or_size;
1452 foreach(KIconThemeNode *themeNode, d->links)
1453 themeNode->queryIcons(&result, size, context);
1457 QStringList res2, entries;
1458 QStringList::ConstIterator it;
1459 for (it=result.constBegin(); it!=result.constEnd(); ++it)
1461 int n = (*it).lastIndexOf(
'/');
1465 name = (*it).mid(n+1);
1466 name = d->removeIconExtension(name);
1467 if (!entries.contains(name))
1479 d->initIconThemes();
1481 foreach(KIconThemeNode *themeNode, d->links)
1482 if( themeNode->theme->hasContext( context ))
1489 return &d->mpEffect;
1494 if (!d->mpGroups)
return false;
1501 return d->mpGroups[
group].alphaBlending;
1505#ifndef KDE_NO_DEPRECATED
1507 bool canReturnNull )
1511 iconset.addPixmap( tmp, QIcon::Active, QIcon::On );
1514 iconset.addPixmap( tmp, QIcon::Disabled, QIcon::On );
1516 iconset.addPixmap( tmp, QIcon::Normal, QIcon::On );
1523QPixmap
DesktopIcon(
const QString& name,
int force_size,
int state,
const QStringList &overlays)
1530#ifndef KDE_NO_DEPRECATED
1538QPixmap
BarIcon(
const QString& name,
int force_size,
int state,
const QStringList &overlays)
1545#ifndef KDE_NO_DEPRECATED
1553QPixmap
SmallIcon(
const QString& name,
int force_size,
int state,
const QStringList &overlays)
1560#ifndef KDE_NO_DEPRECATED
1568QPixmap
MainBarIcon(
const QString& name,
int force_size,
int state,
const QStringList &overlays)
1575#ifndef KDE_NO_DEPRECATED
1583QPixmap
UserIcon(
const QString& name,
int state,
const QStringList &overlays)
1590#ifndef KDE_NO_DEPRECATED
1607 if ( QPixmapCache::find(
"unknown", pix) )
1613 kDebug(264) <<
"Warning: Cannot find \"unknown\" icon.";
1614 pix = QPixmap(32,32);
1618 QPixmapCache::insert(
"unknown", pix);
1629 return globalIconLoader;
1642#include "kiconloader.moc"
QString componentName() const
KStandardDirs * dirs() const
static KGlobalSettings * self()
Return the KGlobalSettings singleton.
Applies effects to icons.
QStringList queryIconsByContext(int group_or_size, KIconLoader::Context context=KIconLoader::Any) const
Queries all available icons for a specific context.
bool alphaBlending(KIconLoader::Group group) const
Checks whether the user wants to blend the icons with the background using the alpha channel informat...
Group
The group of the icon.
@ Small
Small icons, e.g. for buttons.
@ MainToolbar
Main toolbar icons.
KIconLoader(const QString &appname=QString(), KStandardDirs *dirs=0, QObject *parent=0)
Constructs an iconloader.
void addAppDir(const QString &appname)
Adds appname to the list of application specific directories.
QStringList queryIcons(int group_or_size, KIconLoader::Context context=KIconLoader::Any) const
Queries all available icons for a specific group, having a specific context.
QIcon loadIconSet(const QString &name, KIconLoader::Group group, int size=0, bool canReturnNull=false)
Creates an icon set, that will do on-demand loading of the icon.
static KIconLoader * global()
Returns the global icon loader initialized with the global KComponentData.
bool hasContext(KIconLoader::Context context) const
@ ActiveState
Icon is active.
@ DisabledState
Icon is disabled.
@ LastState
Last state (last constant)
@ DefaultState
The default state.
QString moviePath(const QString &name, KIconLoader::Group group, int size=0) const
Returns the path to an animated icon.
QStringList queryIconsByDir(const QString &iconsDir) const
Returns a list of all icons (*.png or *.xpm extension) in the given directory.
QPixmap loadMimeTypeIcon(const QString &iconName, KIconLoader::Group group, int size=0, int state=KIconLoader::DefaultState, const QStringList &overlays=QStringList(), QString *path_store=0) const
Loads an icon for a mimetype.
int currentSize(KIconLoader::Group group) const
Returns the current size of the icon group.
bool extraDesktopThemesAdded() const
Returns if the default icon themes of other desktops have been added to the list of icon themes where...
KIconTheme * theme() const
Returns a pointer to the current theme.
QMovie * loadMovie(const QString &name, KIconLoader::Group group, int size=0, QObject *parent=0) const
Loads an animated icon.
QPixmap loadIcon(const QString &name, KIconLoader::Group group, int size=0, int state=KIconLoader::DefaultState, const QStringList &overlays=QStringList(), QString *path_store=0L, bool canReturnNull=false) const
Loads an icon.
void reconfigure(const QString &_appname, KStandardDirs *_dirs)
Called by KComponentData::newIconLoader to reconfigure the icon loader.
void drawOverlays(const QStringList &overlays, QPixmap &pixmap, KIconLoader::Group group, int state=KIconLoader::DefaultState) const
Draws overlays on the specified pixmap, it takes the width and height of the pixmap into consideratio...
QStringList loadAnimated(const QString &name, KIconLoader::Group group, int size=0) const
Loads an animated icon as a series of still frames.
KIconEffect * iconEffect() const
Returns a pointer to the KIconEffect object used by the icon loader.
void addExtraDesktopThemes()
Adds all the default themes from other desktops at the end of the list of icon themes.
void newIconLoader()
Re-initialize the global icon loader.
Context
Defines the context of the icon.
@ Any
Some icon with unknown purpose.
@ Scalable
Scalable-size icon.
void iconLoaderSettingsChanged()
Emitted by newIconLoader once the new settings have been loaded.
MatchType
The type of a match.
@ MatchBest
Take the best match if there is no exact match.
@ MatchExact
Only try to find an exact match.
QString iconPath(const QString &name, int group_or_size, bool canReturnNull=false) const
Returns the path of an icon.
static QPixmap unknown()
Returns the unknown icon.
bool isValid() const
The icon theme exists?
QString internalName() const
The internal name of the icon theme (same as the name argument passed to the constructor).
static void reconfigure()
Reconfigure the theme.
static QString current()
Returns the current icon theme.
QString name() const
The stylized name of the icon theme.
int defaultSize(KIconLoader::Group group) const
The default size of this theme for a certain icon group.
static QString defaultThemeName()
Returns the default icon theme.
QStringList findAllResources(const char *type, const QString &filter, SearchOptions options, QStringList &relPaths) const
static bool exists(const QString &fullPath)
static QString locateLocal(const char *type, const QString &filename, bool createDir, const KComponentData &cData=KGlobal::mainComponent())
QStringList resourceDirs(const char *type) const
void output(QList< Action > actions, QHash< QString, QString > domain)
#define K_GLOBAL_STATIC(TYPE, NAME)
K_GLOBAL_STATIC_WITH_ARGS(KComponentData, fakeComponent,(KGlobalPrivate::initFakeComponent())) KStandardDirs *KGlobal
QIcon MainBarIconSet(const QString &name, int force_size)
QPixmap BarIcon(const QString &name, int force_size, int state, const QStringList &overlays)
QIcon BarIconSet(const QString &name, int force_size)
QPixmap SmallIcon(const QString &name, int force_size, int state, const QStringList &overlays)
QIcon DesktopIconSet(const QString &name, int force_size)
QIcon SmallIconSet(const QString &name, int force_size)
QPixmap MainBarIcon(const QString &name, int force_size, int state, const QStringList &overlays)
int IconSize(KIconLoader::Group group)
QIcon UserIconSet(const QString &name)
QPixmap DesktopIcon(const QString &name, int force_size, int state, const QStringList &overlays)
QPixmap UserIcon(const QString &name, int state, const QStringList &overlays)
const QString & staticQString(const char *str)
const KComponentData & mainComponent()
KSharedConfigPtr config()
const char * name(StandardAction id)
This will return the internal name of a given standard action.