1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from libxyz.exceptions import SkinError
18 from fsrule import FSRule
19 from odict import ODict
20 from utils import ustring
21
22 from libxyz import const
23
24 from libxyz.ui.colors import Palette, Foreground, Background
25
27 """
28 Store and manage defined skins
29 """
30
33
34
35
36 - def add(self, skin):
37 """
38 Add new sking to storage
39 """
40
41 if not isinstance(skin, Skin):
42 raise SkinError(_(u"Invalid skin argument: %s. "\
43 u"libxyz.core.Skin instance expected!")
44 % type(skin))
45 else:
46 self._skins[skin.name] = skin
47
48
49
50 - def get(self, name):
51 """
52 Get stored skin instance
53
54 @return: Either Skin isntance or None if was not stored
55 """
56
57 return self._skins.get(name, None)
58
59
60
62 """
63 Get all stored skins
64
65 @return: [Skin()]
66 """
67
68 return self._skins.values()
69
70
71
73 """
74 Clear storage
75 """
76
77 self._skins = {}
78
79
80
82 """
83 Skin object. Provides simple interface to defined skin rulesets.
84 """
85
86 - def __init__(self, name=None, author=None, version=None,
87 description=None, colors=None, rules=None):
101
102
103
105 return u"<Skin object: %s>" % ustring(self.name)
106
107
108
111
112
113
115 return cmp(self.name, other.name)
116
117
118
120 return self.rules[key]
121
122
123
126
127
128
130 """
131 Internalize rules
132 """
133
134 rules = {}
135
136 for block, rsets in raw_rules.iteritems():
137 if block not in rules:
138 rules[block] = ODict()
139
140 for (resource, palette) in rsets:
141 if isinstance(resource, FSRule):
142 var = resource.raw_rule
143 else:
144 var = resource
145
146 palette.name = self._make_name(block, var)
147
148 rules[block][resource] = palette
149
150 return rules
151
152
153
155 return "%s@%s" % (resource, block)
156
157
158
173
174
175
176 - def attr(self, resolution, name, default=True):
177 """
178 Search for first matching attribute <name> according to resolution
179 @param resolution: Sequence of ruleset names
180 @param name: Attribute name
181 @param default: If True, return default palette in case attr
182 is not found, otherwise return None
183 @return: Registered palette name
184 """
185
186 return self.palette(resolution, name, default).name
187
188
189
190 - def palette(self, resolution, name, default=True):
191 """
192 Search for first matching palette <name> according to resolution
193 """
194
195 for _w in resolution:
196
197 if not _w.startswith(u"ui."):
198 _w = u"ui.%s" % _w
199
200 try:
201 return self.rules[_w][name]
202 except KeyError:
203 pass
204
205 if default:
206 return self._default
207 else:
208 return None
209
210
211
213 try:
214 return self.rules[block][name].name
215 except KeyError:
216 return None
217