ó
ïO(Oc           @   s~   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d d d „  ƒ  YZ d d d „  ƒ  YZ d S(   iÿÿÿÿNt	   PrintDatac           B   s2   e  Z d  Z d Z d Z d Z d Z d Z d Z	 RS(   s   Print Operation DataN(
   t   __name__t
   __module__t   __doc__t   Nonet   textt   layoutt   layout_is_new_linet   layout_num_linest   page_breakst   all_lines_y(    (    (    s   modules/printing.pyR       s   t   PrintHandlerc           B   sÂ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s!   Handler for the CherryTree Printsc         C   s   g  |  _  d |  _ d |  _ d S(   s   Instantiate VariablesN(   t   active_printsR   t   settingst
   page_setup(   t   self(    (    s   modules/printing.pyt   __init__(   s    		c         C   s   t  j ƒ  } | j t ƒ |  j d k r: t  j ƒ  |  _ n  |  j d k r[ t  j ƒ  |  _ n  | j	 |  j ƒ | j
 |  j ƒ | S(   s   Return a Print OperationN(   t   gtkt   PrintOperationt   set_show_progresst   TrueR   R   t	   PageSetupR   t   PrintSettingst   set_default_page_setupt   set_print_settings(   R   t   print_operation(    (    s   modules/printing.pyt   get_print_operation.   s      c         C   sµ   y | j  t j | ƒ } Wn0 t j k
 rK } t j d t | ƒ | ƒ nD X| t j k rn t j d | ƒ n! | t j	 k r | j
 ƒ  |  _ n  | j ƒ  s± | j d |  j ƒ n  d S(   s   Run a Ready Print Operations+   Error printing file:
%s (exception catched)s   Error printing file (bad res)t   status_changedN(   t   runR   t#   PRINT_OPERATION_ACTION_PRINT_DIALOGt   gobjectt   GErrort   supportt   dialog_errort   strt   PRINT_OPERATION_RESULT_ERRORt   PRINT_OPERATION_RESULT_APPLYt   get_print_settingsR   t   is_finishedt   connectt   on_print_status_changed(   R   R   t   parentt   rest   ex(    (    s   modules/printing.pyt   run_print_operation8   s     c         C   s    | j  ƒ  r t j | ƒ n  d S(   s   Print Operation Status ChangedN(   R&   R   t   remove(   R   t	   operation(    (    s   modules/printing.pyR(   E   s     c   	      C   s¶   t  j | ƒ |  _ t  j | ƒ |  _ | |  _ |  j j ƒ  t  j |  _ d |  _ | |  _	 t
 ƒ  } | | _ |  j ƒ  } | j d |  j | ƒ | j d |  j | ƒ |  j | | ƒ d S(   s#   Start the Print Operations for Texti   t   begin_printt	   draw_pageN(   t   pangot   FontDescriptiont
   pango_fontt   codebox_fontt   text_window_widtht   get_sizet   SCALEt   table_text_row_heightt   table_line_thicknesst   pixbuf_table_codebox_vectorR    R   R   R'   t   on_begin_print_textt   on_draw_page_textR,   (	   R   t   windowt
   pango_textt	   text_fontt	   code_fontR:   R5   t
   print_dataR   (    (    s   modules/printing.pyt
   print_textI   s    					c         C   si  | j  ƒ  |  _ | j ƒ  d |  _ x&t } g  | _ g  | _ g  | _ g  | _ xÑ t	 | j
 ƒ D]À \ } } | j j | j ƒ  ƒ | j d j |  j ƒ | j d j t |  j t j ƒ ƒ | j d j | ƒ | t j k rò | j j t ƒ n | j j t ƒ | j j | j d j ƒ  ƒ q_ Wd |  _ g  | _ t d ƒ } t d ƒ } d d g }	 xât	 | j ƒ D]Ñ\ } }
 d } xA| | j | k  r¾| j | j | ƒ } |  j | ƒ \ } } | | k rÑ| } n  | | j | d k  sõ| j | r±| | |  j k r~| j j |	 ƒ d } | |  j k r~|  j | d d d k r{| |  j k r{|  j | d | | ƒ t } Pq{q~n  | | 7} | j j | ƒ d } | | d g }	 n  | d 7} q~W| sÉPn  | t | j ƒ d k  ri|  j | d d k r9|  j | d d } | j ƒ  t j  } | | k  r7| } q7q:|  j | d d k rÒ|  j | d d } | d j! d | d j" ƒ  ƒ |  j# | | ƒ } |  j$ | | d	 ƒ } |  j% | ƒ } | | k  r7| } q7q:|  j | d d k r:|  j | d d } |  j& | | ƒ } |  j' | ƒ } | | k  r7| } q7q:qiqiW| r% Pq% q% | j( t | j ƒ d ƒ d
 S(   sS   Here we Compute the Lines Positions, the Number of Pages Needed and the Page BreaksgR¸…ëQð?iÿÿÿÿi    i   t   codeboxt   pixbuft   tablet   matrixt   col_minN()   t	   get_widtht
   page_widtht
   get_heightt   page_heightR   R   R   R   R
   t	   enumerateR   t   appendt   create_pango_layoutt   set_font_descriptionR3   t	   set_widtht   intR1   R7   t
   set_markupt   const   CHAR_NEWLINEt   Falset   get_line_countt   y_idxR	   t   floatt   get_linet   layout_line_get_width_heightR:   t   codebox_long_splitt   lent   WHITE_SPACE_BETW_PIXB_AND_TEXTt   insertt   popt   get_table_layoutst   get_table_gridt   get_table_height_from_gridt   get_codebox_layoutt   get_height_from_layoutt   set_n_pages(   R   R.   t   contextRA   t   exit_okt   it	   text_slott   curr_yt   inline_pending_heightt   inline_starterR   t   layout_line_idxt   layout_linet
   line_widtht   line_heightt   codebox_heightRD   t   pixbuf_heightRE   t   table_layoutst
   table_gridt   table_heightt   codebox_dictt   codebox_layout(    (    s   modules/printing.pyR;   Y   sŠ    				$!		 	$

     c         C   sa  | d k r d d g } n | j  | d } | t | j  ƒ k  rQ | j  | } n  t | j ƒ d | j d g } | j ƒ  } | j d d d ƒ | j d ƒ d | d | j d ƒ f } | j |  j	 d |  j
 d	 ƒ | j | ƒ t d ƒ }	 | d }
 | d } xU|
 | d k r\| j d d d ƒ |
 | d k rDd } n  xì | | j |
 k  r2| j |
 j | ƒ } |  j | ƒ \ } } | d k rÅ| j |	 | j |  j ƒ | j | ƒ |	 | 7}	 n  | | j |
 d k  sé| j |
 rd
 }	 |  j d 7_ n  | d 7} |
 | d k rG| | d k rGd SqGW|
 t | j ƒ d k  rO|  j |
 d d k rÈ|  j |
 d d } | j ƒ  } | j ƒ  } | j | |	 | j |  j | ƒ | j ƒ  |	 | 7}	 qO|  j |
 d d k r˜|  j |
 d d } |  j | | ƒ } |  j | | d ƒ } |  j | ƒ } |  j | ƒ } |  j | | |	 | j |  j | | | ƒ |  j | | | |	 | j |  j | ƒ |	 | 7}	 qO|  j |
 d d k rO|  j |
 d d } |  j | | ƒ } |  j | ƒ } |  j  | ƒ } |  j! | |	 | j |  j | | | ƒ |  j" | | |	 | j |  j | ƒ |	 | 7}	 qOn  |
 d 7}
 qWd S(   s@   This Function is Called For Each Page Set in on_begin_print_texti    i   iÿÿÿÿg      à?i   s   %s/%ss   n-pagesi   i   g        NRD   RE   RG   RC   (#   R	   R\   R   R   t   get_cairo_contextt   set_source_rgbt   set_font_sizet   get_propertyt   move_toRI   RK   t	   show_textRX   RY   RZ   R
   RW   t   show_layout_lineR   R:   RH   RJ   t   set_source_pixbuft   paintR`   Ra   t   get_table_width_from_gridRb   t   table_draw_gridt   table_draw_textRc   Rd   t   get_width_from_layoutt   codebox_draw_boxt   codebox_draw_code(   R   R.   Rf   t   page_nrRA   t   start_line_numt   end_line_numt   cairo_contextt   page_num_strt   curr_xRh   Rm   Rn   Ro   Rp   RD   t   pixbuf_widthRr   RE   Rs   Rt   t   table_widthRu   Rv   Rw   Rq   t   codebox_width(    (    s   modules/printing.pyR<   £   s”       

 	$
  !
				c         C   s¢   | j  ƒ  } | j |  j ƒ | d r3 | d } n |  j | d d } | |  j k rc |  j } n  | j t | t j ƒ ƒ | j	 t j
 ƒ | j | d ƒ | S(   s   Return the CodeBox Layoutt   width_in_pixelst   frame_widthid   t	   fill_text(   RN   RO   R4   R5   RI   RP   RQ   R1   R7   t   set_wrapt   WRAP_WORD_CHARRR   (   R   Rf   Rv   R   R   (    (    s   modules/printing.pyRc   õ   s    
  c         C   sf   d } | j  ƒ  } xB t | ƒ D]4 } | j | ƒ } |  j | ƒ \ } } | | 7} q W| d t j S(   s#   Returns the Height given the Layouti    i   (   RV   t   rangeRY   RZ   RS   t   GRID_SLIP_OFFSET(   R   R   t   heightt   num_layout_linesRm   Rn   Ro   Rp   (    (    s   modules/printing.pyRd     s    c         C   sq   d } | j  ƒ  } xM t | ƒ D]? } | j | ƒ } |  j | ƒ \ } } | | k r | } q q W| d t j S(   s#   Returns the Height given the Layouti    i   (   RV   R•   RY   RZ   RS   R–   (   R   R   t   widthR˜   Rm   Rn   Ro   Rp   (    (    s   modules/printing.pyR„     s     c   	      C   sÚ   g  } xÍ t  | d ƒ D]» \ } } | j g  ƒ xŸ t  | ƒ D]‘ \ } } | j ƒ  } | j |  j ƒ | d k r‚ d | d } n  | j t | d t j ƒ ƒ | j	 t j
 ƒ | j | ƒ | | j | ƒ q= Wq W| S(   s   Return the Table Cells LayoutsRF   i    s   <b>s   </b>t   col_max(   RL   RM   RN   RO   R3   RP   RQ   R1   R7   R“   R”   RR   (	   R   Rf   RE   Rs   Rh   t	   table_rowt   jt	   cell_textR   (    (    s   modules/printing.pyR`     s     c         C   s6   | j  ƒ  \ } } | \ } } } } | d | d g S(   s)   Returns Width and Height of a layout lineg      @(   t   get_extents(   R   Rn   t   ink_rectt   logical_rectt   lxt   lyt   lwidtht   lheight(    (    s   modules/printing.pyRZ   $  s    c         C   sÿ   d g t  | ƒ } | g t  | d ƒ } xÈ t | ƒ D]º \ } } x« t | ƒ D] \ } } d }	 | j ƒ  }
 x_ t |
 ƒ D]Q } | j | ƒ } |  j | ƒ \ } } |	 | 7}	 | | | k  r{ | | | <q{ q{ W| | |	 k  rP |	 | | <qP qP Wq7 W| | g S(   s*   Returns the Dimensions of Rows and Columnsi    (   R\   RL   RV   R•   RY   RZ   (   R   Rs   RG   t   rows_ht   cols_wRh   t
   layout_rowRœ   t   layout_cellt   cell_heightR˜   Rm   Rn   Ro   Rp   (    (    s   modules/printing.pyRa   *  s    
  c         C   s0   d } x# | d D] } | | |  j  7} q W| S(   s3   Returns the Table Width given the table_grid vectori    i   (   R9   (   R   Rt   RŽ   t   col_w(    (    s   modules/printing.pyR   :  s    c         C   s0   d } x# | d D] } | | |  j  7} q W| S(   s4   Returns the Table Height given the table_grid vectori    (   R9   (   R   Rt   Ru   t   row_h(    (    s   modules/printing.pyRb   A  s    c         C   s:   | j  d d d d ƒ | j | | | | ƒ | j ƒ  d S(   s   Draw the CodeBox Boxi    g333333Ó?N(   t   set_source_rgbat	   rectanglet   stroke(   R   RŠ   t   x0t   y0R   Rq   (    (    s   modules/printing.pyR…   H  s    c         C   s  | } | } | j  d d d d ƒ | j | | ƒ | j | | | ƒ xG | d D]; }	 | |	 |  j 7} | j | | ƒ | j | | | ƒ qQ W| } | j | | ƒ | j | | | ƒ xG | d D]; }
 | |
 |  j 7} | j | | ƒ | j | | | ƒ qÅ W| j ƒ  d S(   s   Draw the Table Gridi    g333333Ó?i   N(   R¬   R|   t   line_toR9   R®   (   R   RŠ   Rt   R¯   R°   RŽ   Ru   t   xt   yR«   Rª   (    (    s   modules/printing.pyR‚   N  s"    c         C   s  | j  d d d ƒ | } xô t | d ƒ D]â \ } } | t j }	 xµ t | d ƒ D]£ \ }
 } | | |
 } | } | j ƒ  } xc t | ƒ D]U } | j | ƒ } |  j | ƒ \ } } | j |	 | | ƒ | | 7} | j	 | ƒ q W|	 | |  j
 7}	 qT W| | |  j
 7} q* Wd S(   s'   Draw the text inside of the Table Cellsi    i   N(   Ry   RL   RS   R–   RV   R•   RY   RZ   R|   R~   R9   (   R   RŠ   Rt   Rs   R¯   R°   R³   Rh   R«   R²   Rœ   Rª   R¨   t   local_yR˜   Rm   Rn   Ro   Rp   (    (    s   modules/printing.pyRƒ   d  s     
c         C   s–   | j  d d d ƒ | } | j ƒ  } xj t | ƒ D]\ } | j | ƒ } |  j | ƒ \ }	 }
 | j | t j | |
 ƒ | |
 7} | j | ƒ q2 Wd S(   s   Draw the code inside of the Boxi    N(	   Ry   RV   R•   RY   RZ   R|   RS   R–   R~   (   R   RŠ   Rw   R¯   R°   R³   R˜   Rm   Rn   Ro   Rp   (    (    s   modules/printing.pyR†   w  s    
c         C   sÜ  |  j  | d d } | d j t j ƒ } t j | ƒ } t j | ƒ } g  } xï t | ƒ d k r@| d  } t j j | ƒ }	 |	 | d <|  j | | ƒ }
 |  j	 |
 ƒ } | |  j
 k  rR | j |	 ƒ | t | ƒ } | } t j j | ƒ }	 |	 | d <|  j | | ƒ }
 |  j	 |
 ƒ } | |  j
 k  r=| j |	 ƒ Pq=qR qR Wx” t | ƒ D]† \ } } | d k rs| | d <qN| | } | j j | t j ƒ t j | ƒ } | | d <d d | d g g } |  j  j | | ƒ qNWd S(   s   Split Long CodeBoxesi   R’   iÿÿÿÿi    RC   N(   R:   t   splitRS   RT   t   copyt   deepcopyR\   t   joinRc   Rd   RK   RM   RL   R   R^   R   (   R   t   idxRf   RA   Rv   t   original_splitted_pangot   splitted_pangot   codebox_dict_jollyt   partial_pango_vect   partial_pangoRw   Rq   Rh   t   elementt   indext   new_codebox_dictt   pixbuf_table_codebox_element(    (    s   modules/printing.pyR[   ƒ  s>    


 

(   R   R   R   R   R   R,   R(   RB   R;   R<   Rc   Rd   R„   R`   RZ   Ra   R   Rb   R…   R‚   Rƒ   R†   R[   (    (    (    s   modules/printing.pyR   %   s*   		
				J	R		
	
									(    (    (	   R   R   R1   t   cairoR¶   R    RS   R    R   (    (    (    s   modules/printing.pyt   <module>   s   0
