Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pgu/gui/style.py
diff options
context:
space:
mode:
Diffstat (limited to 'pgu/gui/style.py')
-rw-r--r--pgu/gui/style.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/pgu/gui/style.py b/pgu/gui/style.py
new file mode 100644
index 0000000..3060928
--- /dev/null
+++ b/pgu/gui/style.py
@@ -0,0 +1,41 @@
+"""
+"""
+
+import pguglobals
+
+class Style:
+ """The class used by widget for the widget.style
+
+ <p>This object is used mainly as a dictionary, accessed via <tt>widget.style.attr</tt>, as opposed to
+ <tt>widget.style['attr']</tt>. It automatically grabs information from the theme via <tt>value = theme.get(widget.cls,widget.pcls,attr)</tt>.</p>
+
+ """
+ def __init__(self,o,dict):
+ self.obj = o
+ for k,v in dict.items(): self.__dict__[k]=v
+ self._cache = {}
+
+ def __getattr__(self,k):
+ key = self.obj.cls,self.obj.pcls,k
+ if key not in self._cache:
+ self._cache[key] = Style_get(self.obj.cls,self.obj.pcls,k)
+ v = self._cache[key]
+ if k in (
+ 'border_top','border_right','border_bottom','border_left',
+ 'padding_top','padding_right','padding_bottom','padding_left',
+ 'margin_top','margin_right','margin_bottom','margin_left',
+ 'align','valign','width','height',
+ ): self.__dict__[k] = v
+ return v
+
+ def __setattr__(self,k,v):
+ self.__dict__[k] = v
+
+
+Style_cache = {}
+def Style_get(cls,pcls,k):
+ key = cls,pcls,k
+ if key not in Style_cache:
+ Style_cache[key] = pguglobals.app.theme.get(cls,pcls,k)
+ return Style_cache[key]
+