1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
/*
* GraphLCD skin library
*
* object.h - skin object class
*
* This file is released under the GNU General Public License. Refer
* to the COPYING file distributed with this package.
*
* based on text2skin
*
*/
#ifndef _GLCDSKIN_OBJECT_H_
#define _GLCDSKIN_OBJECT_H_
#include <stdint.h>
#include <vector>
#include <string>
#include <map>
#include <glcdgraphics/bitmap.h>
#include "type.h"
#include "string.h"
namespace GLCD
{
class cSkin;
class cSkinDisplay;
class cSkinObjects;
class cSkinFunction;
struct tPoint
{
int x, y;
tPoint(int _x = 0, int _y = 0) { x = _x; y = _y; }
};
struct tSize
{
int w, h;
tSize(int _w = 0, int _h = 0) { w = _w; h = _h; }
};
enum eTextAlignment
{
taCenter,
taLeft,
taRight
};
class cSkinObject
{
friend bool StartElem(const std::string & name, std::map<std::string,std::string> & attrs);
friend bool CharData(const std::string & text);
friend bool EndElem(const std::string & name);
public:
enum eType
{
pixel,
line,
rectangle,
ellipse,
slope,
image,
progress,
text,
scrolltext,
scrollbar,
block,
list,
item,
#define __COUNT_OBJECT__ (item + 1)
};
private:
cSkinDisplay * mDisplay;
cSkin * mSkin;
eType mType;
tPoint mPos1;
tPoint mPos2;
eColor mColor;
bool mFilled;
int mRadius;
int mArc;
int mDirection;
eTextAlignment mAlign;
bool mMultiline;
cSkinString mPath;
cSkinString mCurrent;
cSkinString mTotal;
cSkinString mFont;
cSkinString mText;
cSkinFunction * mCondition;
cSkinObjects * mObjects; // used for block objects such as <list>
public:
cSkinObject(cSkinDisplay * parent);
cSkinObject(const cSkinObject & Src);
~cSkinObject();
bool ParseType(const std::string &Text);
bool ParseColor(const std::string &Text);
bool ParseCondition(const std::string &Text);
bool ParseAlignment(const std::string &Text);
bool ParseFontFace(const std::string &Text);
bool ParseIntParam(const std::string &Text, int & Param);
bool ParseWidth(const std::string &Text);
bool ParseHeight(const std::string &Text);
void SetListIndex(int MaxItems, int Index);
eType Type(void) const { return mType; }
cSkinFunction * Condition(void) const { return mCondition; }
cSkinDisplay * Display(void) const { return mDisplay; }
cSkin * Skin(void) const { return mSkin; }
const std::string & TypeName(void) const;
tPoint Pos(void) const;
tSize Size(void) const;
uint32_t NumObjects(void) const;
cSkinObject * GetObject(uint32_t Index) const;
void Render(cBitmap * screen);
};
class cSkinObjects: public std::vector<cSkinObject *>
{
public:
cSkinObjects(void);
~cSkinObjects();
};
// recursive dependancy
inline uint32_t cSkinObject::NumObjects(void) const
{
return mObjects ? mObjects->size() : 0;
}
inline cSkinObject * cSkinObject::GetObject(uint32_t Index) const
{
return mObjects ? (*mObjects)[Index] : NULL;
}
} // end of namespace
#endif
|