Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pgu/gui/document.py
diff options
context:
space:
mode:
Diffstat (limited to 'pgu/gui/document.py')
-rw-r--r--pgu/gui/document.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/pgu/gui/document.py b/pgu/gui/document.py
new file mode 100644
index 0000000..1bd96df
--- /dev/null
+++ b/pgu/gui/document.py
@@ -0,0 +1,112 @@
+"""
+"""
+import pygame
+
+import container
+import layout
+
+class _document_widget:
+ def __init__(self,w,align=None):
+ #w.rect.w,w.rect.h = w.resize()
+ #self.rect = w.rect
+ self.widget = w
+ if align != None: self.align = align
+
+class Document(container.Container):
+ """A document container contains many widgets strung together in a document format. (How informative!)
+
+ <pre>Document()</pre>
+
+ """
+ def __init__(self,**params):
+ params.setdefault('cls','document')
+ container.Container.__init__(self,**params)
+ self.layout = layout.Layout(pygame.Rect(0,0,self.rect.w,self.rect.h))
+
+ def add(self,e,align=None):
+ """Add a widget.
+
+ <pre>Document.add(e,align=None)</pre>
+
+ <dl>
+ <dt>e<dd>widget
+ <dt>align<dd>alignment (None,-1,0,1)
+ </dl>
+ """
+ dw = _document_widget(e,align)
+ self.layout.add(dw)
+ e.container = self
+ e._c_dw = dw
+ self.widgets.append(e)
+ self.chsize()
+
+ def remove(self,e):
+ self.layout._widgets.remove(e._c_dw)
+ self.widgets.remove(e)
+ self.chsize()
+
+
+ def block(self,align):
+ """Start a new block.
+
+ <pre>Document.block(align)</pre>
+
+ <dl>
+ <dt>align<dd>alignment of block (-1,0,1)
+ </dl>
+ """
+ self.layout.add(align)
+
+ def space(self,e):
+ """Add a spacer.
+
+ <pre>Document.space(e)</pre>
+
+ <dl>
+ <dt>e<dd>a (w,h) size for the spacer
+ </dl>
+ """
+ self.layout.add(e)
+
+ def br(self,height):
+ """Add a line break.
+
+ <pre>Document.br(height)</pre>
+
+ <dl>
+ <dt>height<dd>height of line break
+ </dl>
+ """
+ self.layout.add((0,height))
+
+ def resize(self,width=None,height=None):
+ if self.style.width: width = self.style.width
+ if self.style.height: height = self.style.height
+
+ for w in self.widgets:
+ w.rect.w,w.rect.h = w.resize()
+
+ if (width != None and w.rect.w > width) or (height != None and w.rect.h > height):
+ w.rect.w,w.rect.h = w.resize(width,height)
+
+ dw = w._c_dw
+ dw.rect = pygame.Rect(0,0,w.rect.w,w.rect.h)
+
+ if width == None: width = 65535
+ self.layout.rect = pygame.Rect(0,0,width,0)
+ self.layout.resize()
+
+ _max_w = 0
+
+ for w in self.widgets:
+ #xt,xl,xb,xr = w.getspacing()
+ dw = w._c_dw
+ w.style.x,w.style.y,w.rect.w,w.rect.h = dw.rect.x,dw.rect.y,dw.rect.w,dw.rect.h
+ #w.resize()
+ w.rect.x,w.rect.y = w.style.x,w.style.y
+ _max_w = max(_max_w,w.rect.right)
+
+ #self.rect.w = _max_w #self.layout.rect.w
+ #self.rect.h = self.layout.rect.h
+ #print 'document',_max_w,self.layout.rect.h
+ return _max_w,self.layout.rect.h