³ò
€ÒóDc           @   s[   d  Z  d d k Td d k Z d e i f d „  ƒ  YZ d „  Z d e i f d „  ƒ  YZ d S(	   t   
iÿÿÿÿ(   t   *Nt   Tablec           B   s§   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 d	 d
 „ Z d d d	 d	 d „ Z d d d	 d	 d „ Z d „  Z d d d „ Z RS(   sQ  A table style container.
    
    <p>If you know HTML, this should all work roughly how you would expect.  If you are not
    familiar with HTML, please read <a href="http://www.w3.org/TR/REC-html40/struct/tables.html">Tables in HTML Documents</a>.  Pay attention to TABLE, TR, TD related parts of the document.</p>
    
    <pre>Table()</pre>
    
    <strong>Example</strong>
    <code>
    t = gui.Table()
    
    t.tr()
    t.td(gui.Label("First Name"), align=-1)
    t.td(gui.Input())

    t.tr()
    t.td(gui.Label("Last Name"), align=-1)
    t.td(gui.Input())
    </code>
        
    c         K   sB   | i  d d ƒ t i i |  |  g  |  _ d |  _ t |  _ d  S(   Nt   clst   tablei    (   t
   setdefaultt	   containert	   Containert   __init__t   _rowst   _curRowt   Falset   _trok(   t   selft   params(    (    s   ../pgu/gui/table.pyR      s
    		c         C   s   t  |  i ƒ S(   N(   t   lenR	   (   R   (    (    s   ../pgu/gui/table.pyt   getRows%   s    c         C   s'   |  i  o t |  i  d ƒ Sn d Sd  S(   Ni    (   R	   R   (   R   (    (    s   ../pgu/gui/table.pyt
   getColumns(   s    
c         C   s  | |  i  ƒ  j o# d G| Gd G|  i  ƒ  Gd GHd  Sn xQ |  i | D]B } t | t ƒ o, | d |  i j o |  i i | d ƒ qD qD W|  i | =x: |  i D]/ } | i i | j o | i i d 8_ qž qž W|  i | j o |  i d 8_ n |  i	 ƒ  d  S(   Ns#   Trying to remove a nonexistant row:s   there are onlyt   rowst   widgeti   (
   R   R	   t
   isinstancet   dictt   widgetst   removet   stylet   rowR
   t   chsize(   R   t   nt   cellt   w(    (    s   ../pgu/gui/table.pyt
   remove_row.   s     $

 -c         C   s2   g  |  _  d |  _ t |  _ g  |  _ |  i ƒ  d  S(   Ni    (   R	   R
   R   R   R   R   (   R   (    (    s   ../pgu/gui/table.pyt   clearE   s
    				c         C   s;   |  i  i g  } t |  i ƒ  ƒ D] } | d  q  ~ ƒ d  S(   N(   R	   t   appendt   xrangeR   t   None(   R   t   _[1]t   x(    (    s   ../pgu/gui/table.pyt   _addRowP   s    c         C   sR   |  i  p t |  _  d Sn |  i d 7_ |  i ƒ  |  i j o |  i ƒ  n d S(   s   Start on the next row.Ni   (   R   t   TrueR
   R   R%   (   R   (    (    s   ../pgu/gui/table.pyt   trS   s    
	c         C   s=   |  i  p |  i ƒ  n x |  i  D] } | i d  ƒ q" Wd  S(   N(   R	   R%   R    R"   (   R   R   (    (    s   ../pgu/gui/table.pyt
   _addColumn\   s
    

 i   c         C   s-  x& |  i  ƒ  | | j  o |  i ƒ  q Wx& |  i ƒ  | | j  o |  i ƒ  q, W|  | _ | | i _ | | i _ h  | d <| d <| d <|  i | | <|  i	 i
 |  i | | d ƒ xh t | | | ƒ D]S } xJ t | | | ƒ D]5 } | | j p | | j o t |  i | | <qì qì WqÒ Wd  S(   NR   t   colspant   rowspan(   R   R(   R   R%   R   R   R   t   colR	   R   R    R!   R&   (   R   R   R+   R   R)   R*   t   arowt   acell(    (    s   ../pgu/gui/table.pyt   _setCellb   s    	,  c         K   s5   t  i |  t | |  d | d | d | d | ƒd S(   sü  Add a widget to a table after wrapping it in a TD container.
        
        <pre>Table.td(w,col=None,row=None,colspan=1,rowspan=1,**params)</pre>
        
        <dl>
        <dt>w<dd>widget
        <dt>col<dd>column
        <dt>row<dd>row
        <dt>colspan<dd>colspan
        <dt>rowspan<dd>rowspan
        <dt>align<dd>horizontal alignment (-1,0,1)
        <dt>valign<dd>vertical alignment (-1,0,1)
        <dt>params<dd>other params for the TD container, style information, etc
        </dl>
        R+   R   R)   R*   N(   R   t   addt	   _Table_td(   R   R   R+   R   R)   R*   R   (    (    s   ../pgu/gui/table.pyt   td   s    c      
   C   sã   t  |  _ | d j o |  i } n | |  i ƒ  j o
 d } n | d j oL xI t |  i ƒ  ƒ D]1 } | d j o |  i | | o | } Pq` q` Wn | d j o |  i ƒ  } n |  i | | | d | d | ƒ|  i	 ƒ  d S(   sï   Add a widget directly into the table, without wrapping it in a TD container.
        
        <pre>Table.add(w,col=None,row=None,colspan=1,rowspan=1)</pre>
        
        <p>See Table.td for an explanation of the parameters.</p>
        i    R)   R*   N(
   R&   R   R"   R
   R   R!   R   R	   R.   R   (   R   R   R+   R   R)   R*   R   (    (    s   ../pgu/gui/table.pyR/   ”   s     	
  
c   	      C   sÇ   t  | d ƒ o | i } n | i i | i i } } |  i | | } | d | d } } xJ t | | | ƒ D]5 } x, t | | | ƒ D] } t |  i | | <qŠ Wqp W|  i i	 | ƒ |  i
 ƒ  d  S(   Nt	   _table_tdR)   R*   (   t   hasattrR2   R   R   R+   R	   R!   R   R   R   R   (	   R   R   R   R+   R   R)   R*   R,   R-   (    (    s   ../pgu/gui/table.pyR   µ   s      c         C   s­  x/ |  i  D]$ } | i ƒ  \ | i _ | i _ q
 Wg  } t |  i ƒ  ƒ D] } | d qI ~ } g  } t |  i ƒ  ƒ D] } | d qv ~ }	 xý t |  i ƒ  ƒ D]é }
 xà t |  i ƒ  ƒ D]Ì } |  i |
 | o´ |  i |
 | t	 j	 oœ |  i |
 | d d j p0 t
 |	 | |  i |
 | d i i ƒ |	 | <n |  i |
 | d d j p0 t
 | |
 |  i |
 | d i i ƒ | |
 <q„q¸ q¸ WqŸ Wx)t |  i ƒ  ƒ D]}
 xt |  i ƒ  ƒ D]ø} |  i |
 | oà|  i |
 | t	 j	 oÈ|  i |
 | d d j oÆ t | | |  i |
 | d ƒ } d } x | D] } | |	 | 7} q3W| |  i |
 | d i i j  oY xV | D]J } |	 | c t |  i |
 | d i i | |  i |
 | d | ƒ 7<qtWqÊn |  i |
 | d d j oÆ t |
 |
 |  i |
 | d ƒ } d } x | D] } | | | 7} qW| |  i |
 | d i i j  oY xV | D]J } | | c t |  i |
 | d i i | |  i |
 | d | ƒ 7<qVWq¬q°q¸q¸WqŸWt |	 ƒ t | ƒ } } | d j ov | |  i i j  oc t |	 ƒ oV |  i i | } xC t d t |	 ƒ ƒ D]( } |	 | } |	 | c | | | 7<q$Wn | d j o€ | |  i i j  om t | ƒ o` |  i i | t | ƒ } xC t d t | ƒ ƒ D]( } | | } | | c | | | 7<q±Wn g  } t |  i ƒ  ƒ D]T }
 | g  } t |  i ƒ  ƒ D]- } | t |	 d | !ƒ t | d |
 !ƒ g q~ qø~ } x?t |  i ƒ  ƒ D]+}
 x"t |  i ƒ  ƒ D]} |  i |
 | oö |  i |
 | t	 j	 oÞ | |
 | \ } } t |	 | | |  i |
 | d !ƒ } t | |
 |
 |  i |
 | d !ƒ } |  i |
 | d } | | i _ | | i _ | | f | i i | i i f j o( | i | | ƒ \ | i _ | i _ qqqWqhWt |	 ƒ t | ƒ f S(   Ni    R)   i   R   R*   (   R   t   resizet   rectR   t   hR!   R   R   R	   R&   t   maxt
   _table_divt   sumR   t   widthR   t   heightR$   t   y(   R   R:   R;   R   R#   R<   t   rowsizest   _[2]R$   t   columnsizesR   R   t   columnst
   totalwidtht   acolR   t   totalheightR,   R6   t   dR   t   vt   _[3]t   _[4]t   cellpositionsR   (    (    s   ../pgu/gui/table.pyR4   Ã   s†    

 "--  *0<  *" " P" " \- 
 - 
 t  *&&%4	N(   t   __name__t
   __module__t   __doc__R   R   R   R   R   R%   R'   R(   R.   R"   R1   R/   R   R4   (    (    (    s   ../pgu/gui/table.pyR      s   									!	c         C   sE   |  | |  | } } | d j o | | | j  o | d 7} n | S(   Ni    i   (    (   t   at   bt   cRE   t   r(    (    s   ../pgu/gui/table.pyR8     s    ,R0   c           B   s    e  Z d  „  Z d d d „ Z RS(   c         K   s<   t  i i |  |  | |  _ |  | _ |  i | d d ƒ d  S(   Ni    (   R   R   R   R   R2   R/   (   R   R   R   (    (    s   ../pgu/gui/table.pyR     s    		c         C   s1  |  i  } | i ƒ  \ | i _ | i _ | d  j o | | i i j  p  | d  j o; | | i i j  o( | i | | ƒ \ | i _ | i _ n t | | i i |  i i ƒ } t | | i i |  i i	 ƒ } | | i i } | | i i } |  i i
 d | d | i _ |  i i d | d | i _ | | f S(   Ni   i   (   R   R4   R5   R   R6   R"   R7   R   R:   R;   t   alignR$   t   valignR<   (   R   R:   R;   R   t   dxt   dy(    (    s   ../pgu/gui/table.pyR4   &  s    	@(N(   RI   RJ   R   R"   R4   (    (    (    s   ../pgu/gui/table.pyR0     s   	(   RK   t   constR   R   R   R8   R0   (    (    (    s   ../pgu/gui/table.pys   <module>   s   
ÿ 	