
J3IHc        
   @   s0  d  d k  Z e i i   Z d e e d <e d e Z d   Z d  d k Z d e i f d     YZ	 d  d k
 Z
 d  d k Z d  d k Z d e	 f d	     YZ d  d k Z d  d k Z d
 e f d     YZ d   Z d f  d     YZ d e f d     YZ e d j o  d  d k Z e i i e  n d S(   iNs   This a demonstration of how to make a tab plugin for spe with wxGlade:
Just design a wxPanel and send it to %(author_email)s

This tab uses the FindReplaceEngine, copyrighted by Tim Hochberg.t   descriptiont   docc         C   s   |  S(   N(    (   t   x(    (    s   C:\py\_spe\tabs\Find.pyt   _   s    t   wxgPanelc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         O   s  t  i | d <t  i i |  | |  t  i |  d d t  i |  _ t  i |  d t d   |  _	 t  i |  d t d   |  _
 t  i |  d t d   |  _ t  i |  d d d d d	 d
 |  _ t  i |  d t d   |  _ t  i |  d d d t  i |  _ t  i |  d t d   |  _ t  i |  d t  i d t  i |  _ t  i |  d t  i d t  i |  _ t  i |  d d  |  _ t  i |  d t d   |  _ t  i |  d t d   |  _ t  i |  d t d   |  _ t  i |  d t d   |  _ t  i |  d t d   |  _ t  i |  d t d   |  _  t  i |  i d t d  d t  i! t  i" B|  _# |  i$   |  i%   |  i& t  i' |  i( |  i  d  S(   Nt   styleis   Find in filest   Cleart   Deptht   5t   mini    t   maxid   t   Whatt    t   Patht
   Extensionss   .py,.pyws
   Match caset	   Wildcardss   Whole wordss   Regular expressionssr  Tip: Leave the 'Path' field empty to search in all open files.

Besides from being usefull, this tab is an example how to extend spe with wxGlade. Just design a panel (or frame) and send it to spe.stani.be@gmail.com Than I'll integrate in the next spe release. For more information see in spe/tabs the files Find.wxg (open in wxGlade) and spe/tabs/Find.py (open in spe).()   t   wxt   TAB_TRAVERSALt   Panelt   __init__t   Notebookt	   NB_BOTTOMt   resultst   ButtonR   t   findt   cleart
   StaticTextt   label_1t   SpinCtrlt	   pathDeptht   patternLabelt   TextCtrlt   TE_PROCESS_ENTERt   patternt	   pathLabelt   BitmapButtont
   NullBitmapt	   NO_BORDERt   currentt   browset   patht   label_16t
   extensionst   CheckBoxt   caset	   wildcardst   wordt   regext   TE_MULTILINEt   TE_READONLYt   text_ctrl_1t   _wxgPanel__set_propertiest   _wxgPanel__do_layoutt   Bindt
   EVT_BUTTONt   onCurrentButton(   t   selft   argst   kwds(    (    s   C:\py\_spe\tabs\Find.pyR      s.    $!$$1

c         C   s4   |  i  i d  |  i i d  |  i i d  d  S(   Ni   ii   (   i   i(   i   i   (   i   i   (   R!   t
   SetMinSizeR&   R'   (   R8   (    (    s   C:\py\_spe\tabs\Find.pyt   __set_properties5   s    c         C   s  t  i t  i  } t  i t  i  } t  i t  i  } t  i d d d d  } t  i d d d d  } t  i t  i  } t  i t  i  } | i |  i d t  i d  | i |  i d t  i t  i	 Bd  | i |  i
 d t  i t  i Bt  i Bd  | i |  i d t  i t  i Bd  | i | d t  i d  | i |  i d t  i d  | i |  i d t  i t  i Bd  | i |  i d t  i d  | i |  i d t  i d  | i |  i d t  i d  | i | d t  i d  | i |  i d t  i d  | i |  i d t  i d  | i |  i d t  i t  i Bd  | i d  | i | d t  i d  | i |  i d d d  | i |  i d d d  | i |  i d d d  | i |  i d d d  | i | d t  i d  | i | d t  i t  i Bd  |  i i |  i  t! d   | i |  i d t  i t  i Bd  | i | d t  i d  |  i" t#  |  i$ |  | i% |   | i& |   d  S(   Ni   i   i    i   t   Results('   R   t   BoxSizert
   HORIZONTALt   VERTICALt   FlexGridSizert   AddR   t   ALIGN_CENTER_VERTICALR   t   FIXED_MINSIZER   t   LEFTt   ADJUST_MINSIZER   t   EXPANDR   R!   R"   R&   R'   R(   R)   R*   t   AddGrowableColR,   R-   R.   R/   t   TOPt   ALLR   t   AddPageR2   R   t   SetAutoLayoutt   Truet   SetSizert   Fitt   SetSizeHints(   R8   t   sizerHort   sizer_1t   sizerVerFormt   sizerFGoptionst   sizerFGfieldst   sizer_3t   sizer_2(    (    s   C:\py\_spe\tabs\Find.pyt   __do_layout<   sH    #*### #c         C   s   d GH| i    d  S(   Ns/   Event handler `onCurrentButton' not implemented(   t   Skip(   R8   t   event(    (    s   C:\py\_spe\tabs\Find.pyR7   d   s    (   t   __name__t
   __module__R   R3   R4   R7   (    (    (    s   C:\py\_spe\tabs\Find.pyR      s   			(R   c           B   sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s   

    wildcards?
    c         O   s   t  i |  d | d d | |  _ |  i i | i i d   |  i i | i i d   d |  _ g  |  _	 |  i
 t i i  |  i i t i |  i  |  i i t i |  i  |  i i t i |  i  |  i i t i |  i  d  S(   Nt   parentt   idis   fileopen.pngs   down.pngi    (   R   R   t   panelR'   t   SetBitmapLabelt   appt   bitmapR&   t   usedt   datat   SetHelpTextt   _spet   helpt   FINDR5   R   R6   t   onBrowseButtonR   t   onFindButtonR   t   onClearButtonR!   t   EVT_TEXT_ENTER(   R8   R_   R9   R:   (    (    s   C:\py\_spe\tabs\Find.pyR   u   s    			c         C   s,   |  i  i t i  i |  i i i i   d S(   s*   When current is clicked, use current path.N(   R(   t   SetValuet   ost   dirnameR_   Ra   t   childActivet   fileName(   R8   RZ   (    (    s   C:\py\_spe\tabs\Find.pyR7      s    c         C   s   |  i  i   } t i |  d | } | i   t i j oF | i   } | o | d d j o | | } n |  i  i |  n | i   d S(   s    When browse is clicked, show dir select dialog.
            If path ends in ';' we append the new path, otherwise we replace what
            is there.
        t   defaultPathit   ;N(	   R(   t   GetValueR   t	   DirDialogt	   ShowModalt   ID_OKt   GetPathRm   t   Destroy(   R8   RZ   R(   t   dlgt   dir(    (    s   C:\py\_spe\tabs\Find.pyRi      s    c         C   s!  |  i  i   } |  i i   } |  i i   i d  } |  i i   } |  i i   } |  i i   } |  i i   } |  i	 i
 d d  t d | d | d | d d d d	  }	 | o@ g  }
 xF | i d
  D]" } |
 t i i | | |  7}
 q Wn |  i	 i   }
 |	 i |
 |  | d | } d  S(   Nt   ,s   Collecting filenames ...i   R,   R.   R/   t   wrapt   reversei    Rs   R(   (   R!   Rt   R(   R*   t   splitR   R,   R.   R/   R_   t   SetStatusTextt   FindReplacet   smt   osxt   listdirRt   getFileNamest   findAllInFiles(   R8   RZ   R!   R(   R*   R   R,   R.   R/   t   enginet   namest   pR   (    (    s   C:\py\_spe\tabs\Find.pyRj      s     ' $c         C   s   |  i  i   d j o# |  i  i   } |  i  i |  nE |  i  i d  t i |  i  d d d t i } |  i  i | d  d  S(   Ni   i    iR   R   R=   (   R   t   GetPageCountt   GetSelectiont
   DeletePageR   R   R0   RK   (   R8   RZ   t   curpaget   txtctl(    (    s   C:\py\_spe\tabs\Find.pyRk      s    !c         C   s:   |  i  | i   \ } } } |  i i | | d |  d  S(   Ni   (   Rd   t   GetDataR_   t   openList(   R8   RZ   t   filet   linet   col(    (    s   C:\py\_spe\tabs\Find.pyt   onEntrySelect   s    c         C   si  t  i |  i d d t  i } | i d d  | i d d  | i d d  | i d d  | i d	 d
  | i d	 d  | i d d  | i d d  | i d d  | i d d  d } x| i   D] \ } } x | D] } | \ } }	 }
 |	 d 8}	 t i i	 |  \ } } | i
 | |  } | i | d t |   | i | d	 t |	   | i | d |
  | i | d |  | i | t |  i   |  i i | | |	 f  | d 7} q Wq W|  i p |  i i d  d |  _ n t  i | d |  i  |  i i d | | d d |  i i   |  i i d  |  i i d | | t |  f d  d  S(   NiR   i    t   Filei   i   t   Linei2   i   t   Coli   t   TextiX  i   R   i,  t   selects$   "%s" was found %s times in %s files.(   R   t   ListCtrlR   t	   LC_REPORTt   InsertColumnt   SetColumnWidtht   itemsRn   R(   R   t   InsertStringItemt   SetStringItemt   strt   SetItemDatat   lenRd   t   appendRc   R   t   EVT_LIST_ITEM_SELECTEDR   t
   InsertPaget   Refresht   SetSelectionR_   R   (   R8   R!   R   t   reportt   rowt   filenamet   entriest   entryR   R   t   textR(   t   baset   item(    (    s   C:\py\_spe\tabs\Find.pyt   add   sF      

(
   R[   R\   t   __doc__R   R7   Ri   Rj   Rk   R   R   (    (    (    s   C:\py\_spe\tabs\Find.pyR   o   s   					
	t	   FindErrorc           B   s   e  Z RS(    (   R[   R\   (    (    (    s   C:\py\_spe\tabs\Find.pyR      s   c         C   sc   |  d  j o d  Sn g  } y4 x- |  i   D] } | i | | | |  q+ WWn n Xt |  S(   N(   t   Nonet   spanR   t   tuple(   t   matcht   offsett   lengtht   selectionStartt   rt   i(    (    s   C:\py\_spe\tabs\Find.pyt   _fix   s     ! t   FindReplaceEnginec           B   s   e  Z d  d  d  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 d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   i    i   c         C   s   | |  _  | |  _ | o d |  _ n | o d |  _ n
 d |  _ | |  _ d |  _ | |  _ d |  _ d g |  _ d g |  _ d g |  _	 d g |  _
 d g |  _ h  |  _ |  i   d  S(   NR/   t   wildcardR   i    R   s   *.pys   .py(   R,   R.   t   modeR}   t   closeOnFoundR~   t	   selectiont   findHistoryt   replaceHistoryt   folderHistoryt   suffixHistoryt   suffixest   regionst   loadOptions(   R8   R,   R.   R/   R}   R   R~   (    (    s   C:\py\_spe\tabs\Find.pyR      s$    								c         C   s:   | o/ | | j o | i  |  n | i |  n d  S(   N(   t   removeR   (   R8   R!   t   history(    (    s   C:\py\_spe\tabs\Find.pyt   _addHistory  s    c         C   s   |  i  | |  i  d  S(   N(   R   R   (   R8   R!   (    (    s   C:\py\_spe\tabs\Find.pyt   addFind  s    c         C   s   |  i  | |  i  d  S(   N(   R   R   (   R8   R!   (    (    s   C:\py\_spe\tabs\Find.pyt
   addReplace  s    c         C   s   |  i  | |  i  d  S(   N(   R   R   (   R8   R!   (    (    s   C:\py\_spe\tabs\Find.pyt	   addFolder  s    c         C   s   |  i  | |  i  d  S(   N(   R   R   (   R8   R!   (    (    s   C:\py\_spe\tabs\Find.pyt	   addSuffix"  s    c         C   s   | |  i  | <d  S(   N(   R   (   R8   t   viewt   region(    (    s   C:\py\_spe\tabs\Find.pyt	   setRegion%  s    c         C   sJ   |  i  i | | i    } | d | d j o d | i   f } n | S(   Ni    i   (   R   t   getR   t   GetTextLength(   R8   R   R   (    (    s   C:\py\_spe\tabs\Find.pyt	   getRegion(  s    c         C   sQ  |  i  |  } |  i |  | i   |  i } |  i o, |  i t | i |  | | | d  } n |  i | i   | | d  } | d  j o t
 d |   n | i i i | i    | d | i   j  o |  i o
 |  i p+ | d | i   j o4 |  i o* |  i o  | i i i d d d d n | i | d | d  d  S(   Ni    s   '%s' not founds   Search wrappedt   Warningt   ringBelli   (   R   R   R   R~   R   t   _findt   applyt   GetTextRanget   GetTextR   R   t   modelt   editort   addBrowseMarkert   GetCurrentLinet   GetCurrentPosR}   t	   setStatusR   (   R8   R   R!   R   t   startt   result(    (    s   C:\py\_spe\tabs\Find.pyt   findInSource.  s    
,,+ c         C   s   |  i  | |  i d  d  S(   Ni(   R   R   (   R8   R   (    (    s   C:\py\_spe\tabs\Find.pyt   findNextInSource@  s    c         C   s   g  } x |  i  | | | |  D] \ } } | |  } t i | d  } t t i | d  d  d }	 | |	 }
 t i | |	 d d  d } | i | d |
 d | f  q W| S(   Ns   
i    i   (   t   _findAllt   stringt   countR
   t   rfindR   R   (   R8   R   R!   R   t   viewResultst   st   et   tt   lineNot   leftt   indexR   (    (    s   C:\py\_spe\tabs\Find.pyt   _findAllInSourceC  s     

"c         C   s  |  i  |  } |  i |  |  i o) |  i t | i |  | | d  } n |  i | i   | d  } d | } | i i i	 |  p | i i
 i | t  } n | i i | } | | _ h  | | i i <| _ | | _ | i   | i   |  i | _ | | f | _ d  S(   Ni    s	   Results: (   R   R   R   R   R   R   R   R   t   viewst   has_keyR   t
   addNewViewt   FindResultst   tabNameR   R   t   findPatternt   refresht   focust   findAllInSourcet   rerunCallbackt   rerunParams(   R8   R   R!   R   R   t   namet
   resultView(    (    s   C:\py\_spe\tabs\Find.pyR   N  s     
)
		

c   
      C   s  |  i  |  } |  i |  |  i |  | i   } | i   } | d | d j o
 d } n |  i | | d d  d  j	 o | |  i } |  i o, |  i t	 | i
 |  | | | d  } n |  i | i   | | d  } | d  j o t d |   n | i | d | d  |  i |  }	 |  i d j o |	 i | | i    } n | i |  n y |  i | |  Wn t j
 o n Xd  S(   Ni    i   R   s   '%s' not foundR/   (   R   R   R   R   t   GetSelectedTextR   R   R~   R   R   R   R   R   R   t   _compileR   t   subt   ReplaceSelectionR   (
   R8   R   R!   t   newR   t   selRanget   selTextR   R   t   compiled(    (    s   C:\py\_spe\tabs\Find.pyt   replaceInSourcec  s.    

,c         C   sr  |  i  |  } |  i |  |  i |  | i   } d |  i |  _ } |  i o0 |  i t | i |  | | d | d  } n |  i | i   | d d  } | |  _ |  i	 |  } | g  j o d  Sn | i
 i i | i    xe | D]] }	 | i |	 d |	 d  | }
 |  i d j o | i | | i    }
 n | i |
  q W| i
 i i i d t |   d  S(   Ni   i    R/   s   %s items replaced(   R   R   R   R   R~   R   R   R   R   R  R   R   R   R   R   R   R  R   R  t	   statusBart   setHintR   (   R8   R   R!   R  R   R   t
   oldReverseR   R  R   t   n(    (    s   C:\py\_spe\tabs\Find.pyt   replaceAllInSource  s*    
0	 c         C   s   g  } t  i i | i i    g } x | D] } x t | d  t  i |   D] } t  i i |  o1 t  i i |  d |  i	 j o | i
 |  qP t  i i |  o3 t  i i t  i i | d   o | i
 |  qP qP Wq+ W| i d    | S(   Nc         S   s   t  i i | |   S(    (   Rn   R(   t   join(   R  R   (    (    s   C:\py\_spe\tabs\Find.pyt   <lambda>  s    i   s   __init__.pyc         S   s"   t  i i |   t  i i |  j S(    (   Rn   R(   t   basename(   R   t   y(    (    s   C:\py\_spe\tabs\Find.pyR    s    (   Rn   R(   Ro   R   t   assertLocalFilet   mapt   listdirt   isfilet   splitextR   R   t   isdirR  t   sort(   R8   R   R   t   packagesR   R   (    (    s   C:\py\_spe\tabs\Find.pyt   findNamesInPackage  s      35c      	   C   s3  |  i  |  h  } t i d | d t |  | t i t i Bt i B } z x t t |   D] } |  i | |  } | p q_ n |  i	 t
 |  i   | d  | | | <| i | d |  p( y | i i i i d  Wq q Xq_ q_ W|  i | _ | | | f | _ | i | |  Wd  | i   Xd  S(   Ns   Finding '%s' in filess   Searching...i    s   Searching in file '%s's   Search aborted(   R   R   t   ProgressDialogR   t   PD_CAN_ABORTt   PD_APP_MODALt   PD_AUTO_HIDEt   ranget   _getValidFilenameR   t   opent   readt   UpdateR   R   R	  R
  R   R   R   t   addFindResultsRy   (   R8   R   R   R!   R   Rz   R   R   (    (    s   C:\py\_spe\tabs\Find.pyR     s.    	  )c         C   s    |  i  |  i |  | |  d  S(   N(   R   R  (   R8   R   R!   (    (    s   C:\py\_spe\tabs\Find.pyt   findAllInPackage  s    c         C   sB   t  | i i | i i i    } | i   |  i | | |  d  S(   N(   R  R   t   moduleFilenamet   modulest   keysR  R   (   R8   R   R!   R   (    (    s   C:\py\_spe\tabs\Find.pyt   findAllInApp  s    !
c         C   s   t  i d g |  i } |  i d j p t  i |  } n |  i d j o( | i d d  } | i d d  } n |  i o d | } n t  i | |  S(	   Ni    R/   R   s   \?s   .?s   \*s   .*s   \b%s\b(   t   ret
   IGNORECASER,   R   t   escapet   replaceR.   t   compile(   R8   R!   t   flags(    (    s   C:\py\_spe\tabs\Find.pyR    s    
c         C   sc   | |  | | } } |  i  o | } | | } n' |  i p | } | } n d } | } | | f S(   Ni    (   R}   R~   (   R8   R   R   t   beforet   afterR   t   domain(    (    s   C:\py\_spe\tabs\Find.pyt   _processText  s    


c   
      C   s   | | } |  i  |  } |  i | |  \ } } g  } d } xh | i | |  }	 |	 d  j p |	 i   d j o Pn |	 i   } | i t |	 | t |  |   q@ |  i o | i   n | S(   Ni    (	   R  R3  t   searchR   t   endR   R   R   R~   (
   R8   R   R!   R   R   R  R2  R   t   matchesR   (    (    s   C:\py\_spe\tabs\Find.pyR     s    
 %
c         C   s   |  i  o% |  i | | | |  d  g d Sn | | } |  i |  } |  i | |  \ } } t | i |  | t |  |  S(   Ni    (   R~   R   R   R  R3  R   R4  R   (   R8   R   R!   R   R   R  R2  R   (    (    s   C:\py\_spe\tabs\Find.pyR     s    
%
c         C   s   d  S(   N(    (   R8   (    (    s   C:\py\_spe\tabs\Find.pyR     s    c         C   s   d  S(   N(    (   R8   (    (    s   C:\py\_spe\tabs\Find.pyt   saveOptions  s    c         C   sr   t  i | d  } t |  d j oI | d d j p t |  d j o t i d |  d Sn | d Sn | S(   Ns   ://i   i    R   i   s)   %s not searched, only local files allowedR   (   R   R   R   R   t
   LogWarning(   R8   R   t	   protsplit(    (    s   C:\py\_spe\tabs\Find.pyR     s    $(   R[   R\   R   R   R   R   R   R   R   R   R   R   R   R   R  R  R  R   R%  R)  R  R3  R   R   R   R7  R   (    (    (    s   C:\py\_spe\tabs\Find.pyR      s2   																						
	R   c           B   s&   e  Z d  d  Z d   Z d   Z RS(   R   c   	   
   C   sY  |  i  |  h  } t i d | t i i |  f d t |  | t i t i Bt i	 B } z x t
 t |   D] } |  i | |  } | o t i i |  p qq n |  i t |  i   | d  | | | <| i | d |  p% y | i i d d  WqqXqq qq W|  i | _ | | | f | _ | i | |  | SWd  | i   Xd  S(   Ns   Finding '%s' in %ss   Searching...i    s   Searching in file '%s's   Search abortedi   (   R   R   R  Rn   R(   R  R   R  R  R  R  R   t   existsR   R!  R"  R#  R_   R   R   R   R   R   Ry   (	   R8   R   R   R!   R(   R   Rz   R   R   (    (    s   C:\py\_spe\tabs\Find.pyR     s0    	  )c         C   s   d  S(   N(    (   R8   (    (    s   C:\py\_spe\tabs\Find.pyR   9  s    c         C   s   d  S(   N(    (   R8   (    (    s   C:\py\_spe\tabs\Find.pyR7  <  s    (   R[   R\   R   R   R7  (    (    (    s   C:\py\_spe\tabs\Find.pyR     s   	t   __main__(   t	   _spe.infoRf   t   infot   copyt   INFOR   R   R   R   R   Rn   t   sm.osxR   t	   _spe.helpR*  R   t
   ValueErrorR   R   R   R   R[   t   sm.wxpt   wxpt   panelApp(    (    (    s   C:\py\_spe\tabs\Find.pys   <module>   s$   	U	
 %