;ς
³0sDc           @   so   d  Z  d Z d k Z e i d  Z d d d d d d	 d
 d f Z d k l Z e i Z d f  d     YZ	 d S(   s5    $Id: frames.py 2852 2006-05-08 15:04:15Z rgbecker $ s   
Ns   reportlab.platypuss   x1s   y1s   widths   heights   leftPaddings   bottomPaddings   rightPaddings
   topPadding(   s	   rl_configs   Framec        	   B   s   t  Z d  Z d d d d e d e e d  Z d   Z d   Z d   Z d   Z d   Z	 d d	  Z
 e
 Z d
   Z d   Z d   Z RS(   sn  
    A Frame is a piece of space in a document that is filled by the
    "flowables" in the story.  For example in a book like document most
    pages have the text paragraphs in one or two frames.  For generality
    a page might have several frames (for example for 3 column text or
    for text that wraps around a graphic).

    After creation a Frame is not usually manipulated directly by the
    applications program -- it is used internally by the platypus modules.

    Here is a diagramatid abstraction for the definitional part of a Frame

                width                    x2,y2
        +---------------------------------+
        | l  top padding                r | h
        | e +-------------------------+ i | e
        | f |                         | g | i
        | t |                         | h | g
        |   |                         | t | h
        | p |                         |   | t
        | a |                         | p |
        | d |                         | a |
        |   |                         | d |
        |   +-------------------------+   |
        |    bottom padding               |
        +---------------------------------+
        (x1,y1) <-- lower left corner

        NOTE!! Frames are stateful objects.  No single frame should be used in
        two documents at the same time (especially in the presence of multithreading.
    i   i    c         C   sΎ   |	 |  _  | |  _ | |  i d <| |  i d <| |  i d <| |  i d <| |  i d <| |  i d <| |  i d <| |  i d <|
 |  _ | t j o t i } n | |  _ |  i   |  i   d  S(	   Ns   _x1s   _y1s   _widths   _heights   _leftPaddings   _bottomPaddings   _rightPaddings   _topPadding(   s   ids   selfs   _debugs   x1s   __dict__s   y1s   widths   heights   leftPaddings   bottomPaddings   rightPaddings
   topPaddings   showBoundarys   overlapAttachedSpaces   Nones	   rl_configs   _oASpaces   _geoms   _reset(   s   selfs   x1s   y1s   widths   heights   leftPaddings   bottomPaddings   rightPaddings
   topPaddings   ids   showBoundarys   overlapAttachedSpaces   _debug(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   __init__1   s     			 	
c         C   s-   | t j o |  i d | Sn t |  d  S(   Ns   _(   s   as	   _geomAttrs   selfs   __dict__s   AttributeError(   s   selfs   a(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   __getattr__K   s     c         C   s=   | t j o | |  i d | <|  i   n | |  i | <d  S(   Ns   _(   s   as	   _geomAttrs   vs   selfs   __dict__s   _geom(   s   selfs   as   v(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   __setattr__O   s    c         C   sx   |  i |  i |  _ |  i |  i |  _ |  i |  i |  _ |  i |  i |  i	 |  i
 |  _ |  i |  i |  i |  _ d  S(   N(   s   selfs   _x1s   _widths   _x2s   _y1s   _heights   _y2s   _bottomPaddings   _y1ps   _leftPaddings   _rightPaddings   _aWs   _topPaddings   _aH(   s   self(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   _geomV   s
    !c         C   sN   |  i |  i |  _ |  i |  i |  _ d |  _ d |  _ d |  _	 d |  _
 d  S(   Ni   i    f0.0(   s   selfs   _x1s   _leftPaddings   _xs   _y2s   _topPaddings   _ys   _atTops   _prevASpaces   _leftExtraIndents   _rightExtraIndent(   s   self(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   _reset_   s    			c         C   s   |  i |  i |  i Sd  S(   N(   s   selfs   _aWs   _leftExtraIndents   _rightExtraIndent(   s   self(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   _getAvailableWidthl   s    c   
      C   s  t  | d t  o | i |   d Sn |  i } |  i } d } |  i
   } |  i o4 | i   } |  i o t | |  i d  } q n | | | }	 |	 d j o: |  | _ | | _ | i | |	  \ } }	 | ` | ` n d S|	 | 7}	 | |	 8} | | t j  o^ t i o" |	 |  i j p
 | | j o | o& d d | i | |	 | |  i f  n d Sn³ |  | _ | i | |  i |  i | d | | |  i o t  i! d | i"    n | ` | i#   } | | 8} |  i o | |  _ n | |  i j o d |  _ n | |  _ d Sd S(	   sτ    Draws the flowable at the current position.
        Returns 1 if successful, 0 if it would not fit.
        Raises a LayoutError if the object is too wide,
        or if it is too high for a totally empty frame,
        to avoid infinite loopss   frameActioni   i    s   LayoutErrors>   Flowable %s (%sx%s points) too large for frame (%sx%s points).s   _sWs   drew %sN($   s   getattrs   flowables   Nones   frameActions   selfs   _ys   ys   _y1ps   ps   ss   _getAvailableWidths   aWs   _atTops   getSpaceBefores   _oASpaces   maxs   _prevASpaces   hs   _frames   canvs   wraps   ws   _FUZZs	   rl_configs   allowTableBoundsErrorss   _aHs   trySplits	   __class__s   drawOns   _xs   _leftExtraIndents   _debugs   loggers   debugs   identitys   getSpaceAfter(
   s   selfs   flowables   canvs   trySplits   ws   ss   ps   aWs   ys   h(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   _addo   sL     		
		

0&	'
 

  	c         C   sg   |  i } |  i } d } |  i o | i   } n | | _	 | i
 |  i | | |  } | `	 | Sd S(   s7   Ask the flowable to split using up the available space.i    N(   s   selfs   _ys   ys   _y1ps   ps   ss   _atTops   flowables   getSpaceBefores   canvs   splits   _aWs   r(   s   selfs   flowables   canvs   ps   ss   rs   y(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   split‘   s     		 	c         C   sπ   d k  l } l } l } |  i } t |  t d  t f   t g   f j p t | |  } | oA | | |   } | |  j o
 d } q§ | i   | i |  n | i |  i |  i |  i |  i |  i |  i  | o | i   n d S(   sA   draw the frame boundary as a rectangle (primarily for debugging).(   s   Colors	   CMYKColors   toColors    i    N(   s   reportlab.lib.colorss   Colors	   CMYKColors   toColors   selfs   showBoundarys   sbs   types
   isinstances   isColors   canvs	   saveStates   setStrokeColors   rects   _x1s   _y1s   _x2s   _y2s   restoreState(   s   selfs   canvs   Colors   isColors   toColors	   CMYKColors   sb(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   drawBoundary¬   s      	= 

 c         C   s   |  i o t i d |  i  n |  i o |  i |  n xG t |  d j o3 | d } |  i | | d d o | d =q@ Pq@ Wd S(   s   Consumes objects from the front of the list until the
        frame is full.  If it cannot fit one object, raises
        an exception.s&   enter Frame.addFromlist() for frame %si    s   trySplitN(   s   selfs   _debugs   loggers   debugs   ids   showBoundarys   drawBoundarys   canvs   lens   drawlists   heads   add(   s   selfs   drawlists   canvs   head(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   addFromListΏ   s     
 
 
(   s   __name__s
   __module__s   __doc__s   Nones   __init__s   __getattr__s   __setattr__s   _geoms   _resets   _getAvailableWidths   _adds   adds   splits   drawBoundarys   addFromList(    (    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   Frame   s    !						0		(
   s   __version__s   __doc__s   loggings	   getLoggers   loggers	   _geomAttrs	   reportlabs	   rl_configs   _FUZZs   Frame(   s   loggings   Frames   _FUZZs	   rl_configs   loggers   __version__s   __doc__s	   _geomAttr(    (    sC   /home/packages/reportlab/reportlab_2_0/reportlab/platypus/frames.pys   ?   s   		