ó
ïO(Oc           @   s÷   d  d l  Z  d  d l Z d  d l Z d „  Z d „  Z d „  Z d d d d d d „ Z d d d d d „ Z d d d „ Z	 d d „ Z
 d d	 „ Z d d
 „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿNc         C   s    t  } t |  d ƒ } g  } x< | D]4 } | d d t j g k rP | j | ƒ q" t } q" W| j ƒ  | rœ |  Gd GHt |  d ƒ } | j | ƒ | j ƒ  n  d S(   s!   Remove empty lines in a text filet   rs   
s   
s   empty lines removedt   wN(   t   Falset   opent   const   CHAR_NEWLINEt   appendt   Truet   closet
   writelines(   t   filepatht   overwrite_neededt   fdt
   file_linest	   file_line(    (    s   modules/support.pyt   text_file_rm_emptylines   s    

	c         C   sk   |  j  | d } |  j  j | ƒ } x5 | rZ |  j  | d d | } |  j  j | ƒ } q& W| j d d ƒ S(   s   Get the Node Hierarchical Namei   s   --t   /t   -(   t	   treestoret   iter_parentt   replace(   t   dadt	   tree_itert   hierarchical_namet   father_iter(    (    s   modules/support.pyt   get_node_hierarchical_name*   s    	c         C   sF   t  j |  k r! t  j |  t  j St  j |  k rB t  j |  t  j Sd S(   s6   Prepares a Path to be digested by windows command lineN(   R   t   CHAR_DQUOTEt   CHAR_SQUOTEt   None(   R
   (    (    s   modules/support.pyt   windows_cmd_prepare_path3   s
      c      
   C   s”  t  j d t d ƒ d t  j d t  j t  j t  j t  j f ƒ } | j t	 ƒ | d k r˜ | j | ƒ | j d t	 ƒ | j d t	 ƒ | j t  j ƒ n | j t  j ƒ | d k sÌ t j j | ƒ t k rè | j t j j d ƒ ƒ n | j | ƒ |  d k r| j |  ƒ n  | d k rSt  j ƒ  } | j | ƒ | j | ƒ | j | ƒ n  | j ƒ  t  j k r‚| j ƒ  } | j ƒ  | S| j ƒ  d Sd S(	   s?   The Save file as dialog, Returns the retrieved filepath or Nonet   titles   Save File ast   actiont   buttonst   modals   destroy-with-parentt   ~N(   t   gtkt   FileChooserDialogt   _t   FILE_CHOOSER_ACTION_SAVEt   STOCK_CANCELt   RESPONSE_CANCELt
   STOCK_SAVEt   RESPONSE_OKt   set_do_overwrite_confirmationR   R   t   set_transient_fort   set_propertyt   set_positiont   WIN_POS_CENTER_ON_PARENTt   WIN_POS_CENTERt   ost   patht   isdirR   t   set_current_foldert
   expandusert   set_current_namet
   FileFiltert   set_namet   add_patternt
   add_filtert   runt   get_filenamet   destroy(   t   filenamet   filter_patternt   filter_namet   curr_foldert   parentt   choosert   filterR
   (    (    s   modules/support.pyt   dialog_file_save_as9   s4    	!$

c      
   C   sk  t  j d t d ƒ d t  j d t  j t  j t  j t  j f ƒ } | d k r‹ | j	 | ƒ | j
 d t ƒ | j
 d t ƒ | j t  j ƒ n | j t  j ƒ | d k s¿ t j j | ƒ t k rÛ | j t j j d ƒ ƒ n | j | ƒ |  d k r*t  j ƒ  } | j | ƒ | j |  ƒ | j | ƒ n  | j ƒ  t  j k rY| j ƒ  } | j ƒ  | S| j ƒ  d Sd S(	   s>   The Select file dialog, Returns the retrieved filepath or NoneR   s   Select FileR   R    R!   s   destroy-with-parentR"   N(   R#   R$   R%   t   FILE_CHOOSER_ACTION_OPENR'   R(   t
   STOCK_OPENR*   R   R,   R-   R   R.   R/   R0   R1   R2   R3   R   R4   R5   R7   R8   R9   R:   R;   R<   R=   (   R?   R@   RA   RB   RC   RD   R
   (    (    s   modules/support.pyt   dialog_file_selectX   s.    	!$

c      
   C   s)  t  j d t d ƒ d t  j d t  j t  j t  j t  j f ƒ } | d k r‹ | j	 | ƒ | j
 d t ƒ | j
 d t ƒ | j t  j ƒ n | j t  j ƒ |  d k s¿ t j j |  ƒ t k rÛ | j t j j d ƒ ƒ n | j |  ƒ | j ƒ  t  j k r| j ƒ  } | j ƒ  | S| j ƒ  d Sd S(	   sB   The Select folder dialog, returns the retrieved folderpath or NoneR   s   Select FolderR   R    R!   s   destroy-with-parentR"   N(   R#   R$   R%   t!   FILE_CHOOSER_ACTION_SELECT_FOLDERR'   R(   RG   R*   R   R,   R-   R   R.   R/   R0   R1   R2   R3   R   R4   R5   R;   R<   R=   (   RA   RB   RC   t
   folderpath(    (    s   modules/support.pyt   dialog_folder_selectt   s$    	!$

c      	   C   s¸   t  j d t  j t  j Bd t  j d t  j d |  ƒ } | d k r` | j | ƒ | j t  j	 ƒ n | j t  j
 ƒ | j t d ƒ ƒ | j ƒ  t  j k r¦ | j ƒ  t S| j ƒ  t Sd S(   s8   The Question dialog, returns True if the user presses OKt   flagst   typeR    t   message_formatt   QuestionN(   R#   t   MessageDialogt   DIALOG_MODALt   DIALOG_DESTROY_WITH_PARENTt   MESSAGE_QUESTIONt   BUTTONS_OK_CANCELR   R,   R.   R/   R0   t	   set_titleR%   R;   R*   R=   R   R   (   t   messageRB   t   dialog(    (    s   modules/support.pyt   dialog_question‹   s    			

c      	   C   s›   t  j d t  j t  j Bd t  j d t  j d |  ƒ } | d k r` | j | ƒ | j t  j	 ƒ n | j t  j
 ƒ | j t d ƒ ƒ | j ƒ  | j ƒ  d S(   s   The Info dialogRL   RM   R    RN   t   InfoN(   R#   RP   RQ   RR   t   MESSAGE_INFOt
   BUTTONS_OKR   R,   R.   R/   R0   RU   R%   R;   R=   (   RV   RB   RW   (    (    s   modules/support.pyt   dialog_info   s    			
c      	   C   s›   t  j d t  j t  j Bd t  j d t  j d |  ƒ } | d k r` | j | ƒ | j t  j	 ƒ n | j t  j
 ƒ | j t d ƒ ƒ | j ƒ  | j ƒ  d S(   s   The Warning dialogRL   RM   R    RN   t   WarningN(   R#   RP   RQ   RR   t   MESSAGE_WARNINGR[   R   R,   R.   R/   R0   RU   R%   R;   R=   (   RV   RB   RW   (    (    s   modules/support.pyt   dialog_warning«   s    			
c      	   C   s›   t  j d t  j t  j Bd t  j d t  j d |  ƒ } | d k r` | j | ƒ | j t  j	 ƒ n | j t  j
 ƒ | j t d ƒ ƒ | j ƒ  | j ƒ  d S(   s   The Error dialogRL   RM   R    RN   t   ErrorN(   R#   RP   RQ   RR   t   MESSAGE_ERRORR[   R   R,   R.   R/   R0   RU   R%   R;   R=   (   RV   RB   RW   (    (    s   modules/support.pyt   dialog_error¹   s    			
c            s|  t  j d t d ƒ d |  d t  j t  j Bd t  j t  j t  j t  j f ƒ ‰  ˆ  j	 t  j
 ƒ t  j d t d ƒ ƒ } t  j d t d ƒ ƒ } t  j d t d	 ƒ ƒ } | j | ƒ | j | ƒ ˆ  j ƒ  } | j | ƒ | j | ƒ | j | ƒ ‡  f d
 †  } ˆ  j d | ƒ | j ƒ  ˆ  j ƒ  } | j ƒ  r;d } n | j ƒ  rPd } n d } ˆ  j ƒ  | t  j k rxd } n  | S(   sL   Dialog to select between the Selected Node/Selected Node + Subnodes/All TreeR   s   Involved NodesRB   RL   R    t   labels   Selected Node Onlys   Selected Node and Subnodess   All the Treec            sH   t  j j | j ƒ d k rD ˆ  j ƒ  } | j ƒ  } | d j ƒ  n  d  S(   Nt   Returni    (   R#   t   gdkt   keyval_namet   keyvalt   get_action_areat   get_childrent   clicked(   t   widgett   eventt
   button_boxR    (   RW   (    s   modules/support.pyt   on_key_press_enter_dialogØ   s    t   key_press_eventi   i   i   i    (   R#   t   DialogR%   RQ   RR   R'   t   RESPONSE_REJECTt   STOCK_OKt   RESPONSE_ACCEPTR.   R/   t   RadioButtont	   set_groupt   get_content_areat
   pack_startt   connectt   show_allR;   t
   get_activeR=   (   t
   father_wint   radiobutton_selnodet   radiobutton_selnodeandsubt   radiobutton_alltreet   content_areaRn   t   responset   ret_val(    (   RW   s   modules/support.pyt$   dialog_selnode_selnodeandsub_alltreeÇ   s8    
 	 	
 	c         C   s  |  j  j d ƒ j ƒ  } x |  j D] } | j | ƒ q" Wt j ƒ  } | j ƒ  | j | ƒ | g |  _ x¡ |  j	 D]– } t
 | ƒ |  j k r“ qr n  t j |  j t
 | ƒ ƒ } | j t j d t j ƒ ƒ | j d t | |  ƒ | j ƒ  | j | ƒ |  j j | ƒ qr Wd S(   s   Set Bookmarks Menu Itemss   /MenuBar/BookmarksMenus
   Red Cherryt   activateN(   t   uit
   get_widgett   get_submenut   bookmarks_menu_itemst   removeR#   t   SeparatorMenuItemt   showR   t	   bookmarkst   longt   nodes_names_dictt   ImageMenuItemt	   set_imaget   image_new_from_stockt   ICON_SIZE_MENURx   t   select_bookmark_node(   t   instt   bookmarks_menut	   menu_itemt   node_id_str(    (    s   modules/support.pyt   set_bookmarks_menu_itemsç   s     
 
c         C   s±  t  j ƒ  |  _ t  j ƒ  |  _ x¢ d d g D]” } x‹ |  j D]€ } t  j | ƒ } | j t  j d t  j ƒ ƒ | j	 d t
 | |  ƒ | j ƒ  | d k r« |  j j | ƒ q; |  j j | ƒ q; Wq+ Wt  j t d ƒ ƒ } | j t  j d t  j ƒ ƒ | j t d ƒ ƒ | j |  j ƒ |  j j d ƒ j ƒ  j | d ƒ t  j d ƒ } | j t d	 ƒ ƒ | j t d ƒ ƒ | j |  j ƒ | j	 d
 |  j ƒ |  j j d ƒ j | d ƒ d S(   s3   Set Recent Documents menu items on Menu and Toolbari   i   s   gtk-openRƒ   s   _Recent Documentss!   Open a Recent CherryTree Documents   /MenuBar/FileMenui	   s   Open a CherryTree DocumentRj   s   /ToolBarN(   R#   t   Menut   recent_menu_1t   recent_menu_2t   recent_docsRŽ   R   R   R‘   Rx   t   open_recent_documentRŠ   R   R%   t   set_tooltip_textt   set_submenuR„   R…   R†   t   insertt   MenuToolButtont   set_arrow_tooltip_textt   set_menut	   file_open(   R“   t   targetR
   R•   t   recent_menuitemt   menu_toolbutton(    (    s   modules/support.pyt   set_menu_items_recent_documentsù   s,    
 "c         C   s·   | |  j  k r³ |  j  j | ƒ x‘ d d g D]€ } t j | ƒ } | j t j d t j ƒ ƒ | j d t | |  ƒ | j	 ƒ  | d k rœ |  j
 j | ƒ q, |  j j | ƒ q, Wn  d S(   s   Add a Recent Document if Neededi   i   s   gtk-openRƒ   N(   R›   R   R#   RŽ   R   R   R‘   Rx   Rœ   RŠ   R™   Rš   (   R“   R
   R¤   R•   (    (    s   modules/support.pyt   add_recent_document  s    
 c         C   sh   t  j j | ƒ r" | j | ƒ nB t t d ƒ | | j ƒ |  j ƒ  y | j j	 | ƒ Wn n Xd S(   s   A Recent Document was Requesteds   The Document %s was Not FoundN(
   R1   R2   t   isfilet   filepath_openRb   R%   t   windowt   hideR›   Rˆ   (   R•   R
   R   (    (    s   modules/support.pyRœ     s     
  c         C   s/   | j  t | ƒ ƒ } | r+ | j | ƒ n  d S(   s#   Select a Node in the Bookmarks ListN(   t   get_tree_iter_from_node_idRŒ   t   treeview_safe_set_cursor(   R•   R–   R   t	   node_iter(    (    s   modules/support.pyR’   (  s     c            s¶  t  j d t d  ƒ d ˆ j d t  j t  j Bd t  j t  j t  j t  j	 f ƒ } | j
 d d ƒ | j ˆ j ƒ | j t  j ƒ t  j t t t ƒ ‰ x4 ˆ j D]) } ˆ j d ˆ j t | ƒ | g ƒ qž Wt  j ˆ ƒ ‰ ˆ j t ƒ ˆ j t ƒ ˆ j t d ƒ ƒ ˆ j ƒ  ‰  ‡  f d	 †  } ‡ ‡ ‡ f d
 †  } ˆ j d | ƒ ˆ j d | ƒ t  j ƒ  } t  j ƒ  } t  j ƒ  } | j | t ƒ | j | t ƒ | j  | d d ƒ| j  | d d ƒˆ j! | ƒ t  j" ƒ  } | j# t  j$ t  j$ ƒ | j% ˆ ƒ | j& ƒ  }	 |	 j | ƒ |	 j' ƒ  | j( ƒ  }
 g  } ˆ j) ƒ  } x4 | d k rt| j ˆ | d ƒ ˆ j+ | ƒ } qAW| j, ƒ  |
 t  j	 k r’t S| ˆ _ t- ˆ ƒ ˆ j. j/ ƒ  t S(   s   Handle the Bookmarks ListR   RB   RL   R    iô  i  s
   Red Cherrys3   Sort with Drag and Drop, Delete with the Delete Keyc            sP   t  j j | j ƒ } | d k rL ˆ  j ƒ  \ } } | rL | j | ƒ qL n  d  S(   Nt   Delete(   R#   Re   Rf   Rg   t   get_selectedRˆ   (   Rk   Rl   t   keynamet   modelR   (   t   treeviewselection(    s   modules/support.pyt   on_key_press_liststore@  s
     c            s’   | j  d k r d S| j t j j k r, d Sˆ j t | j ƒ t | j ƒ ƒ } | sZ d S| d } ˆ  j	 t
 ˆ | d ƒ ƒ } ˆ  j | ƒ d S(   s   Catches mouse buttons clicksi   Ni    i   (   t   buttonRM   R#   Re   t   _2BUTTON_PRESSt   get_path_at_post   intt   xt   yR­   RŒ   R®   (   Rk   Rl   t
   path_n_tvct	   tree_patht   dad_tree_path(   R   t	   liststoret   treeview(    s   modules/support.pyt!   on_mouse_button_clicked_liststoreE  s      $ 
Ro   s   button-press-eventt   stock_idi    t   texti   i   N(0   R#   Rp   R%   R«   RQ   RR   R'   Rq   Rr   Rs   t   set_default_sizeR,   R.   R/   t	   ListStoret   strR‹   R   R   RŒ   t   TreeViewt   set_headers_visibleR   t   set_reorderableR   R   t   get_selectionRx   t   CellRendererPixbuft   CellRendererTextt   TreeViewColumnRw   t   set_attributest   append_columnt   ScrolledWindowt
   set_policyt   POLICY_AUTOMATICt   addRv   Ry   R;   t   get_iter_firstR   t	   iter_nextR=   R—   t   ctdb_handlert   pending_edit_db_bookmarks(   R   RW   R–   Rµ   RÁ   t   renderer_pixbuft   renderer_textt   columnt   scrolledwindowR   R€   t   temp_bookmarksR   (    (   R´   R   R¿   RÀ   s   modules/support.pyt   bookmarks_handle-  s^    	'	

 	
c         C   sB   |  j  r" |  j  j ƒ  d |  _  n  | r> | j ƒ  | |  _  n  d S(   s#   Set the Highlight to obj_highl onlyN(   t   highlighted_objt   drag_unhighlightR   t   drag_highlight(   R“   t	   obj_highl(    (    s   modules/support.pyt   set_object_highlightk  s    	
(   R#   R1   R   R   R   R   R   RE   RH   RK   RX   R\   R_   Rb   R‚   R—   R§   R¨   Rœ   R’   RÝ   Râ   (    (    (    s   modules/support.pyt   <module>   s&   					 							>