Changeset 3676
- Timestamp:
- 28/11/08 15:00:35 (6 weeks ago)
- Location:
- trunk/candy/src
- Files:
-
- 12 modified
-
candyxml.py (modified) (4 diffs)
-
core.py (modified) (4 diffs)
-
eventhandler.py (modified) (1 diff)
-
widgets/container.py (modified) (1 diff)
-
widgets/grid.py (modified) (1 diff)
-
widgets/image.py (modified) (1 diff)
-
widgets/label.py (modified) (1 diff)
-
widgets/progressbar.py (modified) (1 diff)
-
widgets/rectangle.py (modified) (1 diff)
-
widgets/reflection.py (modified) (1 diff)
-
widgets/text.py (modified) (1 diff)
-
widgets/widget.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/candy/src/candyxml.py
r3602 r3676 68 68 def candyxml_parse(cls, element): 69 69 ... 70 71 # register72 Foo.candyxml_register()73 SimpleBar.candyxml_register()74 ComplexBar.candyxml_register()75 70 76 71 XML example:: … … 151 146 """ 152 147 153 __all__ = [ 'parse', 'register', 'get_class' , 'STYLE_HANDLER']148 __all__ = [ 'parse', 'register', 'get_class' ] 154 149 155 150 # python imports … … 160 155 # kaa.candy imports 161 156 import core 162 163 STYLE_HANDLER = 'STYLE_HANDLER'164 157 165 158 # get logging object … … 404 397 _parser = {} 405 398 406 def register(cls, style=None): 407 """ 408 Register a class with the given style. 409 @param cls: class with candyxml variables and functions 410 @param style: optional style if there is more than one parser for the node 399 def register(cls): 400 """ 401 Register a class 411 402 """ 412 403 name = cls.candyxml_name 413 style = style or getattr(cls, 'candyxml_style', None)414 404 parser = _parser 415 if style != STYLE_HANDLER:405 if not isinstance(cls, Styles): 416 406 if not name in parser: 417 407 parser[name] = Styles() 418 parser, name = parser[name], style408 parser, name = parser[name], getattr(cls, 'candyxml_style', None) 419 409 if name in parser: 420 410 raise RuntimeError('%s already registered' % name) 421 411 parser[name] = cls 422 412 423 def get_class(name, style=None): 424 """ 425 Get the class registered to the given name. 426 @param name: parser name 427 @param style: style of the parser if there is more than one for the name 428 @returns: class of the parser (e.g. Widget) 429 """ 430 result = _parser.get(name) 431 if isinstance(result, dict): 432 return result.get(style) 433 return result 413 def get_class(name, style): 414 """ 415 Get the class registered to the given name and style 416 """ 417 return _parser.get(name).get(style) -
trunk/candy/src/core.py
r3516 r3676 188 188 size += 1 189 189 190 190 191 class Modifier(object): 191 192 """ … … 194 195 to change. Examples are Properties and ReflectionModifier. 195 196 """ 196 __modifier = {} 197 198 class __metaclass__(type): 199 def __new__(meta, name, bases, attrs): 200 cls = type.__new__(meta, name, bases, attrs) 201 if 'candyxml_name' in attrs.keys(): 202 if cls.candyxml_name in Modifier._candyxml_modifier: 203 raise RuntimeError('%s already defined' % cls.candyxml_name) 204 Modifier._candyxml_modifier[cls.candyxml_name] = cls 205 return cls 206 207 _candyxml_modifier = {} 197 208 198 209 def modify(self, widget): … … 213 224 implementation variant, not the other way around. 214 225 """ 215 cls = Modifier._ _modifier.get(element.node)226 cls = Modifier._candyxml_modifier.get(element.node) 216 227 if cls is None: 217 228 return cls 218 229 return cls.candyxml_create(element) 219 220 @classmethod221 def candyxml_register(cls):222 """223 Register class to candyxml. This function can only be called224 once when the class is loaded.225 """226 Modifier.__modifier[cls.candyxml_name] = cls227 230 228 231 … … 273 276 properties[key] = value 274 277 return properties 275 276 # register Properties modifier277 Properties.candyxml_register() -
trunk/candy/src/eventhandler.py
r3603 r3676 120 120 eventhandler.condition = element.condition 121 121 return eventhandler 122 123 # register Properties modifier124 Eventhandler.candyxml_register() -
trunk/candy/src/widgets/container.py
r3603 r3676 425 425 return super(Container, cls).candyxml_parse(element).update( 426 426 dependency=dependency, widgets=widgets) 427 428 429 # register widget to candyxml430 Container.candyxml_register() -
trunk/candy/src/widgets/grid.py
r3567 r3676 533 533 return super(SelectionGrid, cls).candyxml_parse(element).update( 534 534 selection=selection) 535 536 537 # register widgets to candyxml538 Grid.candyxml_register()539 SelectionGrid.candyxml_register() -
trunk/candy/src/widgets/image.py
r3639 r3676 322 322 return Imlib2Texture.candyxml_parse(element).update( 323 323 thumbnail=element.thumbnail, default=element.default) 324 325 326 # register widgets to candyxml327 Image.candyxml_register()328 Thumbnail.candyxml_register() -
trunk/candy/src/widgets/label.py
r3517 r3676 186 186 return super(Label, cls).candyxml_parse(element).update( 187 187 font=element.font, color=element.color, text=element.content) 188 189 190 # register widget to candyxml191 Label.candyxml_register() -
trunk/candy/src/widgets/progressbar.py
r3517 r3676 101 101 return super(Progressbar, cls).candyxml_parse(element).update( 102 102 progress=element[0].xmlcreate()) 103 104 105 # register widget to candyxml106 Progressbar.candyxml_register() -
trunk/candy/src/widgets/rectangle.py
r3638 r3676 172 172 radius=int(element.radius or 0), border_size=float(element.border_size or 0), 173 173 color=element.color, border_color=element.border_color) 174 175 176 # register widget to candyxml177 Rectangle.candyxml_register() -
trunk/candy/src/widgets/reflection.py
r3517 r3676 149 149 """ 150 150 return cls(opacity = int(element.opacity or 50)) 151 152 # register widget to candyxml153 ReflectionModifier.candyxml_register() -
trunk/candy/src/widgets/text.py
r3517 r3676 186 186 text=element.content, align=element.align, color=element.color, 187 187 font=element.font) 188 189 190 # register widget to candyxml191 Text.candyxml_register() -
trunk/candy/src/widgets/widget.py
r3586 r3676 107 107 """ 108 108 Parse the candyxml element for parameter and create a Template. 109 110 @param element: kaa.candy.candyxml.Element with widget information111 @returns: Template object112 109 """ 113 110 modifier = [] … … 134 131 depends on the context. 135 132 """ 133 134 class __metaclass__(type): 135 def __new__(meta, name, bases, attrs): 136 cls = type.__new__(meta, name, bases, attrs) 137 if 'candyxml_name' in attrs.keys() or 'candyxml_style' in attrs.keys(): 138 candyxml.register(cls) 139 return cls 136 140 137 141 #: set if the object reacts on context … … 611 615 return _dict(pos=element.pos, size=(element.width, element.height)) 612 616 613 @classmethod614 def candyxml_register(cls, style=None):615 """616 Register class to candyxml. This function can only be called617 once when the class is loaded.618 """619 candyxml.register(cls, style)620 621 617 # def __del__(self): 622 618 # print '__del__', self
