edelib 2.0.0

edelib/IconLoader.h

00001 /*
00002  * $Id: IconLoader.h 2929 2009-11-12 11:45:27Z karijes $
00003  *
00004  * Icon loader via IconTheme
00005  * Copyright (c) 2009 edelib authors
00006  *
00007  * This library is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2 of the License, or (at your option) any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public License
00018  * along with this library. If not, see <http://www.gnu.org/licenses/>.
00019  */
00020 
00021 #ifndef __EDELIB_ICONLOADER_H__
00022 #define __EDELIB_ICONLOADER_H__
00023 
00024 #include "IconTheme.h"
00025 
00026 class Fl_Shared_Image;
00027 class Fl_Widget;
00028 
00029 EDELIB_NS_BEGIN
00030 
00031 class IconLoaderItem;
00032 
00039 enum IconLoaderOptions {
00040         ICON_LOADER_OPTION_NO_ABSOLUTE_PATH = (1 << 1),  
00041         ICON_LOADER_OPTION_NO_WIDGET_REDRAW = (1 << 2),  
00042         ICON_LOADER_OPTION_NO_ICON_SCALE    = (1 << 3)   
00043 };
00044 
00084 class IconLoader {
00085 private:
00086         static IconLoader* pinstance;
00087 
00088         list<IconLoaderItem*> items;
00089         IconTheme*            curr_theme;
00090 
00091         IconLoader();
00092         ~IconLoader();
00093         IconLoader(const IconLoader&);
00094         IconLoader& operator=(const IconLoader&);
00095 
00096         void clear_items(void);
00097 public:
00098 #ifndef SKIP_DOCS
00099         const char* get_icon_path(const char* name, IconSizes sz, IconContext ctx);
00100         Fl_Shared_Image* get_icon(const char* name, IconSizes sz, IconContext ctx, unsigned long options);
00101         bool set_icon(const char* name, Fl_Widget* widget, IconSizes sz, IconContext ctx, unsigned long options);
00102         void load_theme(const char* name);
00103         void reload_icons(void);
00104         void repoll_icons(void);
00105         const IconTheme* current_theme(void) const { return curr_theme; }
00106 
00107         static IconLoader* instance();
00108 #endif
00109 
00114         static void init(const char* theme);
00115 
00119         static void init(void) { IconLoader::init(IconTheme::default_theme_name()); }
00120 
00124         static void shutdown(void);
00125 
00129         static bool inited(void);
00130 
00140         static void reload(const char* theme);
00141 
00151         static void repoll(void);
00152 
00166         static Fl_Shared_Image* get(const char* name, IconSizes sz, IconContext ctx = ICON_CONTEXT_ANY, 
00167                         unsigned long options = 0);
00168 
00172         static String get_path(const char* name, IconSizes sz, IconContext ctx = ICON_CONTEXT_ANY);
00173 
00186         static bool set(Fl_Widget* widget, const char* name, IconSizes sz, IconContext ctx = ICON_CONTEXT_ANY,
00187                         unsigned long options = 0);
00188 
00192         static const IconTheme* theme(void);
00193 
00200         static void set_fallback_icon(const char* name);
00201 
00205         static const char* get_fallback_icon(void);
00206 
00211         static const char** get_builtin_xpm_icon(IconSizes sz);
00212 };
00213 
00214 EDELIB_NS_END
00215 #endif