You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
554 lines
19 KiB
554 lines
19 KiB
/* 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 <tqstring.h>
|
|
#include <tqpixmap.h>
|
|
#include <tqiconset.h>
|
|
|
|
// Grmbl, X headers.....
|
|
#ifdef Status
|
|
#define KIconLoaderXStatus Status
|
|
#undef Status
|
|
#endif
|
|
#include <tqmovie.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 TQString& appname=TQString::null, KStandardDirs *dirs = 0);
|
|
|
|
/**
|
|
* Cleanup
|
|
*/
|
|
~KIconLoader();
|
|
|
|
/**
|
|
* Adds @p appname to the list of application specific directories.
|
|
* @param appname The application name.
|
|
*/
|
|
void addAppDir(const TQString& appname);
|
|
|
|
/**
|
|
* Loads an icon. It will try very hard to tqfind 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 TQPixmap. Can be null when not found, depending on
|
|
* @p canReturnNull.
|
|
*/
|
|
TQPixmap loadIcon(const TQString& name, KIcon::Group group, int size=0,
|
|
int state=KIcon::DefaultState, TQString *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
|
|
*/
|
|
TQIconSet loadIconSet(const TQString& name, KIcon::Group group, int size,
|
|
bool canReturnNull, bool immediateExistenceCheck);
|
|
|
|
// KDE4 merge as (const TQString&,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
|
|
*/
|
|
TQIconSet loadIconSet(const TQString& name, KIcon::Group group, int size,
|
|
bool canReturnNull);
|
|
|
|
// KDE4 merge as (const TQString&,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
|
|
*/
|
|
TQIconSet loadIconSet(const TQString& 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.
|
|
*/
|
|
TQString iconPath(const TQString& 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 TQMovie object. Can be null if not found.
|
|
*/
|
|
TQMovie loadMovie(const TQString& 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.
|
|
*/
|
|
TQString moviePath(const TQString& 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 TQMovie 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 TQStringList containing the absolute path of all the frames
|
|
* making up the animation.
|
|
*/
|
|
TQStringList loadAnimated(const TQString& 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
|
|
*/
|
|
TQStringList 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 TQStringList containing the icon names
|
|
* available for that context
|
|
*/
|
|
TQStringList 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 TQStringList containing the icon paths
|
|
* @since 3.1
|
|
*/
|
|
TQStringList queryIconsByDir( const TQString& 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 TQString& _appname, KStandardDirs *_dirs );
|
|
|
|
/**
|
|
* Returns the unknown icon. An icon that is used when no other icon
|
|
* can be found.
|
|
* @return the unknown pixmap
|
|
*/
|
|
static TQPixmap 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 TQIconFactory.
|
|
* 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 TQIconSet 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 TQString& _appname, KStandardDirs *_dirs );
|
|
|
|
/**
|
|
* @internal
|
|
* tries to tqfind an icon with the name. It tries some extension and
|
|
* match strategies
|
|
*/
|
|
KIcon tqfindMatchingIcon(const TQString& name, int size) const;
|
|
|
|
/**
|
|
* @internal
|
|
* Loads and caches an overlay.
|
|
*/
|
|
TQImage *loadOverlay(const TQString& name, int size) const;
|
|
|
|
/**
|
|
* @internal
|
|
* Adds themes installed in the application's directory.
|
|
**/
|
|
void addAppThemes(const TQString& 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 TQString &appname);
|
|
|
|
/**
|
|
* @internal
|
|
* return the path for the unknown icon in that size
|
|
* @since 3.1
|
|
*/
|
|
TQString 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
|
|
*/
|
|
TQString removeIconExtension(const TQString &name) const;
|
|
|
|
/**
|
|
* Same as removeIconExtension except it prints a debug message
|
|
* if an extension is removed to help catch programming errors.
|
|
*
|
|
* @see tqfindMatchingIcon()
|
|
* @see iconPath()
|
|
*
|
|
* TODO: KDE 4 make static
|
|
*/
|
|
TQString removeIconExtensionInternal(const TQString &name) const;
|
|
|
|
/**
|
|
* Loads all the different sizes for an iconset.
|
|
*/
|
|
TQIconSet loadIconSetNonDelayed( const TQString& name, KIcon::Group group,
|
|
int size, bool canReturnNull );
|
|
|
|
// @internal the data object
|
|
KIconLoaderPrivate *d;
|
|
};
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a desktop icon.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap DesktopIcon(const TQString& name, int size=0,
|
|
int state=KIcon::DefaultState,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a desktop icon.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap DesktopIcon(const TQString& name, KInstance *instance);
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a desktop icon, and apply the necessary effects to get an IconSet.
|
|
*/
|
|
KDECORE_EXPORT TQIconSet DesktopIconSet(const TQString& name, int size=0,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a toolbar icon.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap BarIcon(const TQString& name, int size=0, int state=KIcon::DefaultState,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a toolbar icon.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap BarIcon(const TQString& name, KInstance *instance);
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a toolbar icon, and apply the necessary effects to get an IconSet.
|
|
*/
|
|
KDECORE_EXPORT TQIconSet BarIconSet(const TQString& name, int size=0,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a small icon.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap SmallIcon(const TQString& name, int size=0,
|
|
int state=KIcon::DefaultState,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a small icon.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap SmallIcon(const TQString& name, KInstance *instance);
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a small icon, and apply the necessary effects to get an IconSet.
|
|
*/
|
|
KDECORE_EXPORT TQIconSet SmallIconSet(const TQString& name, int size=0,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a main toolbar icon.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap MainBarIcon(const TQString& name, int size=0,
|
|
int state=KIcon::DefaultState,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a main toolbar icon.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap MainBarIcon(const TQString& name, KInstance *instance);
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a main toolbar icon, and apply the effects to get an IconSet.
|
|
*/
|
|
KDECORE_EXPORT TQIconSet MainBarIconSet(const TQString& name, int size=0,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a user icon. User icons are searched in $appdir/pics.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap UserIcon(const TQString& name, int state=KIcon::DefaultState,
|
|
KInstance *instance=KGlobal::instance());
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a user icon. User icons are searched in $appdir/pics.
|
|
*/
|
|
KDECORE_EXPORT TQPixmap UserIcon(const TQString& name, KInstance *instance);
|
|
|
|
/**
|
|
* \relates KIconLoader
|
|
* Load a user icon, and apply the effects to get an IconSet.
|
|
*/
|
|
KDECORE_EXPORT TQIconSet UserIconSet(const TQString& 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__
|