fix gPixmap ref, fix usage of gImage
[enigma2.git] / lib / gui / eskin.h
1 #ifndef __eskin_h
2 #define __eskin_h
3
4 #include <list>
5 #include <map>
6 #include <xmltree.h>
7
8 #include <lib/base/estring.h>
9 #include <lib/base/eptrlist.h>
10 #include <lib/gdi/grc.h>
11
12 class eWidget;
13 class gPixmap;
14 typedef eWidget *(*tWidgetCreator)(eWidget *parent);
15
16 struct eNamedColor
17 {
18         eString name;
19         gRGB value, end;
20         int index;
21         int size;
22 };
23
24 class eSkin
25 {
26         typedef ePtrList<XMLTreeParser> parserList;
27         parserList parsers;
28         void clear();
29         
30         int parseColor(const eString& name, const char *color, gRGB &col);
31         int parseColors(XMLTreeNode *colors);
32         int parseScheme(XMLTreeNode *scheme);
33         int parseImages(XMLTreeNode *images);
34         int parseImageAlias(XMLTreeNode *images);
35         int parseValues(XMLTreeNode *values);
36         int parseFonts(XMLTreeNode *fonts);
37         int parseFontAlias(XMLTreeNode *fonts);
38         
39         gDC *getDCbyName(const char *name);
40         
41         gRGB *palette;
42         int maxcolors;
43         ePtr<gImage> paldummy;
44         int *colorused;
45         
46         static std::map< eString, tWidgetCreator > widget_creator;
47         int build(eWidget *widget, XMLTreeNode *rootwidget);
48         
49         std::list<eNamedColor> colors;
50         std::map<eString, gColor> scheme;
51         std::map<eString, ePtr<gPixmap> > images;
52         std::map<eString, int> values;
53         std::map<eString, eString> fonts;
54         std::map<eString, gFont> fontAlias;
55         std::map<eString, eString> imageAlias;
56
57         eNamedColor *searchColor(const eString &name);
58
59         static eSkin *active;
60 public:
61         eSkin();
62         ~eSkin();
63
64         static void addWidgetCreator(const eString &name, tWidgetCreator creator);
65         static void removeWidgetCreator(const eString &name, tWidgetCreator creator);
66
67         int load(const char *filename);
68         void parseSkins();
69         
70         int build(eWidget *widget, const char *name);
71         void setPalette(gPixmapDC *pal);
72
73         gColor queryColor(const eString &name);
74         gColor queryScheme(const eString &name) const;
75         RESULT queryImage(ePtr<gPixmap> &pixmap, const eString &name) const;
76         int queryValue(const eString &name, int d) const;
77         gFont queryFont(const eString &name);
78         
79         void makeActive();
80         
81         static eSkin *getActive();
82 };
83
84 #define ASSIGN(v, t, n) \
85   v =(t*)search(n); if (! v ) { eWarning("skin has undefined element: %s", n); v=new t(this); }
86
87 #endif