
RR,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 l Z d  d l Z d f  d     YZ	 d f  d     YZ
 d f  d     YZ d f  d	     YZ d S(
   iNt   TablesHandlerc           B   s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d d d 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 of the Tablesc         C   s   | |  _  d S(   s   Lists Handler bootN(   t   dad(   t   selfR   (    (    s   modules/tablez.pyt   __init__   s    c         G   s*   |  j  j |  j  |  j  j j d  d S(   s	   Cut Tables   cut-clipboardN(   R   t   object_set_selectiont   curr_table_anchort
   sourceviewt   emit(   R   t   args(    (    s   modules/tablez.pyt	   table_cut"   s    c         G   s*   |  j  j |  j  |  j  j j d  d S(   s
   Copy Tables   copy-clipboardN(   R   R   R   R   R   (   R   R   (    (    s   modules/tablez.pyt
   table_copy'   s    c         G   sI   |  j  j |  j  |  j  j j t |  j  j j    |  j  j j   d S(   s   Delete TableN(	   R   R   R   t   curr_buffert   delete_selectiont   TrueR   t   get_editablet
   grab_focus(   R   R   (    (    s   modules/tablez.pyt   table_delete,   s    "c         C   s;   t  j j | j  } | d k r7 |  j j j j   n  d S(   s&   Catches TableHandle Dialog key pressest   ReturnN(   t   gtkt   gdkt   keyval_namet   keyvalR   t   gladet   tablehandledialog_button_okt   clicked(   R   t   widgett   eventt   keyname(    (    s   modules/tablez.pyt   on_key_press_tablehandledialog2   s     c      	   C   s   t  j d |  j j d d d t d  d |  j j  } | d k rF d St |  d k  sh | d	 d
 k ru | d
 7} n  t j	 j
 |  |  j _ |  j j j |  j  } | d } | j d | j    t | d  } t |  } | j |  | j   d S(   s   Table Export as CSV Filet   curr_foldert   filter_patterns   *.csvt   filter_names   CSV Filet   parentNi   is   .csvt   matrixi    t   w(   t   supportt   dialog_file_save_asR   t   pick_dirt   _t   windowt   Nonet   lent   ost   patht   dirnamet   state_machinet   table_to_dictR   t   insertt   popt   opent   UnicodeWritert	   writerowst   close(   R   t   actiont   filenamet
   table_dictt   table_matrixt   file_descriptort   writer(    (    s   modules/tablez.pyt   table_export7   s      " 
c      	   C   sz  |  j  j j |  j  j j    } |  j  j j j t d    |  j  j j j	   |  j  j j
 j	   |  j  j j j t  |  j  j j j	   |  j  j j j   |  j  j j j   } |  j  j j j   | d k r d S|  j  j j j   stt |  j  j j j    |  _ t |  j  j j j    |  _ t |  j  j j j    |  _ t |  j  j j j    |  _ |  j |  nt j d d d t d  d |  j  j d |  j  j   } | d k rvt" j# j$ |  |  j  _ t j% |  t& | d	  } t' |  } g  } | j(   } x# | r-| j) |  | j(   } qW| j*   | j) | j+ d
   |  j | i d d 6d d 6| d 6 n  d S(   s   Insert Tablei   NR   s   *.csvR   s   CSV FileR   R    t   ri    i(   t   col_mini  t   col_maxR!   (,   R   R   t   get_iter_at_markt
   get_insertR   t   tablehandledialogt	   set_titleR&   t   tablehandle_frame_tablet   showt   tablehandle_frame_colt   checkbutton_table_ins_from_filet
   set_activet   Falset   tablehandle_vbox_colt   hidet   runt
   get_activet   intt   spinbutton_table_rowst	   get_valuet
   table_rowst   spinbutton_table_columnst   table_columnst   spinbutton_table_col_mint   table_col_mint   spinbutton_table_col_maxt   table_col_maxt   table_insertR#   t   dialog_file_selectR%   R'   R(   R*   R+   R,   t   text_file_rm_emptylinesR1   t   UnicodeReadert   nextt   appendR4   R0   (   R   t   iter_insertt   responset   filepathR9   t   readerR8   t   row(    (    s   modules/tablez.pyt   table_handleH   sD    ! 	
c         C   s  | s |  j  j } n  | d k rt t | d d  |  _ t | d  d |  _ | d d } | d } | d } n( t d  g |  j } |  j } |  j } | j	 |  } t
 j t f |  j   | _ t
 j | j  | _ xjt |  j  D]Y}	 t
 j d | |	 d	  }
 |
 j t  |
 j t d
   |
 j   t
 j   } | j d t  | j d |  | j d t j  | j d t j |  j  j   | j d |  j | j |	  | j d |  j | j |	  t
 j d | d |	 } | j  |  | j! t  | j" |
  | j# t
 j$  | j d |  j% | |	  | j j& |  q W| | _' | | _ | | _ | j j( t
 j)  | j j d |  j* |  t
 j+   | _, | j, j- | j  | j, j. t
 j/  t
 j0   | _1 | j1 j- | j,  |  j  j2 j3 | j1 |  | j1 j4   xy t |  j  D]h } | j j5 d g |  j  } | d k rx7 t |  j  D]# } | d | | | j | | <q[WqqW| r| j6 |  } |  j  j7 j8 | | |  n6 |  j  j9 r|  j  j7 j: |  j  j; |  j  j< d  n  d S(   s    Insert a Table at the Given IterR!   i    i   iR=   R>   s   click mes   <b>s   </b>s!   Click to Edit the Column Settingst   editables
   wrap-widths	   wrap-modes	   font-desct   editeds   editing-startedt    t   textR   s   button-press-eventi   N(=   R   R   R(   R)   RR   RP   R&   RT   RV   t   create_child_anchorR   t	   ListStoret   strt	   liststoret   TreeViewt   treeviewt   ranget   Labelt   set_use_markupR   t   set_tooltip_textRD   t   CellRendererTextt   set_propertyt   pangot   WRAP_WORD_CHARt   FontDescriptiont	   text_fontt   connectt   on_table_cell_editedt   on_table_cell_editing_startedt   TreeViewColumnt   set_min_widtht   set_clickablet
   set_widgett
   set_sizingt   TREE_VIEW_COLUMN_AUTOSIZEt   table_column_clickedt   append_columnt   headerst   set_grid_linest   TREE_VIEW_GRID_LINES_BOTHt   on_mouse_button_clicked_tablet   Framet   framet   addt   set_shadow_typet   SHADOW_NONEt   EventBoxt   eventboxR   t   add_child_at_anchort   show_allR\   t   get_iter_at_child_anchorR-   t   apply_object_justificationt   user_activet   update_statet	   treestoret   curr_tree_iter(   R   R]   t   tablet   table_justificationt   text_bufferR   RT   RV   t   anchort   elementt   labelt   renderer_textt   columnRa   t   row_itert	   text_iter(    (    s   modules/tablez.pyRW   m   sn     
		
			(c         G   s  |  j  j |  _ |  j  j |  _ |  j j j j |  j  j  |  j j j j |  j  j  |  j j j j	 t
 d    |  j j j j   |  j j j j   |  j j j j   |  j j j j   |  j j j j t  |  j j j j   } |  j j j j   | d k rd St |  j j j j    |  _ |  j j j |  j   } t |  j j j j    |  _ |  j | d <|  j | d <|  j j j |  j   } |  j j j |  } | j   } | j   |  j j j | |  |  j | | |  d S(   s   Edit Table Propertiesi   NR=   R>   (   R   RT   RV   R   R   RS   t	   set_valueRU   RA   RB   R&   RC   RJ   RE   RD   RI   RF   t   set_sensitiveR   RK   RM   RO   R-   R.   R   R   t   get_iter_alignmentt   copyt   forward_chart   deleteRW   (   R   R   R^   R   R]   R   t
   iter_bound(    (    s   modules/tablez.pyt   table_edit_properties   s2     
c      	   C   s  t  j j | j  } | j t  j j @r+ n| j t  j j @rA n| j t  j j @rW n| d k r| | | | j   k r | j   | | | <|  j	 j
 d t  n  | d k rn| d k r | d } | } qd }	 | j | j |   } xR |	 rD| d d k rDt |  }
 |
 d c d 8<t |
  } | j |  }	 q W|	 sOd S| j |	  } |  j d } n] | |  j d k  r| d } | } n7 | j | j |   }	 |	 sd S| j |	  } d } |  j j j   | } |  j j j | d | d	 | j   d d
 t n  d S(   s   Catches Table Cell key pressesR   t   Upt   Downt   nbufi    i   Nt   focus_columnt
   focus_cellt   start_editing(   s   Returns   Ups   Down(   R   R   R   R   t   statet
   SHIFT_MASKt	   MOD1_MASKt   CONTROL_MASKt   get_textR   t   update_window_save_neededR   R(   t   get_patht   get_itert   listt   tupleRR   t	   iter_nextR   Rl   t   get_columnst   set_cursor_on_cellt   get_cell_renderers(   R   R   R   R+   t   modelt   col_numR   t   next_col_numt	   next_patht	   next_itert   node_path_listt   next_column(    (    s   modules/tablez.pyt   on_key_press_table_cell   sN    
	 
	 c         C   s5   t  | t j  r1 | j d |  j | | |  n  d S(   s"   A Table Cell is going to be Editedt   key_press_eventN(   t
   isinstanceR   t   EntryRw   R   (   R   t   cellRc   R+   R   R   (    (    s   modules/tablez.pyRy      s    c         C   s<   | | | | k r8 | | | | <|  j  j d t  n  d S(   s   A Table Cell has been EditedR   N(   R   R   R   (   R   R   R+   t   new_textR   R   (    (    s   modules/tablez.pyRx      s    c         C   s  |  j  j j j t d   |  j  j j j   |  j  j j j   |  j  j j j   |  j  j j	 j
   | j   } |  j  j j j | j    |  j  j j j   |  j  j j j |  j  j d k  |  j  j j j |  j  j d k  |  j  j j j   } |  j  j j j   | d k rd S|  j  j j |  } | d j   } |  j  j d k rl| t |  d k s|  j  j d k r| d	 k rd S|  j  j j |  } |  j  j j |  }	 | j   }
 |
 j   |  j  j j | |
  |  j  j d k r:|  j  j j j   } | j d
 | d  | j t  | | | <n|  j  j d k r| j  | d |  j  j j j    xM| d D] } | j  | d d  qzWn$|  j  j d k r| j |  x| d D] } | j |  qWn |  j  j d k rO| j |  } | j  | d |  x | d D]) } | j |  } | j  | d |  qWnp |  j  j d k r| j |  } | j  | d |  x8 | d D]) } | j |  } | j  | d |  qWn  | d j! |  |  j" | | |	  d S(   s   The Column Header was Clickeds   Table Column ActionR   t   renamei   NR!   t   rightt   lefti    s   <b>s   </b>Re   R   (#   R   R   RA   RB   R&   RC   RJ   RE   RF   RI   RD   t
   get_widgett   table_column_rename_entryt   set_textR   R   t   table_column_new_entryR   t   table_column_modeRK   R-   R.   R0   R)   R   R   R   R   R   R   Ro   R   R/   R\   RW   (   R   R   R   R   t	   col_labelR^   R   R   R]   R   R   t	   new_labelRa   t   temp(    (    s   modules/tablez.pyR      sf    "" (
#  c         C   s  |  j  j j   } | j   \ } } | d k r@ | j |  n| d k rr | j | d g t |  j  j   n`| d k r |  j j	 | |  } | d k r d S| j | |  |  j  j j | j |   n | d k r| j |  } | d k r d S| j | |  n| d k rf| j |  } t } x% |  j j | | t d  rXt } q4W| sd Snl| d	 k r| j |  } t } x% |  j j | | t d  rt } qW| sd Sn| d k rt |  j  j  }	 i g  d 6|  j  j d 6|  j  j d 6}
 g  } x/ t |	  D]! } | j |  j  j | |  qW|
 d j |  |
 d j t j |  j  j   |  j j j |
  | d
 k r| j |  qd Sn2 | d k r|  j j j | | g  sd Sn d S|  j j d t  d S(   s   All Rows ActionsR   R   Re   t   move_upNt	   move_downt	   sort_desci    t   sort_asct   cutR   R!   R=   R>   t   pasteR   (   s   cuts   copy(   R   Rl   t   get_selectiont   get_selectedt   removet   insert_afterR)   R   R   t   get_tree_iter_prev_siblingR(   t   swapt
   set_cursorR   R   t   iter_parentRH   t   node_siblings_sort_iterationR   RT   RV   Rm   R\   Rj   R   t   deepcopyt   clipboard_handlert   table_row_to_clipboardt   table_row_pasteR   (   R   R5   t   treeviewselectionR   t   itert	   prev_itert   subseq_itert   father_itert	   movementst   columns_numR   Ra   R   (    (    s   modules/tablez.pyt   table_row_action0  sd      &  
 
 
    c         G   s   |  j  d  d S(   s   Add a Table RowR   N(   R   (   R   R   (    (    s   modules/tablez.pyt   table_row_add\  s    c         G   s   |  j  d  d S(   s   Cut a Table RowR   N(   R   (   R   R   (    (    s   modules/tablez.pyt   table_row_cut`  s    c         G   s   |  j  d  d S(   s   Copy a Table RowR   N(   R   (   R   R   (    (    s   modules/tablez.pyt   table_row_copyd  s    c         G   s   |  j  d  d S(   s   Paste a Table RowR   N(   R   (   R   R   (    (    s   modules/tablez.pyR   h  s    c         G   s   |  j  d  d S(   s   Delete a Table RowR   N(   R   (   R   R   (    (    s   modules/tablez.pyt   table_row_deletel  s    c         G   s   |  j  d  d S(   s   Move the Selected Row UpR   N(   R   (   R   R   (    (    s   modules/tablez.pyt   table_row_upp  s    c         G   s   |  j  d  d S(   s   Move the Selected Row DownR   N(   R   (   R   R   (    (    s   modules/tablez.pyt   table_row_downt  s    c         G   s   |  j  d  d S(   s   Sort all the Rows DescendingR   N(   R   (   R   R   (    (    s   modules/tablez.pyt   table_rows_sort_descendingx  s    c         G   s   |  j  d  d S(   s   Sort all the Rows AscendingR   N(   R   (   R   R   (    (    s   modules/tablez.pyt   table_rows_sort_ascending|  s    c         C   s`   | |  _  |  j j |  j   | j d k r\ |  j j j d  j d d d | j | j  n  d S(   s   Catches mouse buttons clicksi   s
   /TableMenuN(	   R   R   R   t   buttont   uiR   t   popupR(   t   time(   R   R   R   R   (    (    s   modules/tablez.pyR     s    	N(   t   __name__t
   __module__t   __doc__R   R	   R
   R   R   R;   Rb   R(   RW   R   R   Ry   Rx   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s   modules/tablez.pyR       s2   							%;		/			3	,									t   UTF8Recoderc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   sP   
    Iterator that reads an encoded stream and reencodes the input to UTF-8
    c         C   s   t  j |  |  |  _ d  S(   N(   t   codecst	   getreaderR`   (   R   t   ft   encoding(    (    s   modules/tablez.pyR     s    c         C   s   |  S(   N(    (   R   (    (    s   modules/tablez.pyt   __iter__  s    c         C   s   |  j  j   j d  S(   Ns   utf-8(   R`   R[   t   encode(   R   (    (    s   modules/tablez.pyR[     s    (   R   R   R   R   R  R[   (    (    (    s   modules/tablez.pyR     s   		RZ   c           B   s2   e  Z d  Z e j d d  Z d   Z d   Z RS(   su   
    A CSV reader which will iterate over lines in the CSV file "f",
    which is encoded in the given encoding.
    s   utf-8c         K   s.   t  | |  } t j | d | | |  _ d  S(   Nt   dialect(   R   t   csvR`   (   R   R   R  R  t   kwds(    (    s   modules/tablez.pyR     s    c         C   sB   y3 |  j  j   } g  | D] } t | d  ^ q SWn d  SXd  S(   Ns   utf-8(   R`   R[   t   unicodeR(   (   R   Ra   t   s(    (    s   modules/tablez.pyR[     s
    $ c         C   s   |  S(   N(    (   R   (    (    s   modules/tablez.pyR    s    (   R   R   R   R  t   excelR   R[   R  (    (    (    s   modules/tablez.pyRZ     s   	R2   c           B   s2   e  Z d  Z e j d d  Z d   Z d   Z RS(   si   
    A CSV writer which will write rows to CSV file "f",
    which is encoded in the given encoding.
    s   utf-8c         K   sO   t  j   |  _ t j |  j d | | |  _ | |  _ t j |    |  _ d  S(   NR  (	   t	   cStringIOt   StringIOt   queueR  R:   t   streamR   t   getincrementalencodert   encoder(   R   R   R  R  R  (    (    s   modules/tablez.pyR     s    	c         C   s   |  j  j g  | D] } | j d  ^ q  |  j j   } | j d  } |  j j |  } |  j j |  |  j j	 d  d  S(   Ns   utf-8i    (
   R:   t   writerowR  R  t   getvaluet   decodeR  R  t   writet   truncate(   R   Ra   R  t   data(    (    s   modules/tablez.pyR    s    ,c         C   s"   x | D] } |  j  |  q Wd  S(   N(   R  (   R   t   rowsRa   (    (    s   modules/tablez.pyR3     s    (   R   R   R   R  R	  R   R  R3   (    (    (    s   modules/tablez.pyR2     s   	(   R   Rs   R*   R  R   R
  R   t   consR#   R    R   RZ   R2   (    (    (    s   modules/tablez.pyt   <module>   s   < n