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
|
# !/usr/bin/python
# -*- coding: utf-8 -*-
# Glitter Toolkit
__authors__ = ["Jan Jokela <janjokela@gmail.com>"]
__licenses__ = ["LICENSE.LGPL"]
__description__ = "Widget styles"
import os
import sys
import gobject
class Style(gobject.GObject):
"""
A style object for widgets in their various states.
Styles are described in JSON (Java Script Object Notation, a subset of the
ECMA 262-3 standard)
"""
def __init__(self, **kwargs):
""" Initialize style
kwargs -- dict(**) A dictionary of properties
"""
super(Style, self).__init__()
self._properties = {}
for key, value in kwargs.iteritems():
setattr(self, key, value)
def __setattr__(self, key, value):
""" Sets a property """
key = key.replace('-', '_')
super(Style, self).__setattr__(key, value)
if not key.startswith('_'):
key = key.replace('_', '-')
self._properties[key] = value
def __iter__(self):
""" Iter properties """
return self._properties.iteritems()
def merge(self, style):
""" Merges current style with given style by overwriting current
properties with properties from the given style, case different, and
adds new properties from it.
style -- (Style) Style to be merged
"""
new_style = Style(**self._properties)
for key, value in style:
if key not in new_style.get_properties():
setattr(new_style, key, value)
return new_style
def get_properties(self):
""" Retrieve the property dictionary """
return self._properties
|