summaryrefslogtreecommitdiffstats
path: root/kdecore/kiconloader.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdecore/kiconloader.h')
-rw-r--r--kdecore/kiconloader.h553
1 files changed, 553 insertions, 0 deletions
diff --git a/kdecore/kiconloader.h b/kdecore/kiconloader.h
new file mode 100644
index 000000000..7c445b962
--- /dev/null
+++ b/kdecore/kiconloader.h
@@ -0,0 +1,553 @@
+/* vi: ts=8 sts=4 sw=4
+ *
+ * This file is part of the KDE project, module kdecore.
+ * Copyright (C) 2000 Geert Jansen <jansen@kde.org>
+ * Antonio Larrosa <larrosa@kde.org>
+ *
+ * This is free software; it comes under the GNU Library General
+ * Public License, version 2. See the file "COPYING.LIB" for the
+ * exact licensing terms.
+ */
+
+#ifndef __KIconLoader_h_Included__
+#define __KIconLoader_h_Included__
+
+#include <qstring.h>
+#include <qpixmap.h>
+#include <qiconset.h>
+
+// Grmbl, X headers.....
+#ifdef Status
+#define KIconLoaderXStatus Status
+#undef Status
+#endif
+#include <qmovie.h>
+#ifdef KIconLoaderXStatus
+#define Status int
+#undef KIconLoaderXStatus
+#endif
+
+#include <kglobal.h>
+#include <kinstance.h>
+#include <kicontheme.h>
+
+struct KIconGroup;
+class KIconThemeNode;
+class KConfig;
+struct KIconLoaderPrivate;
+class KStandardDirs;
+class KIconEffect;
+
+
+/**
+ * Iconloader for KDE.
+ *
+ * KIconLoader will load the current icon theme and all its base themes.
+ * Icons will be searched in any of these themes. Additionally, it caches
+ * icons and applies effects according the the user's preferences.
+ *
+ * In KDE, it is encouraged to load icons by "Group". An icon group is a
+ * location on the screen where icons are being used. Standard groups are:
+ * Desktop, Toolbar, MainToolbar, Small and Panel. Each group has some
+ * centrally configured properties bound to it, including the icon size
+ * and effects. This makes it possible to offer a consistent icon look in
+ * all KDE applications.
+ *
+ * The standard groups are defined below.
+ *
+ * @li KIcon::Desktop: Icons in the iconview of konqueror, kdesktop and similar apps.
+ * @li KIcon::Toolbar: Icons in toolbars.
+ * @li KIcon::MainToolbar: Icons in the main toolbars.
+ * @li KIcon::Small: Various small (typical 16x16) places: titlebars, listviews
+ * and menu entries.
+ * @li KIcon::Panel: Icons in kicker's panel
+ *
+ * The icons are stored on disk in an icon theme or in a standalone
+ * directory. The icon theme directories contain multiple sizes and/or
+ * depths for the same icon. The iconloader will load the correct one based
+ * on the icon group and the current theme. Icon themes are stored globally
+ * in share/icons, or, application specific in share/apps/$appdir/icons.
+ *
+ * The standalone directories contain just one version of an icon. The
+ * directories that are searched are: $appdir/pics and $appdir/toolbar.
+ * Icons in these directories can be loaded by using the special group
+ * "User".
+ *
+ */
+class KDECORE_EXPORT KIconLoader
+{
+public:
+
+ /**
+ * Constructs an iconloader.
+ * @param appname Add the data directories of this application to the
+ * icon search path for the "User" group. The default argument adds the
+ * directories of the current application.
+ * @param dirs the KStandardDirs object to use. If null the global one is used
+ *
+ * Usually, you use the default iconloader, which can be accessed via
+ * KGlobal::iconLoader(), so you hardly ever have to create an
+ * iconloader object yourself. That one is the current KInstance's
+ * (typically KApplication's) iconloader.
+ * @see KGlobal::iconLoader()
+ * @see KInstance::iconLoader()
+ */
+ KIconLoader(const QString& appname=QString::null, KStandardDirs *dirs = 0);
+
+ /**
+ * Cleanup
+ */
+ ~KIconLoader();
+
+ /**
+ * Adds @p appname to the list of application specific directories.
+ * @param appname The application name.
+ */
+ void addAppDir(const QString& appname);
+
+ /**
+ * Loads an icon. It will try very hard to find an icon which is
+ * suitable. If no exact match is found, a close match is searched.
+ * If neither an exact nor a close match is found, a null pixmap or
+ * the "unknown" pixmap is returned, depending on the value of the
+ * @p canReturnNull parameter.
+ *
+ * @param name The name of the icon, without extension.
+ * @param group The icon group. This will specify the size of and effects to
+ * be applied to the icon.
+ * @param size If nonzero, this overrides the size specified by @p group.
+ * See KIcon::StdSizes.
+ * @param state The icon state: @p DefaultState, @p ActiveState or
+ * @p DisabledState. Depending on the user's preferences, the iconloader
+ * may apply a visual effect to hint about its state.
+ * @param path_store If not null, the path of the icon is stored here.
+ * @param canReturnNull Can return a null pixmap? If false, the
+ * "unknown" pixmap is returned when no appropriate icon has been found.
+ * @return the QPixmap. Can be null when not found, depending on
+ * @p canReturnNull.
+ */
+ QPixmap loadIcon(const QString& name, KIcon::Group group, int size=0,
+ int state=KIcon::DefaultState, QString *path_store=0L,
+ bool canReturnNull=false) const;
+
+ /**
+ * Creates an icon set, that will do on-demand loading of the icon.
+ * Loading itself is done by calling loadIcon .
+ *
+ * @param name The name of the icon, without extension.
+ * @param group The icon group. This will specify the size of and effects to
+ * be applied to the icon.
+ * @param size If nonzero, this overrides the size specified by @p group.
+ * See KIcon::StdSizes.
+ * @param canReturnNull Can return a null iconset? If false, iconset
+ * containing the "unknown" pixmap is returned when no appropriate icon has
+ * been found.
+ * @param immediateExistenceCheck If true on-demand icon loading will be
+ * disabled for canReturnNull and a null iconset may be returned immediately
+ * @return the icon set. Can be null when not found, depending on
+ * @p canReturnNull.
+ * @since 3.5
+ */
+ QIconSet loadIconSet(const QString& name, KIcon::Group group, int size,
+ bool canReturnNull, bool immediateExistenceCheck);
+
+ // KDE4 merge as (const QString&,KIcon::Group,int=0,bool=false,bool=true);
+ /**
+ * Creates an icon set, that will do on-demand loading of the icon.
+ * Loading itself is done by calling loadIcon .
+ *
+ * @param name The name of the icon, without extension.
+ * @param group The icon group. This will specify the size of and effects to
+ * be applied to the icon.
+ * @param size If nonzero, this overrides the size specified by @p group.
+ * See KIcon::StdSizes.
+ * @param canReturnNull Can return a null iconset? If false, iconset
+ * containing the "unknown" pixmap is returned when no appropriate icon has
+ * been found.
+ * @return the icon set. Can be null when not found, depending on
+ * @p canReturnNull.
+ * @since 3.1
+ */
+ QIconSet loadIconSet(const QString& name, KIcon::Group group, int size,
+ bool canReturnNull);
+
+ // KDE4 merge as (const QString&,KIcon::Group,int=0,bool=false,bool=true);
+ /**
+ * Creates an icon set, that will do on-demand loading of the icon.
+ * Loading itself is done by calling loadIcon .
+ *
+ * @param name The name of the icon, without extension.
+ * @param group The icon group. This will specify the size of and effects to
+ * be applied to the icon.
+ * @param size If nonzero, this overrides the size specified by @p group.
+ * See KIcon::StdSizes.
+ * @return the icon set. Can be null when not found
+ */
+ QIconSet loadIconSet(const QString& name, KIcon::Group group, int size=0);
+
+ /**
+ * Returns the path of an icon.
+ * @param name The name of the icon, without extension. If an absolute
+ * path is supplied for this parameter, iconPath will return it
+ * directly.
+ * @param group_or_size If positive, search icons whose size is
+ * specified by the icon group @p group_or_size. If negative, search
+ * icons whose size is - @p group_or_size.
+ * See KIcon::Group and KIcon::StdSizes
+ * @param canReturnNull Can return a null string? If not, a path to the
+ * "unknown" icon will be returned.
+ * @return the path of an icon, can be null or the "unknown" icon when
+ * not found, depending on @p canReturnNull.
+ */
+ QString iconPath(const QString& name, int group_or_size,
+ bool canReturnNull=false) const;
+
+ /**
+ * Loads an animated icon.
+ * @param name The name of the icon.
+ * @param group The icon group. See loadIcon().
+ * @param size Override the default size for @p group.
+ * See KIcon::StdSizes.
+ * @return A QMovie object. Can be null if not found.
+ */
+ QMovie loadMovie(const QString& name, KIcon::Group group, int size=0) const;
+
+ /**
+ * Returns the path to an animated icon.
+ * @param name The name of the icon.
+ * @param group The icon group. See loadIcon().
+ * @param size Override the default size for @p group.
+ * See KIcon::StdSizes.
+ * @return the full path to the movie, ready to be passed to QMovie's constructor.
+ * Empty string if not found.
+ */
+ QString moviePath(const QString& name, KIcon::Group group, int size=0) const;
+
+ /**
+ * Loads an animated icon as a series of still frames. If you want to load
+ * a .mng animation as QMovie instead, please use loadMovie() instead.
+ * @param name The name of the icon.
+ * @param group The icon group. See loadIcon().
+ * @param size Override the default size for @p group.
+ * See KIcon::StdSizes.
+ * @return A QStringList containing the absolute path of all the frames
+ * making up the animation.
+ */
+ QStringList loadAnimated(const QString& name, KIcon::Group group, int size=0) const;
+
+ /**
+ * Queries all available icons for a specific group, having a specific
+ * context.
+ * @param group_or_size If positive, search icons whose size is
+ * specified by the icon group @p group_or_size. If negative, search
+ * icons whose size is - @p group_or_size.
+ * See KIcon::Group and KIcon::StdSizes
+ * @param context The icon context.
+ * @return a list of all icons
+ */
+ QStringList queryIcons(int group_or_size, KIcon::Context context=KIcon::Any) const;
+
+ /**
+ * Queries all available icons for a specific context.
+ * @param group_or_size The icon preferred group or size. If available
+ * at this group or size, those icons will be returned, in other case,
+ * icons of undefined size will be returned. Positive numbers are groups,
+ * negative numbers are negated sizes. See KIcon::Group and
+ * KIcon::StdSizes
+ * @param context The icon context.
+ * @return A QStringList containing the icon names
+ * available for that context
+ */
+ QStringList queryIconsByContext(int group_or_size,
+ KIcon::Context context=KIcon::Any) const;
+
+ /**
+ * @internal
+ */
+ bool hasContext( KIcon::Context context ) const;
+
+ /**
+ * Returns a list of all icons (*.png or *.xpm extension) in the
+ * given directory.
+ * @param iconsDir the directory to search in
+ * @return A QStringList containing the icon paths
+ * @since 3.1
+ */
+ QStringList queryIconsByDir( const QString& iconsDir ) const;
+
+ /**
+ * Returns the current size of the group.
+ * @param group the group to check.
+ * @return the current size for an icon group.
+ */
+ int currentSize(KIcon::Group group) const;
+
+ /**
+ * Returns a pointer to the current theme. Can be used to query
+ * available and default sizes for groups.
+ * @return a pointer to the current theme. 0 if no theme set.
+ */
+ KIconTheme *theme() const;
+
+ /**
+ * Returns a pointer to the KIconEffect object used by the icon loader.
+ * @return the KIconEffect.
+ */
+ KIconEffect *iconEffect() const;
+
+ /**
+ * Called by KInstance::newIconLoader to reconfigure the icon loader.
+ * @param _appname the new application name
+ * @param _dirs the new standard directories. If 0, the directories
+ * from KGlobal will be taken.
+ */
+ void reconfigure( const QString& _appname, KStandardDirs *_dirs );
+
+ /**
+ * Returns the unknown icon. An icon that is used when no other icon
+ * can be found.
+ * @return the unknown pixmap
+ */
+ static QPixmap unknown();
+
+ /**
+ * Checks whether the user wants to blend the icons with the background
+ * using the alpha channel information for a given group.
+ * @param group the group to check
+ * @return true if alpha blending is desired
+ * @obsolete
+ */
+ bool alphaBlending( KIcon::Group group ) const;
+
+ /**
+ * Adds all the default themes from other desktops at the end of
+ * the list of icon themes.
+ * @since 3.1
+ */
+ void addExtraDesktopThemes();
+
+ /**
+ * Returns if the default icon themes of other desktops have been added
+ * to the list of icon themes where icons are searched.
+ * @since 3.1
+ */
+ bool extraDesktopThemesAdded() const;
+
+ /**
+ * Enables on-demand icon loading for QIconSets using QIconFactory.
+ * Icons loaded via loadIconSet() will be loaded as soon as they
+ * need to be displayed, not earlier.
+ *
+ * Note that enabling or disabling this only affects loadIconSet()
+ * calls after this setting is changed.
+ *
+ * The default is disabled, as the iconloader object must not be
+ * destroyed before all those iconsets are destroyed.
+ *
+ * (Some broken applications use temporary KIconLoader objects).
+ * Every KInstance 's iconloader has this feature enabled.
+ *
+ * @param enable true to enable delayed icon loading, false to disable
+ * @see isDelayedIconSetLoadingEnabled()
+ * @see QIconFactory
+ * @since 3.1
+ */
+ void enableDelayedIconSetLoading( bool enable );
+
+ /**
+ * Checks whether delayed loading for QIconSet is enabled.
+ * @return whether icons for QIconSets will be loaded on demand.
+ * @see enableDelayedIconSetLoading()
+ * @see QIconFactory
+ * @since 3.1
+ */
+ bool isDelayedIconSetLoadingEnabled() const;
+
+
+ private:
+ /**
+ * @internal
+ */
+ void init( const QString& _appname, KStandardDirs *_dirs );
+
+ /**
+ * @internal
+ * tries to find an icon with the name. It tries some extension and
+ * match strategies
+ */
+ KIcon findMatchingIcon(const QString& name, int size) const;
+
+ /**
+ * @internal
+ * Loads and caches an overlay.
+ */
+ QImage *loadOverlay(const QString& name, int size) const;
+
+ /**
+ * @internal
+ * Adds themes installed in the application's directory.
+ **/
+ void addAppThemes(const QString& appname);
+
+ /**
+ * Adds all themes that are part of this node and the themes
+ * below (the fallbacks of the theme) in the tree.
+ * @internal
+ */
+ void addBaseThemes(KIconThemeNode *node, const QString &appname);
+
+ /**
+ * @internal
+ * return the path for the unknown icon in that size
+ * @since 3.1
+ */
+ QString unknownIconPath( int size ) const;
+
+ /**
+ * Checks if name ends in one of the supported icon formats (i.e. .png)
+ * and returns the name without the extension if it does.
+ *
+ * Otherwise name is returned unchanged.
+ *
+ * Currently supported:
+ * - png
+ * - xpm
+ * - svg (if libart is being used)
+ * - svgz (if libart is being used)
+ *
+ * TODO: KDE 4 make public & static
+ * @since 3.1
+ */
+ QString removeIconExtension(const QString &name) const;
+
+ /**
+ * Same as removeIconExtension except it prints a debug message
+ * if an extension is removed to help catch programming errors.
+ *
+ * @see findMatchingIcon()
+ * @see iconPath()
+ *
+ * TODO: KDE 4 make static
+ */
+ QString removeIconExtensionInternal(const QString &name) const;
+
+ /**
+ * Loads all the different sizes for an iconset.
+ */
+ QIconSet loadIconSetNonDelayed( const QString& name, KIcon::Group group,
+ int size, bool canReturnNull );
+
+ // @internal the data object
+ KIconLoaderPrivate *d;
+};
+
+/**
+ * \relates KIconLoader
+ * Load a desktop icon.
+ */
+KDECORE_EXPORT QPixmap DesktopIcon(const QString& name, int size=0,
+ int state=KIcon::DefaultState,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a desktop icon.
+ */
+KDECORE_EXPORT QPixmap DesktopIcon(const QString& name, KInstance *instance);
+
+/**
+ * \relates KIconLoader
+ * Load a desktop icon, and apply the necessary effects to get an IconSet.
+ */
+KDECORE_EXPORT QIconSet DesktopIconSet(const QString& name, int size=0,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a toolbar icon.
+ */
+KDECORE_EXPORT QPixmap BarIcon(const QString& name, int size=0, int state=KIcon::DefaultState,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a toolbar icon.
+ */
+KDECORE_EXPORT QPixmap BarIcon(const QString& name, KInstance *instance);
+
+/**
+ * \relates KIconLoader
+ * Load a toolbar icon, and apply the necessary effects to get an IconSet.
+ */
+KDECORE_EXPORT QIconSet BarIconSet(const QString& name, int size=0,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a small icon.
+ */
+KDECORE_EXPORT QPixmap SmallIcon(const QString& name, int size=0,
+ int state=KIcon::DefaultState,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a small icon.
+ */
+KDECORE_EXPORT QPixmap SmallIcon(const QString& name, KInstance *instance);
+
+/**
+ * \relates KIconLoader
+ * Load a small icon, and apply the necessary effects to get an IconSet.
+ */
+KDECORE_EXPORT QIconSet SmallIconSet(const QString& name, int size=0,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a main toolbar icon.
+ */
+KDECORE_EXPORT QPixmap MainBarIcon(const QString& name, int size=0,
+ int state=KIcon::DefaultState,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a main toolbar icon.
+ */
+KDECORE_EXPORT QPixmap MainBarIcon(const QString& name, KInstance *instance);
+
+/**
+ * \relates KIconLoader
+ * Load a main toolbar icon, and apply the effects to get an IconSet.
+ */
+KDECORE_EXPORT QIconSet MainBarIconSet(const QString& name, int size=0,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a user icon. User icons are searched in $appdir/pics.
+ */
+KDECORE_EXPORT QPixmap UserIcon(const QString& name, int state=KIcon::DefaultState,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Load a user icon. User icons are searched in $appdir/pics.
+ */
+KDECORE_EXPORT QPixmap UserIcon(const QString& name, KInstance *instance);
+
+/**
+ * \relates KIconLoader
+ * Load a user icon, and apply the effects to get an IconSet.
+ */
+KDECORE_EXPORT QIconSet UserIconSet(const QString& name,
+ KInstance *instance=KGlobal::instance());
+
+/**
+ * \relates KIconLoader
+ * Returns the current icon size for a specific group.
+ */
+KDECORE_EXPORT int IconSize(KIcon::Group group, KInstance *instance=KGlobal::instance());
+
+#endif // __KIconLoader_h_Included__