
,]c           @  s  d  Z  d d l m Z d d l Z d d l j Z d d l Z d d l m	 Z	 d d l
 m Z d d l m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z d d l m Z d d l m Z m Z m Z m Z m Z m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% d d	 l& m' Z' m( Z( m) Z) m* Z* m+ Z+ d d
 l, m- Z- m. Z. d d l/ m0 Z0 m1 Z1 m2 Z2 m3 Z3 m4 Z4 d d l5 m6 Z6 m7 Z7 d d l8 m9 Z: d d l8 m; Z; m< Z< m= Z= m> Z> d d l? m@ Z@ mA ZA mB ZB mC ZC d d lD mE ZE d d lF mG ZG d d lH mI ZI d d lJ mK ZK d d lL mM ZM d d lN mO ZO d d lN mP ZP d d lQ mR ZR mS ZS mT ZT mU ZU d d lV mW ZW d d lX mY ZY d d lZ m[ Z[ e( d k Z\ d e f d     YZ] d e f d     YZ^ d  e f d!     YZ_ d" e	 f d#     YZ` d$ e$ f d%     YZa d& e# f d'     YZb d( e! f d)     YZc d* e! f d+     YZd d, e f d-     YZe d. e! f d/     YZf d0   Zg eh d1 k reg   n  d S(2   s   Editor Widgeti(   t   print_functionN(   t   MutableSequence(   t   getsavefilename(
   t
   QByteArrayt	   QFileInfot   QObjectt   QPointt   QSizet   Qtt   QThreadt   QTimert   Signalt   Slot(   t   QFont(   t   QActiont   QApplicationt   QFileDialogt   QHBoxLayoutt   QMainWindowt   QMessageBoxt   QMenut	   QSplittert   QVBoxLayoutt   QWidgett   QListWidgett   QListWidgetItem(   t   _t   DEBUGt   STDERRt   STDOUTt   running_under_pytest(   t   config_shortcutt   get_shortcut(   t   get_edit_filetypest   get_edit_filterst
   get_filtert   is_kde_desktopt   is_anaconda(   t   qbytearray_to_strt   to_text_string(   t   icon_manager(   t   codeanalysist   encodingt
   sourcecodet   syntaxhighlighters(   t   add_actionst   create_actiont   create_toolbuttont   mimedata2url(   t   OutlineExplorerWidget(   t   FileSwitcher(   t   FindReplace(   t
   codeeditor(   t   TextEditBaseWidget(   t   Printer(   t   get_file_language(   t   CursorPositionStatust   EncodingStatust	   EOLStatust   ReadWriteStatus(   t   BaseTabs(   t   CONF(   t   show_in_external_file_exploreri   t   AnalysisThreadc           B  s    e  Z d  Z d   Z d   Z RS(   s   Analysis threadc         C  s5   t  t |   j |  | |  _ d  |  _ | |  _ d  S(   N(   t   superR?   t   __init__t   checkert   Nonet   resultst   source_code(   t   selft   parentRB   RE   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA   ;   s    		c         C  sV   y |  j  |  j  |  _ Wn6 t k
 rQ t rR d d l } | j d t  qR n Xd S(   s   Run analysisiNt   file(   RB   RE   RD   t	   Exceptiont   DEBUG_EDITORt	   tracebackt	   print_excR   (   RF   RK   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   runA   s    (   t   __name__t
   __module__t   __doc__RA   RM   (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR?   9   s   	t   ThreadManagerc           B  s>   e  Z d  Z d d  Z d   Z d   Z d   Z d   Z RS(   s   Analysis thread manageri   c         C  s>   t  t |   j |  | |  _ i  |  _ g  |  _ i  |  _ d  S(   N(   R@   RQ   RA   t   max_simultaneous_threadst   started_threadst   pending_threadst   end_callbacks(   RF   RG   RR   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA   M   s
    			c         C  s  t  r t d d t n  | d k ra g  |  _ g  } x t |  j j    D] } | | 7} qJ WnX t |  } g  |  j D]$ \ } } | | k rw | | f ^ qw |  _ |  j j	 | g   } xH | D]@ } t  r t d | d t n  x | j
   r t j   q Wq Wd S(   s%   Close threads associated to parent_ids   Call to 'close_threads'RH   s   Waiting for thread %r to finishN(   RJ   t   printR   RC   RT   t   listRS   t   valuest   idt   gett	   isRunningR   t   processEvents(   RF   RG   t
   threadlistt   threadst	   parent_idt   _tht   _idt   thread(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   close_threadsT   s"    	!c         C  s*   t  r t d d t n  |  j d  d S(   s   Close all threadss   Call to 'close_all_threads'RH   N(   RJ   RV   R   Rc   RC   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   close_all_threadsk   s    c         C  s{   t  |  } t |  | |  } | |  j t  |  <|  j j | | f  t rd t d | d t n  t j	 d |  j
  d S(   s   Add thread to queues   Added thread %r to queueRH   i2   N(   RY   R?   RU   RT   t   appendRJ   RV   R   R
   t
   singleShott   update_queue(   RF   RB   t   end_callbackRE   RG   R_   Rb   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt
   add_threadq   s    c         C  s  d } x t  |  j j    D] \ } } g  } x~ | D]v } | j   r |  j j t |   } | j d k	 r~ | | j  n  | j	 d  d } q5 | j
 |  | d 7} q5 Wd } | r | |  j | <q |  j j |  q Wt r't d d t t d | d t t d t |  j  d t n  |  j r| |  j k  r|  j j d  \ } } | j j |  j  |  j j | g   } | | g |  j | <t rt d | d t n  | j   n  d S(	   s   Update queuei    i   s   Updating queue:RH   s       started:s       pending:s   ===>starting:N(   RW   RS   t   itemst
   isFinishedRU   t   popRY   RD   RC   t	   setParentRe   RJ   RV   R   t   lenRT   RR   t   finishedt   connectRg   RZ   t   start(   RF   t   startedR_   R]   t   still_runningRb   Rh   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRg   {   s8    "	(   RN   RO   RP   RA   Rc   Rd   Ri   Rg   (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRQ   K   s   			
t   FileInfoc           B  s   e  Z d  Z e   Z e   Z e e e  Z e e e  Z	 e e e e  Z
 e e e e e 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 RS(   s   File propertiesc         C  s   t  j |   | |  _ | |  _ | |  _ t |  _ | |  _ | |  _ g  |  _	 | d  d  f |  _ g  |  _ g  |  _ t |  j   |  _ |  j j j |  j  |  j j j |  j  d  |  _ d  |  _ d  S(   N(   R   RA   t   threadmanagert   filenamet   newly_createdt   Falset   defaultR*   t   editort   pathRC   t   classest   analysis_resultst   todo_resultsR   t   lastModifiedt   lastmodifiedt   textChangedRp   t   text_changedt   breakpoints_changedt   pyflakes_resultst   pep8_results(   RF   Rv   R*   Rz   t   newRu   t   introspection_plugin(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA      s     										c         C  s/   t  |  _ |  j j |  j |  j j d   d S(   s   Editor's text has changedt   cursorN(   Rx   Ry   t   text_changed_att   emitRv   Rz   t   get_position(   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR      s    	c         C  s   t  |  j j    S(   s$   Return associated editor source code(   R'   Rz   t   toPlainText(   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_source_code   s    c         C  s  | o t  j   } | o* t  j d  d k	 } g  |  _ g  |  _ |  j j   r|  j j	 d d  j	 d d  } t j
 |  j   |  \ } } | r d |  _ n  | r d |  _ n  | r |  j j t  j |  j | |   n  | r|  j j t  j |  j | |   qn  d S(   s   Run code analysist   pycodestyles   -guessedt    s   -bomN(   R)   t   is_pyflakes_installedt   get_checker_executableRC   R   R   Rz   t	   is_pythonR*   t   replacet   encodeR   Ru   Ri   t   check_with_pyflakest   pyflakes_analysis_finishedt   check_with_pep8t   pep8_analysis_finished(   RF   t   run_pyflakest   run_pep8t   encRE   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   run_code_analysis   s(    		!c         C  s)   | |  _  |  j d k	 r% |  j   n  d S(   s*   Pyflakes code analysis thread has finishedN(   R   R   RC   t   code_analysis_finished(   RF   RD   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR      s    	c         C  s)   | |  _  |  j d k	 r% |  j   n  d S(   s&   Pep8 code analysis thread has finishedN(   R   R   RC   R   (   RF   RD   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR      s    	c         C  s(   |  j  |  j |  j  |  j j   d S(   s!   Code analysis thread has finishedN(   t   set_analysis_resultsR   R   t   analysis_results_changedR   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR      s    c         C  s   | |  _  |  j j |  d S(   s9   Set analysis results and update warning markers in editorN(   R}   Rz   t   process_code_analysis(   RF   RD   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR      s    	c         C  s   g  |  _  |  j j   d S(   s   Clean-up analysis resultsN(   R}   Rz   t   cleanup_code_analysis(   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   cleanup_analysis_results   s    	c         C  s;   |  j  j   r7 |  j j t j |  j |  j   |   n  d S(   s   Run TODO finderN(   Rz   R   Ru   Ri   R)   t
   find_taskst   todo_finishedR   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   run_todo_finder   s    c         C  s   |  j  |  |  j j   d S(   s!   Code analysis thread has finishedN(   t   set_todo_resultst   todo_results_changedR   (   RF   RD   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR      s    c         C  s   | |  _  |  j j |  d S(   s-   Set TODO results and update markers in editorN(   R~   Rz   t   process_todo(   RF   RD   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s    	c         C  s   g  |  _  d S(   s   Clean-up TODO finder resultsN(   R~   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   cleanup_todo_results
  s    c         C  sP   |  j  j   } |  j  j | k rL | |  j  _ |  j j |  j t |   n  d S(   s   Breakpoint list has changedN(   Rz   t   get_breakpointst   breakpointst   save_breakpointsR   Rv   t   repr(   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s    (   RN   RO   RP   R   R   R   t   strR   t   intR   t	   edit_gotot   boolt   send_to_helpRA   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRt      s*   															t   StackHistoryc           B  sh   e  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   Handles editor stack history.

    Works as a list of numbers corresponding to tab indexes.
    Internally elements are saved using objects id's.
    c         C  s%   t    |  _ t    |  _ | |  _ d  S(   N(   RW   t   historyt   id_listRz   (   RF   Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA     s    c         C  sG   g  t  |  j j j    D]! } t |  j j j |   ^ q |  _ d S(   s+   Update list of corresponpding ids and tabs.N(   t   rangeRz   t   tabst   countRY   t   widgetR   (   RF   t   _i(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   _update_id_list"  s    c         C  sE   |  j    x4 |  j D]( } | |  j k r |  j j |  q q Wd S(   s(   Remove editors that are not longer open.N(   R   R   R   t   remove(   RF   Ra   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   refresh'  s    
c         C  s   t  |  j  S(   N(   Rn   R   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __len__.  s    c         C  sM   |  j    y |  j j |  j |  SWn! t k
 rH |  j   t  n Xd  S(   N(   R   R   t   indexR   t
   ValueErrorR   t
   IndexError(   RF   t   i(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __getitem__1  s    

c         C  s   |  j  | =d  S(   N(   R   (   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __delitem__9  s    c         C  s,   t  |  j j j |   } | |  j | <d  S(   N(   RY   Rz   R   R   R   (   RF   R   t   vRa   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __setitem__<  s    c         C  s   t  t |    S(   N(   R   RW   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __str__@  s    c         C  s2   t  |  j j j |   } |  j j | |  d S(   s;   Insert the widget (at tab index) in the position i (index).N(   RY   Rz   R   R   R   t   insert(   RF   R   t	   tab_indexRa   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   C  s    c         C  sA   t  |  j j j |   } | |  j k r= |  j j |  n  d S(   s1   Remove the widget at the corresponding tab_index.N(   RY   Rz   R   R   R   R   (   RF   R   Ra   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   H  s    (   RN   RO   RP   RA   R   R   R   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s   									t   TabSwitcherWidgetc           B  sY   e  Z d  Z d   Z d   Z d	 d  Z d   Z d   Z d   Z	 d   Z
 d   Z RS(
   s/   Show tabs in mru order and change between them.c           s   t  j   |    j t j t j B |   _ |   _ |   _   j	 t  j
    j j   j  g    _   j   t j d d  }   j |     j     j d  t   f d   d d d d d	   t   f d
   d d d d d	   d  S(   Nt   mains   completion/sizei    c             s     j  d  S(   Ni(   t
   select_row(    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   <lambda>d  R   t   contextt   Editort   names   Go to previous fileRG   c             s     j  d  S(   Ni   (   R   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   f  R   s   Go to next file(   R   RA   t   setWindowFlagsR   t   FramelessWindowHintt   DialogRz   t   stack_historyR   t   setSelectionModet   SingleSelectiont   itemActivatedRp   t   item_selectedR   t	   load_dataR=   RZ   t   resizet   set_dialog_positiont   setCurrentRowR   (   RF   RG   R   R   t   size(    (   RF   s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA   R  s"    				

c         C  sg   x` t  |  j  D]O } |  j j |  } | j d d  } t t j d  |  } |  j |  q Wd S(   sf   Fill ListWidget with the tabs texts.

        Add elements in inverse order of stack_history.
        t   &R   t   TextFileIconN(	   t   reversedR   R   t   tabTextR   R   t   imat   icont   addItem(   RF   R   t   textt   item(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   i  s
    c         C  sy   | d k r |  j   } n  y |  j |  j   d } Wn t k
 rJ n! X|  j j |  |  j j |  |  j   d S(   s5   Change to the selected document and hide this widget.i   N(	   RC   t   currentItemR   t
   currentRowR   Rz   t   set_stack_indext   current_changedt   hide(   RF   R   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   t  s    c         C  s+   |  j    | |  j   } |  j |  d S(   sV   Move selected row a number of steps.

        Iterates in a cyclic behaviour.
        N(   R   R   R   (   RF   t   stepst   row(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s    c         C  sk   |  j  j   j   d |  j   d } |  j  j j   j   j   } |  j |  j  j t | |    d S(   s;   Positions the tab switcher in the top-center of the editor.i   N(	   Rz   t   geometryt   widthR   t   tabBart   heightt   movet   mapToGlobalR   (   RF   t   leftt   top(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s    'c         C  s   |  j    r t d d d d  } xu | j d  D]a } | j   } | d k rd | j   t j k s | d k r1 | j   t j k r1 |  j   q1 q1 Wn  | j	   d S(	   s   Reimplement Qt method.

        Handle "most recent used" tab behavior,
        When ctrl is released and tab_switcher is visible, tab will be changed.
        R   R   R   s   Go to next filet   +t   ctrlt   altN(
   t	   isVisibleR    t   splitt   lowert   keyR   t   Key_Controlt   Key_AltR   t   accept(   RF   t   eventt   qscR   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   keyReleaseEvent  s    !!c         C  sN   | j    t j k r% |  j d  n% | j    t j k rJ |  j d  n  d S(   s/   Reimplement Qt method to allow cyclic behavior.i   iN(   R   R   t   Key_DownR   t   Key_Up(   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   keyPressEvent  s    c         C  sL   | j    t j d k r> | j   t j k rH |  j   qH n
 |  j   d S(   s=   Reimplement Qt method to close the widget when loosing focus.t   darwinN(   t   ignoret   syst   platformt   reasonR   t   ActiveWindowFocusReasont   close(   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   focusOutEvent  s
    
N(   RN   RO   RP   RA   R   RC   R   R   R   R  R  R  (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   O  s   						t   EditorStackc           B  s"  e  Z e   Z e e  Z e e  Z e e e  Z	 e e  Z
 e e  Z e e  Z e e  Z e e e  Z e   Z e   Z e   Z e   Z e   Z e e e  Z e e e e  Z e e e e  Z e   Z e   Z e   Z e   Z e   Z e   Z e   Z e e e  Z e e e  Z e e e  Z  e e f d  Z! e e e e  Z" e   Z# e   Z$ e e f d  Z% e   Z& e   Z' e   Z( e   Z) d    Z* e+   d d   Z- d   Z. d   Z/ d   Z0 d   Z1 d   Z2 d   Z3 d   Z4 e+   d	    Z5 e+   d
    Z6 d   Z7 d d  Z8 d   Z9 d   Z: d   Z; d   Z< d   Z= d   Z> d   Z? d   Z@ d   ZA d   ZB d   ZC d   ZD d   ZE d   ZF d d  ZG d d  ZH d   ZI d d  ZJ d   ZK d    ZL d d!  ZM d"   ZN d#   ZO d$   ZP d%   ZQ d&   ZR d'   ZS d(   ZT d)   ZU d*   ZV d+   ZW d,   ZX d-   ZY d.   ZZ d/   Z[ d0   Z\ d d1  Z] d2   Z^ d3   Z_ d4   Z` d5   Za d6   Zb d7   Zc d8   Zd d9   Ze d:   Zf d;   Zg d<   Zh d=   Zi d>   Zj d?   Zk d@   Zl dA   Zm d dB  Zn dC   Zo dD   Zp dE   Zq d d dF  Zr d d dG  Zs dH   Zt dI   Zu dJ   Zv dK   Zw dL   Zx dM   Zy dN   Zz dO   Z{ dP   Z| dQ   Z} dR   Z~ dS   Z d dT  Z dU   Z e+ e e  dV    Z d e dW  Z dX   Z dY   Z dZ   Z d[   Z d\   Z d]   Z e d d^  Z d e d_  Z d`   Z da   Z d db  Z d dc  Z dd   Z de   Z d df  Z dg   Z dh   Z di   Z dj   Z dk   Z dl   Z e dm  Z dn   Z d e e do  Z dp   Z dq   Z dr   Z ds   Z d dt  Z d d d du  Z dv   Z dw   Z dx   Z e d dy  Z dz   Z d d d e d{  Z e e d|  Z e d}  Z d d~  Z d d  Z d d  Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z RS(   c      	     sm  t  j   |    j t j  t      _ d    _ d    _	 d    _
 d    _   j   t   } | j d d d d    j |  d    _ d    _ d    _ d    _ t      _   j | |  d    _ g    _ t   t d  d t j d  d   j } t   t d  d t j d  d   j } t   t d  d t j d	  d   f d
   } t   t d  d   j } t   t d  d   j  } t! j" d k rt d  }	 n t d  }	 t   |	 d   j# }
 | |
 d  | | | d  | | g   _$ d    _% d    _& d    _' t(   _) d    _* d    _+ d    _, d    _- d    _. t d    _/ t0   _1 t(   _2 t0   _3 t(   _4 t(   _5 t0   _6 t(   _7 t0   _8 d   _9 t0   _: t(   _; t(   _< t0   _= t0   _> t0   _? t0   _@ t0   _A t0   _B d   _C d   _D t(   _E d    _F t(   _G t(   _H t0   _I t(   _J t(   _K t0   _L d   _M t0   _N t(   _O t0   _P t0   _Q d } | tR jS k rtR jS d } n  |   _T d    _U t(   _V tW      _X   jX jY t0    jX jZ d    jX j[ j\   j]    j^ t0    j_     _` g    _a d    _b d    _c d    _d te     _f d  S(   Ni    s   File switcher...R   t   filelistt	   triggereds   Find symbols in file...t   symbol_finds   Copy path to clipboardt   editcopyc             s   t  j   j   j    S(   N(   R   t	   clipboardt   setTextt   get_current_filename(    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s    s   Close all to the rights   Close all but thisR  s   Show in Finders   Show in external file explorerR   iO   t    i   i  t   Spyderi  s       (g   R   RA   t   setAttributeR   t   WA_DeleteOnCloseRQ   Ru   RC   t   newwindow_actiont   horsplit_actiont   versplit_actiont   close_actiont   _EditorStack__get_split_actionsR   t   setContentsMarginst	   setLayoutt   menut   fileswitcher_dlgR   t   tabs_switcherR   R   t   setup_editorstackt   find_widgett   dataR.   R   R   R   t   open_fileswitcher_dlgt   open_symbolfinder_dlgt   close_all_rightt   close_all_but_thisR  R	  R>   t   menu_actionst   outlineexplorert   helpt   unregister_callbackRx   t   is_closablet
   new_actiont   open_actiont   save_actiont   revert_actiont   tempfile_patht   titlet   Truet   pyflakes_enabledt   pep8_enabledt   todolist_enabledt   realtime_analysis_enabledt   is_analysis_donet   linenumbers_enabledt   blanks_enabledt   edgeline_enabledt   edgeline_columnt   codecompletion_auto_enabledt   codecompletion_case_enabledt   codecompletion_enter_enabledt   calltips_enabledt   go_to_definition_enabledt   close_parentheses_enabledt   close_quotes_enabledt   add_colons_enabledt   auto_unindent_enabledt   indent_charst   tab_stop_width_spacest   help_enabledt   default_fontt   wrap_enabledt   tabmode_enabledt   intelligent_backspace_enabledt   highlight_current_line_enabledt   highlight_current_cell_enabledt   occurrence_highlighting_enabledt   occurrence_highlighting_timeoutt   checkeolchars_enabledt   always_remove_trailing_spacest   focus_to_editort   create_new_file_if_emptyR,   t   COLOR_SCHEME_NAMESt   color_schemet   introspectort   _EditorStack__file_status_flagR
   t   analysis_timert   setSingleShott   setIntervalt   timeoutRp   t   analyze_scriptt   setAcceptDropst   create_shortcutst	   shortcutst   last_closed_filest   msgboxt   edit_filetypest   edit_filtersR   t   save_dialog_on_tests(   RF   RG   t   actionst   layoutt   fileswitcher_actiont   symbolfinder_actiont   copy_to_cb_actiont   close_rightR*  R   t   external_fileexp_actiont   ccs(    (   RF   s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA     s    				
																																																									c         C  s)   | d k r |  j   } n  t |  d S(   s#   Show file in external file explorerN(   RC   R  R>   (   RF   t   fnames(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR>   b  s    c           sl  t    j d d d d d   } t    j d d d d d   } t    j d d d d d   } t    j d d d d d   } t    f d	   d d d d
 d   } t    j d d d d d   } t    f d   d d d d d   } t    f d   d d d d d   } t    j d d d d d   }	 t    f d   d d d d d   }
 t    f d   d d d d d   } t    j d d d d d   } t    j d d d d d   } t    f d   d d d d d   } t    j	 d d d d d   } t    f d   d d d d d   } t    f d   d d d d d   } t    f d   d d d d d   } t    f d    d d d d! d   } t    f d"   d d d d# d   } t    f d$   d d d d% d   } t    f d&   d d d d' d   } t    j
 d d d d( d   } t    j
 d d d d) d   } t    j d d d d* d   } t    j d d d d+ d   } t    j d d d d, d   } t    f d-   d d d d. d   } t    j d d d d/ d   } | | | | | | |	 |
 | | | | | | | | | | | | | | | | | | | | | g S(0   s   Create local shortcutsR   R   R   s   Inspect current objectRG   t
   Breakpoints   Conditional breakpoints
   Go to linec             s     j  d t  S(   Nt   forward(   t   tab_navigation_mruRx   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   x  R   s   Go to previous files   Go to next filec             s     j  j d  S(   Ni(   R   t   tab_navigate(    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   }  R   s   Cycle to previous filec             s     j  j d  S(   Ni   (   R   Ru  (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   Cycle to next files   Run selectionc             s     j  d j   S(   N(    (   t   sig_new_fileR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   New filec             s     j  d j   S(   N(    (   t   plugin_loadR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s	   Open files	   Save files   Save allc             s     j  j   S(   N(   t   sig_save_asR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   Save Ass	   Close allc             s     j  j   S(   N(   t   sig_prev_edit_posR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   Last edit locationc             s     j  j   S(   N(   t   sig_prev_cursorR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   Previous cursor positionc             s     j  j   S(   N(   t   sig_next_cursorR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   Next cursor positionc             s     j  j   S(   N(   t   zoom_inR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s	   zoom in 1c             s     j  j   S(   N(   R|  R   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s	   zoom in 2c             s     j  j   S(   N(   t   zoom_outR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   zoom outc             s     j  j   S(   N(   t
   zoom_resetR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s
   zoom resets   close file 1s   close file 2s   run cells   run cell and advances   go to next cellc             s     j  d t  S(   Nt   reverse(   t   advance_cellR6  (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   go to previous cells   re-run last cell(   R   t   inspect_current_objectt   set_or_clear_breakpointt"   set_or_edit_conditional_breakpointt
   go_to_lineRt  t   run_selectiont   savet   save_allt   close_all_filest
   close_filet   run_cellt   run_cell_and_advanceR  t   re_run_last_cell(   RF   t   inspectt   set_breakpointt   set_cond_breakpointt   gotolinet   tabt   tabshiftt   prevtabt   nexttabR  t   new_filet	   open_filet	   save_fileR  t   save_ast	   close_allt   prev_edit_post   prev_cursort   next_cursort	   zoom_in_1t	   zoom_in_2R}  R~  t   close_file_1t   close_file_2R  R  t   go_to_next_cellt   go_to_previous_cellR  (    (   RF   s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRb  i  s    																					c         C  s   g  |  j  D] } | j ^ q
 S(   s   
        Returns shortcut data, a list of tuples (shortcut, text, default)
        shortcut (QShortcut or QAction instance)
        text (string): action/shortcut description
        default (string): default key sequence
        (   Rc  R&  (   RF   t   sc(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_shortcut_data  s    c         C  s  t  |  d t j d  d t d  } t |   |  _ | j |  j  | j | j  |  j j	 j
 |  j  i | g t j 6} t |  d |  j d t d | |  _ |  j j   j d  |  j j |  j  |  j j   j j
 |  j  |  j j t  |  j j   t |  j d	  r:t j d
 k r:|  j j t  n  |  j j j
 |  j  t j d
 k rt    } | j d  t! |  } | j" d d d d  | j# |  j  | j# |  n | j# |  j  d S(   s   Setup editorstack's layoutR   t   tooloptionst   tipt   OptionsR!  t   menu_use_tooltipst   corner_widgetss
   plugin-tabt   setDocumentModeR  s   tab-containeri    N($   R/   R   R   R   R   R!  t   setMenut   setPopupModet   InstantPopupt   aboutToShowRp   t   _EditorStack__setup_menuR   t   TopRightCornerR<   R6  R   R   t   setObjectNamet   set_close_functionR  t   tabMovedt   move_editorstack_datat
   setMovableR   R   t   hasattrR  R	  R  t   currentChangedR   R   R   R  t	   addWidget(   RF   RG   Rj  t   menu_btnR  t   tab_containert
   tab_layout(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR$    s4    	c         C  s   |  j  j |  d  S(   N(   R   t   add_corner_widgets(   RF   t   widgets(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   add_corner_widgets_to_tabbar  s    c         C  sp   |  j  j   |  j j j |  j  |  j d  k	 r\ x' |  j D] } |  j j	 | j
  q< Wn  t j |  |  d  S(   N(   Ru   Rd   R\  R_  t
   disconnectR`  R,  RC   R&  t   remove_editorRz   R   t
   closeEvent(   RF   R   t   finfo(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c      
   C  sl   | j  } | j } | j } |  j | | d d | d | d | j } | j | j  | j | j  | j S(   NR   t   set_currentR   t   cloned_from(	   Rv   R*   Rw   t   create_new_editorRz   R   R}   R   R~   (   RF   t   other_finfoR  t   fnameR   R   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   clone_editor_from%  s    			c         C  s>   x$ | j  D] } |  j | d t q
 W|  j | j    d S(   s%   Clone EditorStack from other instanceR  N(   R&  R  R6  R   t   get_stack_index(   RF   t   otherR  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt
   clone_from0  s    c         C  s   |  j  j   s d S|  j d k	 rK |  j j rK |  j j   t |  j _ d St |  |  |  j  |  j t	 j
 d   |  _ |  j j j |  j  |  j j   t |  j _ d S(   s$   Open file list management dialog boxNR   (   R   R   R"  RC   t
   is_visibleR   Rx   R2   R&  R   R   t   sig_goto_fileRp   R   t   showR6  (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR'  6  s    c         C  s   |  j    |  j j d  d  S(   Nt   @(   R'  R"  t   set_search_text(   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR(  F  s    
c         C  s   |  S(   s,   Get the widget with the TabWidget attribute.(    (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_current_tab_managerK  s    c         C  sB   | d k	 r" |  j   j |  n |  j r> |  j   j   n  d S(   s   Go to line dialogN(   RC   t   get_current_editorR  R&  t   exec_gotolinedialog(   RF   t   line(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  O  s    	c         C  s&   |  j  r" |  j   } | j   n  d S(   s   Set/clear breakpointN(   R&  R  t   add_remove_breakpoint(   RF   Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  Y  s    	c         C  s,   |  j  r( |  j   } | j d t  n  d S(   s   Set conditional breakpointt   edit_conditionN(   R&  R  R  R6  (   RF   Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  _  s    	c         C  s|   |  j  rJ |  j   } | j d  } |  j j   |  j  j | d t n. |  j   j   } | rx |  j | d t	 n  d S(   s)   Inspect current object in the Help pluginR   t   autot   forceN(
   RZ  R  R   R-  t   switch_to_editor_sourcet   show_object_infoRx   t   get_current_objectR   R6  (   RF   Rz   t   positionR   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  e  s    	c         C  s   | |  _  d S(   s,   Parent widget must handle the closable stateN(   R/  (   RF   t   state(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_closabler  s    c         C  s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R0  R1  R2  R3  (   RF   R0  R1  R2  R3  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_io_actionsv  s    			c         C  s   | |  _  d  S(   N(   R%  (   RF   R%  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_find_widget}  s    c         C  s#   | |  _  |  j  j j |  j  d  S(   N(   R,  t   outlineexplorer_is_visibleRp   t   _refresh_outlineexplorer(   RF   R,  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_outlineexplorer  s    	c         C  sF   x? t  |  j    D]+ } | |  j   k r |  j d |  q q Wd S(   s   This method is called separately from 'set_oulineexplorer' to avoid
        doing unnecessary updates when there are multiple editor windowsR   N(   R   t   get_stack_countR  R  (   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   initialize_outlineexplorer  s    c         C  s6   t  |  } | j |  j j  |  j d | g  d  S(   Ni   (   R/   t   setDefaultActionR,  t   visibility_actionR  (   RF   t   editor_plugint   oe_btn(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   add_outlineexplorer_button  s    c         C  s   | |  _  d  S(   N(   R-  (   RF   t   help_plugin(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_help  s    c         C  s   | |  _  d  S(   N(   R4  (   RF   R{   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_tempfile_path  s    c         C  s   | |  _  d  S(   N(   R5  (   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt	   set_title  s    c         C  s#   | j  d |  j d |  j    d  S(   Nt   linenumberst   markers(   t   setup_marginsR<  t   has_markers(   RF   Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __update_editor_margins  s    c         C  s   |  j  r |  j |  j } } xh |  j  D]Z } |  j | j  | j   | sR | r& | d  k	 r& | | k	 r | j | |  q q& q& Wn  d  S(   N(   R&  R7  R8  t#   _EditorStack__update_editor_marginsRz   R   RC   R   (   RF   t   current_finfoR   R   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __codeanalysis_settings_changed  s    	
c         C  s   | |  _  |  j |  d  S(   N(   R7  t+   _EditorStack__codeanalysis_settings_changed(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_pyflakes_enabled  s    	c         C  s   | |  _  |  j |  d  S(   N(   R8  R  (   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_pep8_enabled  s    	c         C  s   |  j  p |  j p |  j S(   sV   Return True if this editorstack has a marker margin for TODOs or
        code analysis(   R9  R7  R8  (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  su   | |  _  |  j rq x\ |  j D]N } |  j | j  | j   | r | d  k	 r | | k	 rj | j   qj q q Wn  d  S(   N(   R9  R&  R  Rz   R   RC   R   (   RF   R  R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_todolist_enabled  s    		
c         C  s   | |  _  d  S(   N(   R:  (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_realtime_analysis_enabled  s    c         C  s   |  j  j |  d  S(   N(   R\  R^  (   RF   R_  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_realtime_analysis_timeout  s    c         C  s=   | |  _  |  j r9 x$ |  j D] } |  j | j  q Wn  d  S(   N(   R<  R&  R  Rz   (   RF   R  R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_linenumbers_enabled  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   R=  R&  Rz   t   set_blanks_enabled(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   R>  R&  Rz   t   set_edge_line_enabled(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_edgeline_enabled  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   R?  R&  Rz   t   set_edge_line_column(   RF   t   columnR  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_edgeline_column  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   R@  R&  Rz   t   set_codecompletion_auto(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_codecompletion_auto_enabled  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RA  R&  Rz   t   set_codecompletion_case(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_codecompletion_case_enabled  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RB  R&  Rz   t   set_codecompletion_enter(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt    set_codecompletion_enter_enabled  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RC  R&  Rz   t   set_calltips(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_calltips_enabled  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RD  R&  Rz   t   set_go_to_definition_enabled(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RE  R&  Rz   t   set_close_parentheses_enabled(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RF  R&  Rz   t   set_close_quotes_enabled(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RG  R&  Rz   t   set_add_colons_enabled(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RH  R&  Rz   t   set_auto_unindent_enabled(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    		c         C  sJ   | d d !} | |  _  |  j rF x$ |  j D] } | j j |  q) Wn  d  S(   Ni   i(   RI  R&  Rz   t   set_indent_chars(   RF   RI  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  !  s
    		c         C  sF   | |  _  |  j rB x- |  j D] } | | j _  | j j   q Wn  d  S(   N(   RJ  R&  Rz   t   update_tab_stop_width_spaces(   RF   RJ  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_tab_stop_width_spaces)  s
    		c         C  s   | |  _  d  S(   N(   RK  (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_help_enabled1  s    c         C  sX   | |  _  | d  k	 r! | |  _ n  |  j rT x' |  j D] } | j j | |  q4 Wn  d  S(   N(   RL  RC   RY  R&  Rz   t   set_font(   RF   t   fontRY  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_default_font4  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RY  R&  Rz   t   set_color_scheme(   RF   RY  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  <  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RM  R&  Rz   t   toggle_wrap_mode(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_wrap_enabledB  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RN  R&  Rz   t   set_tab_mode(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_tabmode_enabledI  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RO  R&  Rz   t   toggle_intelligent_backspace(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt!   set_intelligent_backspace_enabledP  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RR  R&  Rz   t   set_occurrence_highlighting(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt#   set_occurrence_highlighting_enabledW  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RS  R&  Rz   t   set_occurrence_timeout(   RF   R_  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt#   set_occurrence_highlighting_timeout^  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RP  R&  Rz   t   set_highlight_current_line(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt"   set_highlight_current_line_enablede  s    		c         C  s=   | |  _  |  j r9 x$ |  j D] } | j j |  q Wn  d  S(   N(   RQ  R&  Rz   t   set_highlight_current_cell(   RF   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt"   set_highlight_current_cell_enabledk  s    		c         C  s   | |  _  d  S(   N(   RT  (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_checkeolchars_enabledq  s    c         C  s   | |  _  d  S(   N(   RU  (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt!   set_always_remove_trailing_spacesu  s    c         C  s   | |  _  d  S(   N(   RV  (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_focus_to_editory  s    c         C  s   | |  _  d  S(   N(   RZ  (   RF   RZ  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_introspector|  s    c         C  s   |  j  j   S(   N(   R   t   currentIndex(   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s   |  j  r |  j  |  j   Sd  S(   N(   R&  R  (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_current_finfo  s    	c         C  s   |  j  j   S(   N(   R   t   currentWidget(   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s   |  j  j   S(   N(   R   R   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s/   | |  k s | d  k r+ |  j j |  n  d  S(   N(   RC   R   t   setCurrentIndex(   RF   R   t   instance(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s    c         C  s   |  j  j   j |  d  S(   N(   R   R   t
   setVisible(   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_tabbar_visible  s    c         C  sN   |  j  j t  |  j  j |  |  j j |  |  j  j t  |  j   d  S(   N(   R   t   blockSignalsR6  t	   removeTabR&  Rl   Rx   t   update_actions(   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   remove_from_data  s
    c         C  sB   | d  k	 r | r | d 7} n  | d  k	 r> | r> d | } n  | S(   Nt   *s   (%s)(   RC   (   RF   R5  t   is_modifiedt   is_readonly(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __modified_readonly_title  s
    c         C  sT   g  |  j  D] } | j ^ q
 } |  j  | j } t j | |  } |  j | | |  S(   s   Return tab title.(   R&  Rv   R+   t   disambiguate_fnamet%   _EditorStack__modified_readonly_title(   RF   R   R7  R8  R  t   files_path_listR  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_tab_text  s
    	c         C  s   d } |  j  | | |  } |  j d k	 re | t j |  j  k re t t d   } | | |  j f S| t j |  t j	 |  f Sd S(   s   Return tab menu titleu	   %s — %ss   Temporary fileN(
   R;  R4  RC   R*   t   to_unicode_from_fsR'   R   t   ospt   basenamet   dirname(   RF   Rv   R7  R8  R   t   temp_file_str(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_tab_tip  s    	c         C  s   |  j  j |  |  j  j |  } | j } |  j j | | |  j |   |  j | t  | r} |  j	 |  |  j
 |  n  |  j   d  S(   N(   R&  Re   R   Rz   R   t	   insertTabR=  t   set_stack_titleRx   R   R   R4  (   RF   R  R  R   Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   add_to_data  s    	c         C  s   |  j  j t  |  j  j   x |  j D] } | j r? t } n d  } |  j j |  } |  j | |  } |  j	 | j
  } |  j  j | j |  } |  j  j | |  q' W|  j  j t  d  S(   N(   R   R2  R6  t   clearR&  Rw   RC   R   R=  RC  Rv   t   addTabRz   t   setTabToolTipRx   (   RF   R  R7  R   t   tab_textt   tab_tip(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __repopulate_stack  s    		c   
      C  s!  |  j  |  } | d  k r d  S|  j | } t j | j  d t j |  d k r t | j j    } t	 | |  } | j j
 |  n  | |  j   k } |  j   } | | _ |  j j |  }	 |  j   | r |  j |	  n |  j |  |  j d  k	 r|  j j | j | j  n  |	 S(   Ni   (   t   has_filenameRC   R&  R?  t   splitextRv   R'   Rz   t   get_text_with_eolR7   t   set_languageR  R  R   t   _EditorStack__repopulate_stackR   t   set_current_filenameR,  t   file_renamed(
   RF   t   original_filenamet   new_filenameR   R  t   txtt   languaget   set_new_indext   current_fnamet	   new_index(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   rename_in_data  s&    )	
c         C  s   |  j  | } | j } | s% | j o, | j } | j j   } |  j | | |  } |  j | | |  } | |  j j	 |  k r |  j j
 | |  n  |  j j | |  d  S(   N(   R&  Rv   Rw   Ry   Rz   t
   isReadOnlyR=  RC  R   R   t
   setTabTextRI  (   RF   R   R7  R  R  R8  RJ  RK  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRE    s    	c         C  su   |  j  j   |  j r" |  j } n |  j |  j f } |  j   t |  j  t |  |  j	    |  j
 j |  j  d S(   s(   Setup tab context menu before showing itN(   R!  RG  R&  R+  R0  R1  t   setFocusR-   RW   R  R  t
   setEnabledR/  (   RF   Ri  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __setup_menu  s    	
 c      
     s  t    t d  d t j d  d t d  d   f d     _ t    t d  d t j d	  d t d
  d   f d     _ t    t d  d t j d  d t d  d   f d     _ t    t d  d t j d  d   j   _ d    j d    j   j   j g S(   Ns
   New windowR   t	   newwindowR  s   Create a new editor windowR  c             s     j  j   S(   N(   t   create_new_windowR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   	  R   s   Split verticallyt   versplits#   Split vertically this editor windowc             s     j  j   S(   N(   t   split_verticallyR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   Split horizontallyt   horsplits%   Split horizontally this editor windowc             s     j  j   S(   N(   t   split_horizontallyR   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   s   Close this panelt   close_panel(
   R.   R   R   R   R  R  R  R  R  RC   (   RF   (    (   RF   s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __get_split_actions  s    c         C  s$   |  j  j t  |  j j t  d  S(   N(   R  R_  R6  R  (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   reset_orientation  s    c         C  s6   |  j  j | t j k  |  j j | t j k  d  S(   N(   R  R_  R   t
   HorizontalR  t   Vertical(   RF   t   orientation(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_orientation  s    c         C  s6   |  j    d k } |  j j |  |  j j |  d  S(   Ni    (   R  R  R_  R  (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR4     s    c         C  s!   |  j  r |  j  |  j   j Sd  S(   N(   R&  R  Rv   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  &  s    	c         C  sL   d   } x< t  |  j  D]+ \ } } | |  | | j  k r | Sq Wd S(   s  Return the self.data index position for the filename.

        Args:
            filename: Name of the file to search for in self.data.

        Returns:
            The self.data index for the filename.  Returns None
            if the filename is not found in self.data.
        c         S  s   t  j t  j |    S(   N(   R?  t   normcaset   realpath(   R{   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   4  R   N(   t	   enumerateR&  Rv   RC   (   RF   Rv   t   fixpathR   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRM  *  s
    
	c         C  sJ   |  j  |  } | d k	 rF |  j |  |  j | j } | j   | Sd S(   s>   Set current filename and return the associated editor instanceN(   RM  RC   R   R&  Rz   R^  (   RF   Rv   R   Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRR  :  s    
c         C  s0   | d k r t |  j  d k S|  j |  Sd S(   s  Return if filename is in the editor stack.

        Args:
            filename: Name of the file to search for.  If filename is None,
                then checks if any file is open.

        Returns:
            True: If filename is None and a file is open.
            False: If filename is None and no files are open.
            None: If filename is not None and the file isn't found.
            integer: Index of file name in editor stack.
        i    N(   RC   Rn   R&  RM  (   RF   Rv   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   is_file_openedC  s    c         C  s,   g  |  j  D] } | j ^ q
 } | j |  S(   sn   
        Return the position index of a file in the tab bar of the editorstack
        from its name.
        (   R&  Rv   R   (   RF   Rv   t   dt	   filenames(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_index_from_filenameV  s    c         C  s   | d k  s | d k  r d St  | |  } | | | } |  j } |  j t  x? t | | |  D]+ } | | | | | | | <| | | <qc W|  j t  |  j   d S(   s\   Reorder editorstack.data so it is synchronized with the tab bar when
        tabs are moved.i    N(   t   absR&  R2  R6  R   Rx   R   (   RF   Rq   t   endR   t	   directionR&  R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  ^  s    	)c   
      C  s  |  j    } |  j   } | d k rP | d k r9 | } qP |  j j d  d Sn  d } | d k r | | k r} |  j   } q | } n  | p |  j d t d |  } | r|  j | } |  j	 j
 |  |  j d k	 r |  j j | j  n  |  j | j } |  j |  |  j j t t |    |  |  j j   |  j j   |  j   |  j j   |  j j   |  j   }	 |	 r|	 j   n  | d k	 r| | k  r| d 8} n  |  j |  n  |  j | j  n  |  j   d k r|  j r|  j d j   t S|  j    | S(   s   Close file (index=None -> close current file)
        Keep current file index unchanged (if current file
        that is being closed)i    Ni   t
   cancelableR   (    (!   R  R  RC   R%  t
   set_editort   _get_previous_file_indext   save_if_changedR6  R&  Ru   Rc   R,  R  Rz   Rv   R5  t   sig_close_fileR   R   RY   t   opened_files_list_changedt   update_code_analysis_actionsR  t   refresh_file_dependent_actionst   update_plugin_titleR  R^  R   t   add_last_closed_fileRW  Rv  Rx   t    _EditorStack__modify_stack_title(
   RF   R   R  t   current_indexR   RZ  t   is_okR  Rv   Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  s  sN    		

c         C  s   x |  j    r q Wd S(   s   Close all opened scriptsN(   R  (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  sK   |  j    } |  j   } x, t | | d  D] } |  j | d  q, Wd S(   s%    Close all files opened to the right i   N(   R  R  R   R  (   RF   t   numt   nR   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR)    s    c         C  s?   |  j    x. t d |  j   d  D] } |  j d  q$ Wd S(   s#   Close all files but the current onei    i   N(   R)  R   R  R  (   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR*    s    
 c         C  sa   | |  j  k r" |  j  j |  n  |  j  j d |  t |  j   d k r] |  j  j d  n  d S(   s   Add to last closed file list.i    i
   iN(   Rd  R   R   Rn   Rl   (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s
    c         C  s   |  j  S(   N(   Rd  (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_last_closed_files  s    c         C  s   | |  _  d  S(   N(   Rd  (   RF   Rq  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_last_closed_files  s    c   	      C  s  | d k r' t t |  j     } n	 | g } t j t j B} | rV | t j O} n  d } x7 | D]/ } |  j | j	 j
   j   rc | d 7} qc qc W| s t S| d k r | t j t j BO} n  t } x6| D].} |  j |  |  j | } | j |  j k s| r|  j |  st Sq | j	 j
   j   r |  j r t t j |  j t d  t j | j  | d |  |  _ |  j j   } | t j k r|  j |  st Sq| t j k r|  j |  st St } q| t j k rt S| t j k rt Sq q Wt S(   s  Ask user to save file if modified.

        Args:
            cancelable: Show Cancel button.
            index: File to check for modification.

        Returns:
            False when save() fails or is cancelled.
            True when save() is successful, there are no modifications,
                or user selects No or NoToAll.

        This function controls the message box prompt for saving
        changed files.  The actual save is performed in save() for
        each index processed.
        i    i   s<   <b>%s</b> has been modified.<br>Do you want to save changes?RG   N(   RC   RW   R   R  R   t   Yest   Not   CancelR&  Rz   t   documentt
   isModifiedR6  t   YesAllt   NoAllRx   R   Rv   R4  R  Rh  t   QuestionR5  R   R?  R@  Re  t   exec_(	   RF   Ry  R   t   indexest   buttonst
   unsaved_nbt   yes_allR  t   answer(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR|    sV    				c         C  s  | d k r+ |  j   s d S|  j   } n  |  j | } | j j   j   pS | j rb | rb t St	 j
 | j  r | r |  j d |  S|  j r |  j |  n  t | j j    } y t j | | j | j  | _ t | _ |  j j | j  t | j  j   | _ |  j j t t |    | j | j  | j j   j t  |  j d |  |  j |  |  j j    | j j!   |  j" |  t SWng t# k
 r} t$ t$ j% t& d  t& d  t	 j' | j  t |  f d |  |  _( |  j( j)   t SXd S(   s  Write text of editor to a file.

        Args:
            index: self.data index to save.  If None, defaults to
                currentIndex().
            force: Force save regardless of file state.

        Returns:
            True upon successful save or when file doesn't need to be saved.
            False if save failed.

        If the text isn't modified and it's not newly created, then the save
        is aborted.  If the file hasn't been saved before, then save_as()
        is invoked.  Otherwise, the file is written using the file name
        currently in self.data.  This function doesn't change the file name.
        NR   s
   Save Errors;   <b>Unable to save file '%s'</b><br><br>Error message:<br>%sRG   (*   RC   R  R  R&  Rz   R  R  Rw   R6  R?  t   isfileRv   R  RU  t   remove_trailing_spacesR'   RO  R*   t   writeRx   t   encoding_changedR   R   R   R   t
   file_savedR   RY   t   setModifiedt   modification_changedR`  RZ  t   validatet   rehighlightR  t   EnvironmentErrorR   t   CriticalR   R@  Re  R  (   RF   R   R  R  RV  t   error(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    sL    				c         C  s`   |  j  |  } | d k r d S|  j | } t | _ t |  | _ t | j  j   | _	 d S(   s  
        File was just saved in another editorstack, let's synchronize!
        This avoids file being automatically reloaded.

        The original filename is passed instead of an index in case the tabs
        on the editor stacks were moved and are now in a different order - see
        issue 5703.
        Filename is passed in case file was just saved as another name.
        N(
   RM  RC   R&  Rx   Rw   R'   Rv   R   R   R   (   RF   RT  Rv   R   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   file_saved_in_other_editorstack]  s    
	c      
   C  s   |  j  d k r t   |  _  n  |  j d k r< t   |  _ n  t   r^ t   r^ d } d } n( |  j } t |  j  t j	 |  d  } |  j
 j t  t |  t d  | d | d | d t j \ } } |  j
 j t  | r t j |  Sd S(   s  Select a name to save a file.

        Args:
            original_filename: Used in the dialog to display the current file
                    path and name.

        Returns:
            Normalized path for the selected file name or None if no name was
            selected.
        R   i   s	   Save filet   filterst   selectedfiltert   optionsN(   Rf  RC   R!   Rg  R"   R$   R%   R#   R?  RN  t   redirect_stdioR   Rx   R   R   R   t   HideNameFilterDetailsR6  t   normpath(   RF   RT  R  R  Rv   t
   _selfilter(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   select_savenameo  s(    			c         C  s  | d k r |  j   } n  |  j | } t | _ | j } |  j |  } | r|  j |  } | d k	 r | | k r |  j |  s d S| | k  r | d 8} q n  |  j	 | d | } |  j
 j t t |    | |  |  j d | d t  } |  j |  |  j |  | St Sd S(   s  Save file as...

        Args:
            index: self.data index for the file to save.

        Returns:
            False if no file name was selected or if save() was unsuccessful.
            True is save() was successful.

        Gets the new file name from select_savename().  If no name is chosen,
        then the save_as() aborts.  Otherwise, the current stack is checked
        to see if the selected name already exists and, if so, then the tab
        with that name is closed.

        The current stack (self.data) and current tabs are updated with the
        new name and other file info.  The text is written with the new
        name using save() and the name change is propagated to the other stacks
        via the file_renamed_in_data signal.
        Ni   RU  R   R  (   RC   R  R&  R6  Rw   Rv   R  RM  R  R[  t   file_renamed_in_dataR   R   RY   R  R   R   Rx   (   RF   R   R  RT  Rv   t   ao_indexRZ  t   ok(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s,    			
c         C  sX  | d k r |  j   } n  |  j | } | j } |  j |  } | rP|  j |  } | d k	 r | | k r |  j |  s d S| | k  r | d 8} q n  t | j j	    } y3 t
 j | | | j
  | _
 |  j j |  t SWqTt k
 rL} t t j t d  t d  t j | j  t |  f d |  |  _ |  j j   qTXn t Sd S(   s  Save copy of file as...

        Args:
            index: self.data index for the file to save.

        Returns:
            False if no file name was selected or if save() was unsuccessful.
            True is save() was successful.

        Gets the new file name from select_savename().  If no name is chosen,
        then the save_copy_as() aborts.  Otherwise, the current stack is
        checked to see if the selected name already exists and, if so, then the
        tab with that name is closed.

        Unlike save_as(), this calls write() directly instead of using save().
        The current file and tab aren't changed at all.  The copied file is
        opened in a new tab.
        Ni   s
   Save Errors;   <b>Unable to save file '%s'</b><br><br>Error message:<br>%sRG   (   RC   R  R&  Rv   R  RM  R  R'   Rz   RO  R*   R  Rw  R   R6  R  R   R  R   R?  R@  R   Re  R  Rx   (   RF   R   R  RT  Rv   R  RV  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   save_copy_as  s6    			c         C  sM   xF t  |  j    D]2 } |  j | j j   j   r |  j |  q q Wd S(   si   Save all opened files.

        Iterate through self.data and call save() on any modified files.
        N(   R   R  R&  Rz   R  R  R  (   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s3   t  |  _ |  j r/ |  j j   |  j j   n  d  S(   N(   Rx   R;  R:  R\  t   stopRq   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   start_stop_analysis_timer  s    		c         C  s   |  j  r d S| d k r( |  j   } n  |  j r |  j | } |  j |  j } } | s] | rp | j | |  n  |  j r | j   q n  t	 |  _  d S(   s1   Analyze current script with pyflakes + find todosN(
   R;  RC   R  R&  R7  R8  R   R9  R   R6  (   RF   R   R  R   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR`    s    			c         C  s7   |  j  |  } | d k r d S|  j | j |  d S(   s1   Synchronize analysis results between editorstacksN(   RM  RC   R&  R   (   RF   Rv   R}   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR      s    c         C  s!   |  j  r |  j  |  j   j Sd  S(   N(   R&  R  R}   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_analysis_results'  s    	c         C  s7   |  j  |  } | d k r d S|  j | j |  d S(   s-   Synchronize todo results between editorstacksN(   RM  RC   R&  R   (   RF   Rv   R~   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   +  s    c         C  s!   |  j  r |  j  |  j   j Sd  S(   N(   R&  R  R~   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_todo_results2  s    	c         C  sK  |  j    } | d k rA | j   t rN t d | d t qN n |  j j   |  j j   |  j j	   x# | |  j k r |  j j
 |  qk W|  j j |  t r t d | |  j | j d d d t t |  j | j j   d t n  |  j j   | d k	 rGy* |  j j |  j | j | j d   WqGt k
 rCqGXn  d S(	   s   Stack index has changedis   setfocusto:RH   s   current_changed:Rw  R  R   N(   R  R^  RJ   RV   R   t   reset_statusbarR   R~  R   R   R   Re   R&  Rz   t   get_document_idR  RC   t   current_file_changedRv   R   R   (   RF   R   Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   6  s*    
&#c         C  s(   y |  j  d SWn t k
 r# d SXd S(   s4   Return the penultimate element of the stack history.iN(   R   R   RC   (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR{  X  s    c         C  sU   t  |  |  j |  j  |  _ |  j j   |  j j | r= d n d  |  j j   d S(   s  
        Tab navigation with "most recently used" behaviour.

        It's fired when pressing 'go to previous file' or 'go to next file'
        shortcuts.

        forward:
            True: move to next file
            False: move to previous file
        i   iN(   R   R   R   R#  R  R   R^  (   RF   Rs  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRt  _  s
    c         C  sM   t  j   } x- |  j D]" } | | j k r |  j   q q W|  j j   d S(   s   Editor focus has changedN(   R   t   focusWidgetR&  Rz   R   t   editor_focus_changedR   (   RF   t   fwidgetR  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   focus_changedp  s
    c         C  s   |  j  } | d k r d S| d k r4 |  j   } n  t } |  j r |  j | } | j j   r t } | j t  | j	 | j | j
 d | d | q n  | s | j t  n  d S(   s   Refresh outline explorer panelNt   updateRG  (   R,  RC   R  Rx   R&  Rz   R   R6  R_  t   set_current_editorRv   (   RF   R   R  RG  t   oet   enableR  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  x  s    		c         C  sL   |  j  | } |  j j | j  | j j   \ } } |  j j | |  d S(   s   Refreshing statusbar widgetsN(   R&  R  R   R*   Rz   t   get_cursor_line_columnt"   sig_editor_cursor_position_changed(   RF   R   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __refresh_statusbar  s    c         C  sb   |  j  | } t | j  j   } t j | j  s> t } n  | j j |  |  j	 j
 |  d  S(   N(   R&  R   Rv   t
   isWritableR?  R  Rx   Rz   t   setReadOnlyt   readonly_changedR   (   RF   R   R  t	   read_only(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __refresh_readonly  s    	c         C  s  |  j  r d St |  _  |  j | } t j | j  } | j rA nwt j | j  s t t j	 |  j
 t d  | t j t j B|   |  _ |  j j   } | t j k r |  j |  qt | _ | j j   j t  |  j d |  n t | j  j   } t | j    t | j j    k r| j j   j   rt t j |  j
 t d  | t j t j B|   |  _ |  j j   } | t j k r|  j |  q| | _ q|  j |  n  t |  _  d S(   s   Check if file has been changed in any way outside Spyder:
        1. removed, moved or renamed outside Spyder
        2. modified outside SpyderNsx   <b>%s</b> is unavailable (this file may have been removed, moved or renamed outside Spyder).<br>Do you want to close it?R   sb   <b>%s</b> has been modified outside Spyder.<br>Do you want to reload it and lose all your changes?(   R[  R6  R&  R?  R@  Rv   Rw   R  R   t   WarningR5  R   R  R  Re  R  R  Rz   R  R  R  R   R   R'   t   toStringR   R  R  t   reloadRx   (   RF   R   R  R   R  t   lastm(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __check_file_status  sL    						c         C  sI   xB t  |  j  D]1 \ } } | j j   j   } |  j | |  q Wd  S(   N(   Rp  R&  Rz   R  R  RE  (   RF   R   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __modify_stack_title  s    c         C  s   | d k r |  j   } n  |  j   r |  j   } |  j | } | j } | j   |  j | d t |  j j	   |  j
 |  |  j |  |  j |  |  j   |  j j	   n d } |  j   |  j j | d t d S(   s   Refresh tabwidgetR  R   N(   RC   R  R  R&  Rz   R^  R  Rx   R  R   t   _EditorStack__refresh_statusbart   _EditorStack__refresh_readonlyt   _EditorStack__check_file_statusR  R  R  R%  Rz  (   RF   R   R  Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s"    	


c         C  s  | d k	 rH x9 t |  j  D]% \ } } t | j  | k r Pq q Wn  |  j j   | d k rp |  j   } n  | d k r d S|  j | } | d k r | j j   j	   p | j
 } n  |  j | |  |  j j |  |  j j   | j j   } |  j |  |  j j   d S(   s   
        Current editor's modification state has changed
        --> change tab title depending on new modification state
        --> enable/disable save/save all actions
        iN(   RC   Rp  R&  RY   Rz   R~  R   R  R  R  Rw   RE  R2  R_  t   refresh_save_all_actiont   get_line_separatort   refresh_eol_charsR   R   (   RF   R  R   t	   editor_idt   _finfoR  t	   eol_chars(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s$    !c         C  s#   t  j |  } |  j j |  d  S(   N(   R+   t   get_os_name_from_eol_charst   sig_refresh_eol_charsR   (   RF   R  t   os_name(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s   |  j  | } t j | j  \ } | _ t | j  j   | _ | j j d  } | j j	 |  | j j
   j t  | j j |  |  j j   | j j   |  j |  d S(   s   Reload file from diskR   N(   R&  R*   t   readRv   R   R   R   Rz   R   t   set_textR  R  Rx   t   set_cursor_positionRZ  R  R  R  (   RF   R   R  RV  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s   |  j    } |  j | } | j } | j j   j   r t t j |  j t	 d  t
 j |  t j t j B|   |  _ |  j j   } | t j k r d Sn  |  j |  d S(   s   Revert file from disksO   All changes to <b>%s</b> will be lost.<br>Do you want to revert file from disk?N(   R  R&  Rv   Rz   R  R  R   R  R5  R   R?  R@  R  R  Re  R  R  (   RF   R   R  Rv   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   revert/  s    		c   
   9     s  t  j      j }   j j | j    j j | j    j j | j  t | |   |  j	  j  }  j
 | |  | j j  j  | j j  f d    | j j  f d    | j j  f d    | j j  f d      j j  j    j j  j    j j  j    j j  j    j j  j j  t | |  }	   j d  j d  j d  j d  j d	 |	 d
  j   d  j d  j d  j d  j  d  j! d  j" d  j# d  j$ d  j% d  j& d  j' d  j( d  j) d  j* d  j+ d  j, d  j- d  j. d  j/ d  j0 d | d  |  | d( k r  j2 |    j3   j4 t5  n  | j6 j  f d!      j7 j  j8    j9 j  j:    j; j    f d"      j< j  j=    j> j  f d#      j? j  f d$      j@ j  f d%      jA j  f d&     jB jC     jD j    jE d'  jF jG |     jH   | S()   sw   
        Create a new editor instance
        Returns finfo object (instead of editor as in previous releases)
        c             s     j  j   S(   N(   R   R   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   T  R   c             s     j  j   S(   N(   R   R   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   V  R   c           s     j  j |  | |  S(   N(   R   R   (   R  t   linenoR   (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   W  s    c           s     j  j |  |  S(   N(   R   R   (   t   s1t   s2(   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   Y  s    R  t   show_blankst	   edge_linet   edge_line_columnRW  R  R  RY  t   wrapt   tab_modet   intelligent_backspacet   highlight_current_linet   highlight_current_cellt   occurrence_highlightingt   occurrence_timeoutt   codecompletion_autot   codecompletion_caset   codecompletion_entert   calltipst   go_to_definitiont   close_parenthesest   close_quotest
   add_colonst   auto_unindentRI  RJ  R  Rv   c           s     j  j |  |  S(   N(   R   R   (   R  R  (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s    c           s    j  |  d t    S(   NR  (   R  RY   (   R  (   Rz   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s   c             s     j  j   S(   N(   R|  R   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   c             s     j  j   S(   N(   R}  R   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   c             s     j  j   S(   N(   R~  R   (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   c           s     j  |   S(   N(   R  (   R  (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     R   R   N(I   R4   t
   CodeEditorRZ  t   get_completionsRp   t   sig_show_object_infoR  R  Rt   Ru   RF  R   R   R   R   R   R  R  R  R  Rv  R   R7   t   setup_editorR<  R=  R>  R?  R  RL  RY  RM  RN  RO  RP  RQ  RR  RS  R@  RA  RB  RC  RD  RE  RF  RG  RH  RI  RJ  RC   R  R  R  Rx   R   t   sig_cursor_position_changedt   editor_cursor_position_changedR   R  t   modificationChangedt   focus_inR  R|  R}  R~  t   sig_eol_chars_changedR%  Rz  R  R  R&  R   t   run_pygments_highlighter(
   RF   R  R   RV  R  R   R  RZ  R  RW  (    (   Rz   RF   s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  B  s    																										
	
c         C  s   |  j  j | |  d S(   s=   Cursor position of one of the editor in the stack has changedN(   R  R   (   RF   R  R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s  | r |  j  r d S|  j d k	 r| s< |  j j j   r| d k rg |  j j | d t d | n t |  } | j d  d } t |  } t |  }	 t |  }
 i | d 6| d 6| d 6|	 d	 6|
 d
 6} |  j j	 | d | |  j
   } | j   n  d S(   s>   qstr1: obj_text, qstr2: argpspec, qstr3: note, qstr4: doc_textNt   ignore_unknownt   force_refresht   .it   obj_textR   t   argspect   notet	   docstring(   RK  R-  RC   t
   dockwidgetR   t   set_object_textR6  R'   R   t   set_editor_docR  R^  (   RF   t   qstr1t   qstr2t   qstr3t   qstr4R  t   objtxtR   R  R  R  t   docRz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s"    
c         C  sy   |  j  | | | d t d t } | j j d  | sM | j j t j  n  | ru t | _ | j j	   j
 t  n  | S(   s@   
        Create new filename with *encoding* and *text*
        R  R   t   eof(   R  Rx   R6  Rz   R  t   insert_textt   ost   linesepRy   R  R  (   RF   Rv   R*   R   t   default_contentt   emptyR  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR     s    	c         C  s  t  j t |   } |  j j t d  |  t j |  \ } } |  j | | | |  } |  j	 j
 |  } |  j | d t |  j j d  |  j   r|  j rt j |  rt  j |  } t t j |  j t d  | t j |   |  _ |  j j   |  j |  n  t |  _ | S(   s"  
        Load filename, create an editor instance and return it
        *Warning* This is loading file, creating editor but not executing
        the source code analysis -- the analysis must be done by the editor
        plugin (in case multiple editorstack instances are handled)
        s   Loading %s...R  R   sW   <b>%s</b> contains mixed end-of-line characters.<br>Spyder will fix this automatically.(   R?  t   abspathR'   t   starting_long_processR   R   R*   R  R  R&  R   R  R6  t   ending_long_processR   RT  R+   t   has_mixed_eol_charsR@  R   R  R5  t   OkRe  R  t   set_os_eol_charsRx   R;  (   RF   Rv   R  R   R   R  R   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   load  s*    		c         C  sd   | d  k r |  j   } n  |  j | } t j t j  } | j j |  | j j	   j
 t  d  S(   N(   RC   R  R&  R+   t   get_eol_chars_from_os_nameR  R   Rz   t   set_eol_charsR  R  R6  (   RF   R   R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s9   | d k r |  j   } n  |  j | } | j j   d S(   s   Remove trailing spacesN(   RC   R  R&  Rz   R  (   RF   R   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s9   | d k r |  j   } n  |  j | } | j j   d S(   s    Replace tab characters by spacesN(   RC   R  R&  Rz   t   fix_indentation(   RF   R   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  s   |  j    j   } | r2 |  j j | |  j  d S|  j    } | j   } | j   } | ru |  j j | |  j  n  | j   r | r | j | j	    n  | j
 d d  d S(   s  
        Run selected text or current line in console. 

        If some text is selected, then execute that text in console.

        If no text is selected, then execute current line, unless current line
        is empty. Then, advance cursor to next line. If cursor is on last line
        and that line is not empty, then add a new blank line and move the
        cursor there. If cursor is on last line and that line is empty, then do
        not move cursor.
        NR  t   down(   R  t    get_selection_as_executable_codet   exec_in_extconsoleR   RV  t   get_current_linet   lstript   is_cursor_on_last_lineRe   R  t   move_cursor_to_next(   RF   R   Rz   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s    c         C  sP   |  j    j   } |  j   } | j j   rL | rL |  j j | |  j  n  d S(   s   Run current cellN(   R  t   get_cell_as_executable_codeR,  Rz   R   R   R   RV  (   RF   R   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  	  s    c         C  s   |  j    |  j   d S(   s,   Run current cell and advance to the next oneN(   R  R  (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  	  s    
c         C  sx   | s |  j    j } n |  j    j } |  j r: |   n: t j   } |   | j   t j   } |   | j   d S(   sS   Advance to the next cell.

        reverse = True --> go to previous cell.
        N(   R  R  R  RV  R   R  R^  (   RF   R  t	   move_funct   term(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  	  s    	

c         C  sP   |  j    j   } |  j   } | j j   rL | rL |  j j | |  j  n  d  S(   N(   R  t    get_last_cell_as_executable_codeR,  Rz   R   R   R   RV  (   RF   R   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  0	  s    c         C  s   | j    } | j   r | j   r t |  r t |  } g  | D] } t j |  ^ qC } t |  rw | j   q | j   n? | j	   r | j   n& t
 j d k r | j   n
 | j   d S(   sW   Reimplement Qt method
        Inform Qt about the types of data that the widget acceptst   ntN(   t   mimeDatat   hasUrlst   urlsR0   R*   t   is_text_filet   anyt   acceptProposedActionR  t   hasTextR  R   (   RF   R   t   sourcet   all_urlst   urlR   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   dragEnterEvent7	  s    $"c         C  s   | j    } | j   r t |  r t |  } g  | D] } t j |  r7 | ^ q7 } t | pd g   } xh | D] } |  j j |  qq WnG | j   r |  j	   } | d k	 r | j | j    q n
 | j   | j   d S(   s?   Reimplement Qt method
        Unpack dropped data and handle itN(   R*  R+  R0   R*   R-  t   setRw  R   R0  R  RC   R  R   R  R/  (   RF   R   R1  t   filest   fR  Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt	   dropEventR	  s    (
(    (    N(   RN   RO   R   R  R   R  R   R  R   R  R  R  R  R  R   R  R  R|  R}  R~  R}  R  R  Rb  R~  R   R   R  R  R  R   R   R  Rw  R   Rd  Rf  Rv  Rx  Ry  Rz  R{  RA   R   RC   R>   Rb  R  R$  R  R  R  R  R'  R(  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R   R  R  R  R	  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R   R"  R$  R&  R'  R(  R)  R*  R  R,  R  R  R   R1  R5  R;  R=  RC  RF  RQ  R[  RE  R  R  Ri  Rm  R4  R  RM  RR  Rr  Ru  R  Rx   R  R  R)  R*  R  R  R  R|  R  R  R  R  R  R  R  R`  R   R  R   R  R   R{  R6  Rt  R  R  R  R  R  R  R   R  R  R  R  R  R  R   R   R  R  R  R  R  R  R  R  R  R4  R8  (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR    s`  																					m			8					
														
																																																			=						AK		&84	
						"						?				U							t   EditorSplitterc           B  sh   e  Z e d	 d	 d   Z d   Z d   Z d   Z d   Z e	 j
 d  Z d   Z d   Z d   Z RS(
   c           sB  t  j   |    j t j    j t  d    _ d    _	 |   _
 | d  k rc   j
 j } n  |   _ | d  k r   j
 j } n  |   _ |   _ t   |    _   j   j  | s   j
 j d   j  n    j j j   f d      j j j   f d      j j j   f d      j   j  d  S(   Nt   editorstackc             s
     j    S(   N(   t   editorstack_closed(    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   	  R   c             s     j  d t j  S(   NRl  (   R   R   Rk  (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   	  R   c             s     j  d t j  S(   NRl  (   R   R   Rj  (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   	  R   (   R   RA   R  R   R  t   setChildrenCollapsibleRx   RC   t   toolbar_listt	   menu_listt   plugint   register_editorstackt   register_editorstack_cbt   unregister_editorstackt   unregister_editorstack_cbR+  R  R:  t   clone_editorstackt	   destroyedRp   Rd  Rf  R  (   RF   RG   R?  R+  t   firstRA  RC  (    (   RF   s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA   i	  s.    						c         C  s   t  j |  |  d  S(   N(   R   R  (   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  	  s    c         C  s,   |  j  j   } | d  k	 r( | j   n  d  S(   N(   R?  t   get_focus_widgetRC   R^  (   RF   t   focus_widget(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt    __give_focus_to_remaining_editor	  s    c         C  s   t  r, t d d t t d |  d t n  y/ |  j |  j  d  |  _ |  j   d k } Wn t k
 ro d  SX| r |  j   d  S|  j	   d  S(   Ns   method 'editorstack_closed':RH   s       self  :i   (
   RJ   RV   R   RC  R:  RC   R   t   RuntimeErrorR  t/   _EditorSplitter__give_focus_to_remaining_editor(   RF   t   close_splitter(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR;  	  s    	
c         C  s   t  r, t d d t t d |  d t n  y% |  j   d k oM |  j d  k } Wn t k
 re d  SX| rz |  j   d  S|  j   d k r |  j r |  j j   n  |  j	   d  S(   Ns   method 'editorsplitter_closed':RH   s       self  :i   i   (
   RJ   RV   R   R   R:  RC   RJ  R  Ri  RK  (   RF   RL  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   editorsplitter_closed	  s    %
c           s     j  |    j j |  t   j     j   j d   j d   j }   j	 |  | j
 j   f d    | j j   } | d  k	 r | j   n  d  S(   NRA  RC  c             s
     j    S(   N(   RM  (    (   RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   	  R   (   t   setOrientationR:  Rm  R9  RG   R?  R+  RA  RC  R  RE  Rp   R  RC   R^  (   RF   Rl  t   editorsplittert   current_editor(    (   RF   s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   	  s    		c         C  sV   |  j  d  |  j   f g } |  j   d k rR |  j  d  } | | j   7} n  | S(   Ni    i   (   R   Rl  R   t   iter_editorstacks(   RF   t   editorstacksRO  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRQ  	  s
    c         C  s   g  } x |  j    D] \ } } g  } d } t } t | d  rt g  | j D] } | j j   ^ qJ } | j   } n  | j | t j	 k | | f  q Wt
 d t |  j    d |  j   d |  S(   s   Return layout stateR   R&  t   hexstatet   sizest   splitsettings(   RQ  Rx   R  R&  Rz   t   get_cursor_line_numberR  Re   R   Rk  t   dictR&   t	   saveStateRT  (   RF   RU  R:  Rl  t   clinest   cfnameR  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_layout_settings	  s    "#c         C  s  | j  d  } | d k r d S|  } d } x t |  D] \ } \ } } } | d k r | j | rn t j n t j  | j d  } n  | j d  }	 xO t |	 j  D]> \ } }
 |
 j	 } y | j
 | |  Wq t k
 r q Xq W|	 j |  q8 W| j  d  } | d k	 rB|  j t   j t |  j d    n  | j  d  } | d k	 rm|  j |  n  | d k	 r| j   | j   n  d S(   s   Restore layout stateRU  Ni    i   RS  s   utf-8RT  (   RZ   RC   Rp  R   R   Rk  Rj  R   R&  Rz   R  R   RR  t   restoreStateR   t   fromHexR   R   t   setSizest
   clearFocusR^  (   RF   t   settingsRU  t   splitterRz   R   t   is_verticalRZ  RY  R:  R  RS  RT  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   set_layout_settings	  s6    "	
N(   RN   RO   Rx   RC   RA   R  RK  R;  RM  R   Rk  R   RQ  R[  Rc  (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR9  h	  s   						t   EditorWidgetc           B  s,   e  Z d    Z d   Z d   Z d   Z RS(   c           s  t  j  |   j t j  | j   } t  |   _ t  |   _	 t
  |   _ t  |   _ g   _    _ t  d t  _  j j  j   j j   t  d | d | d |  _  j j j    f d    t   } t   }	 |	 j d d d d  | j |	  t    | d  j d  j }
 |
  _  |	 j! |
  |	 j!  j  t    } | j d d d d  | j! |  | j!  j  | j" d d	  | j" d
 d
  |
 j# j$   d  S(   Nt   enable_replacet   show_fullpatht   show_all_filest   show_commentsc      	     s(     j  d |  d | d | d  j    S(   NRt  t   gotot   wordt   editorwindow(   R  RG   (   Rt  Ri  Rj  (   R?  RF   (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   
  s    i    RA  RC  i   i   (%   R   RA   R  R   R  t	   statusBarR;   t   readwrite_statusR:   t
   eol_statusR9   t   encoding_statusR8   t   cursorpos_statusRR  R?  R3   R6  R%  t   register_widget_shortcutsR   R1   R,  R   Rp   R   R   R  R   R9  R@  RB  RO  R  t   setStretchFactorR:  R  (   RF   RG   R?  R+  Rf  Rg  Rh  t	   statusbart   editor_widgetst   editor_layoutRO  Ra  (    (   R?  RF   s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA   	  sF    						c         C  sh  |  j  j |  t r6 t d | d t |  j   n  | |  j j |  j   <| j	 t
 |  j   d k  | 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  |  j j |  t |   } | j |  j j  | j  d | g  d  S(   Ns"   EditorWidget.register_editorstack:RH   i   i   (!   RR  Re   RJ   RV   R   t!   _EditorWidget__print_editorstacksR?  t   last_focus_editorstackRG   R  Rn   R  R,  R  R%  R  Rp   Rm  R   Ro  Rp  R  R  R  t   cursor_position_changedR  Rn  t   eol_changedR@  R/   R  R  R  (   RF   R:  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR@  +
  s,    			c         C  sH   t  d t |  j  d t x$ |  j D] } t  d | d t q' Wd  S(   Ns"   %d editorstack(s) in editorwidget:RH   s       (   RV   Rn   RR  R   (   RF   t   edst(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   __print_editorstacksC
  s    c         C  s_   t  r t d | d t n  |  j j |  |  j j |  j j |   t  r[ |  j   n  d  S(   Ns$   EditorWidget.unregister_editorstack:RH   (	   RJ   RV   R   R?  RB  RR  Rl   R   Rv  (   RF   R:  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRB  I
  s    (   RN   RO   RA   R@  Rv  RB  (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRd  	  s   	0		t   EditorMainWindowc           B  sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c      	   C  s  t  j |   |  j t j  d  |  _ t |  | | | | |  |  _ |  j	 |  j  |  j j
 j } | j   }	 |	 d  k	 r |	 j   n  |  j d | j    |  j | j    | rg  |  _ xS | D]H \ }
 } } |  j |
  } | j |  t | |  |  j j |  q Wn  | rt |  t d  d d d t d  d |  j } g  |  _ x{ t |  D]j \ } \ }
 } |  j   j |
  } | d k rt | | d  | g  n t | |  |  j j |  qcWn  d  S(	   Ns   Spyder - %ss   Close windowR   s   close_panel.pngR  s   Close this windowR  i    (   R   RA   R  R   R  RC   t   window_sizeRd  t   editorwidgett   setCentralWidgetRO  R:  R  R^  t   setWindowTitlet   windowTitlet   setWindowIcont
   windowIcont   toolbarst
   addToolBarR  R-   Re   R.   R   R  t   menusRp  t   menuBart   addMenu(   RF   R?  R+  R=  R>  Rf  Rg  Rh  R:  Rz   R5  t   object_nameRi  t   toolbart   quit_actionR   R!  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA   S
  s@    			c         C  s   |  j  S(   s   Get the toolbars.(   R  (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   get_toolbars~
  s    c         C  si   |  j  d } | |  j k re | re g  } x* |  j D] } | j   } | j |  q2 Wt | |  n  d S(   s   Add toolbars to a menu.i   N(   R  R  t   toggleViewActionRe   R-   (   RF   t
   menu_titleRi  t	   view_menuR  R  t   action(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   add_toolbars_to_menu
  s    c         C  s   t  j d d d g  } | r i  } xA |  j D]6 } | | | j   <| j   j t  | j t  q. WxH | D]= } | | k ro | | j   j t  | | j t  qo qo Wn  d S(   s3   Loads the last visible toolbars from the .ini file.R   t   last_visible_toolbarsRy   N(	   R=   RZ   R  t
   objectNameR  t
   setCheckedRx   R0  R6  (   RF   t   toolbars_namest   dicR  R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   load_toolbars
  s    c         C  s@   |  j    r, |  j   r, |  j   |  _ n  t j |  |  d S(   s   Reimplement Qt methodN(   t   isMaximizedt   isFullScreenR   R}  R   t   resizeEvent(   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  
  s    c         C  s   t  j |  |  d S(   s   Reimplement Qt methodN(   R   R  (   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  
  s    c         C  s   |  j  j j   } t d |  j j   |  j j   f d |  j   j   |  j   j	   f d |  j
   d |  j   d t |  j    d |  S(   s   Return layout stateR   t   post   is_maximizedt   is_fullscreenRS  RU  (   R~  RO  R[  RW  R}  R   R   R  t   xt   yR  R  R&   RX  (   RF   RU  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR[  
  s    $$c         C  s0  | j  d  } | d k	 r@ |  j t |    |  j   |  _ n  | j  d  } | d k	 rq |  j t |    n  | j  d  } | d k	 r |  j t	   j
 t |  j d    n  | j  d  r |  j t j  n  | j  d  r |  j t j  n  | j  d  } | d k	 r,|  j j j |  n  d S(	   s   Restore layout stateR   R  RS  s   utf-8R  R  RU  N(   RZ   RC   R   R   R   R}  R   R   R\  R   R]  R   R   t   setWindowStateR   t   WindowMaximizedt   WindowFullScreenR~  RO  Rc  (   RF   R`  R   R  RS  RU  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRc  
  s$    (
   RN   RO   RA   R  R  R  R  R  R[  Rc  (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR|  R
  s   	+						
t   EditorPluginExamplec           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 e e e  d    Z e e e e  d    Z e e e e  d    Z d   Z RS(   c         C  si  t  j |   g  } g  |  _ g  |  _ i  |  _ t |  d t |  _ t |  d t	 d t	 |  _
 |  j
 j j |  j  t |  |  | d t |  _ t |   } t   } | j d d d d  | j |  | j |  j  | j |  j  |  j d d d d  |  j |  |  j |  j
  |  j d d  |  j d d  | |  _ d  |  _ d  |  _ |  j g  g   d  S(   NRe  Rf  Rg  RF  i    i   i   (   R   RA   RR  t   editorwindowsRw  R3   R6  R%  R1   Rx   R,  R   Rp   t
   go_to_fileR9  t   editor_splitterR   R   R  R   R  Rr  R+  RC   R=  R>  t   setup_window(   RF   R+  Rt  Ru  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRA   
  s4    							c         C  sC   |  j  d } | j t |   | j   } | j | d | d  S(   Ni    Rj  (   RR  RR  R'   R  R  (   RF   R  R  R   R:  Rz   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  
  s    c         C  sz   x |  j  D] } | j   q Wt rl t t |  j   d |  j  d t t t |  j  d |  j d t n  | j   d  S(   Nt   :RH   (   R  R  RJ   RV   Rn   R   RR  R   (   RF   R   t   win(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  
  s    "%c         C  s2   t  j   |  j d } | j |  | j   d  S(   Ni    (   R   R\   RR  R  R`  (   RF   R  R:  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  
  s    
c         C  s]  t  r t d | d t n  |  j j |  |  j |  r | j t |  j  d k  | j |  j	  | j
 |  j  t |   } | j |  j	 j  | j d | g  n  t |   } | j | | | |  t d  } | j d  | j | d d | j j |  j  | j j |  j  | j j |  j  | j j |  j  | j j |  j  d  S(	   Ns    FakePlugin.register_editorstack:RH   i   i   s   Courier Newi
   RY  R  (   RJ   RV   R   RR  Re   t   isAncestorOfR  Rn   R  R,  R  R%  R/   R  R  R  R   R  R   t   setPointSizeR  R}  Rp   t   close_file_in_all_editorstacksR  t   file_saved_in_editorstackR  t#   file_renamed_in_data_in_editorstackRb  Rw  R  (   RF   R:  R  R  R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR@     s*    	
c         C  s<   t  r t d | d t n  |  j j |  j j |   d  S(   Ns"   FakePlugin.unregister_editorstack:RH   (   RJ   RV   R   RR  Rl   R   (   RF   R:  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRB    s    c         C  s   | j  |  j d  d  S(   Ni    (   R  RR  (   RF   R:  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRD    s    c         C  s   | |  _  | |  _ d  S(   N(   R=  R>  (   RF   R=  R>  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  "  s    	c           sz   t      j   j   j d t d t d t   j   j     j     j	    j
 j    f d    d  S(   NRf  Rg  Rh  c             s     j    S(   N(   t   unregister_editorwindow(    (   RF   t   window(    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR   .  R   (   R|  R+  R=  R>  Rx   R6  R   R   R  t   register_editorwindowRE  Rp   (   RF   (    (   RF   R  s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRb  &  s    	
c         C  s0   t  r t d | d t n  |  j j |  d  S(   Ns   register_editorwindowQObject*:RH   (   RJ   RV   R   R  Re   (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  0  s    c         C  s<   t  r t d | d t n  |  j j |  j j |   d  S(   Ns   unregister_editorwindow:RH   (   RJ   RV   R   R  Rl   R   (   RF   R  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  5  s    c         C  s   d  S(   N(    (   RF   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRG  :  s    c         C  so   xh |  j  D]] } t t |   | k r
 | j t  | j |  } | j | d t | j t  q
 q
 Wd  S(   NR  (   RR  R   RY   R2  R6  Ru  R  Rx   (   RF   t   editorstack_id_strRv   R:  R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  =  s    c         C  sC   x< |  j  D]1 } t t |   | k r
 | j | |  q
 q
 Wd S(   s5   A file was saved in editorstack, this notifies othersN(   RR  R   RY   R  (   RF   R  RT  Rv   R:  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  H  s    	c         C  sC   x< |  j  D]1 } t t |   | k r
 | j | |  q
 q
 Wd S(   s?   A file was renamed in data in editorstack, this notifies othersN(   RR  R   RY   R[  (   RF   R  RT  Rv   R:  (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  S  s    c         C  s   d S(   s   Fake!N(    (   RF   R   (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyRq  [  s    (   RN   RO   RA   R  R  R  R@  RB  RD  R  Rb  R  R  RG  R   R   R  R  R  Rq  (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  
  s    	$									
			c    
      C  sZ  d d l  m }  d d l m } d d l m } t j | d  d  } |  d d  } |   } t   } | j	 d	 d
  | j
   | j j } | j |  | j |  d d  l } | j   }	 | j t j | d   | j t j | d   | j t j | d d   | j t j | d d   t d | j   |	  t j | j    d  S(   Ni(   t   qapplication(   t   get_module_path(   t   IntrospectionManagert   spyderR  t	   test_timei   i  i  s	   editor.pys   explorer.pyt   variableexplorers   collectionseditor.pyR+   s   codeeditor.pys   Elapsed time: %.3f s(   t   spyder.utils.qthelpersR  t   spyder.config.baseR  t"   spyder.utils.introspection.managerR  R?  t   joinR  R   R  R  R:  R*  t   set_editor_widgett   timeR  RV   R  t   exitR  (
   R  R  R  t   cur_dirt   appRZ  t   testR:  R  t   t0(    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyR  `  s(    		
t   __main__(i   RP   t
   __future__R    R  t   os.pathR{   R?  R  t   collectionsR   t   qtpy.compatR   t   qtpy.QtCoreR   R   R   R   R   R   R	   R
   R   R   t
   qtpy.QtGuiR   t   qtpy.QtWidgetsR   R   R   R   R   R   R   R   R   R   R   R   R  R   R   R   R   R   t   spyder.config.guiR   R    t   spyder.config.utilsR!   R"   R#   R$   R%   t   spyder.py3compatR&   R'   t   spyder.utilsR(   R   R)   R*   R+   R,   R  R-   R.   R/   R0   t   spyder.widgets.editortoolsR1   t   spyder.widgets.fileswitcherR2   t   spyder.widgets.findreplaceR3   t   spyder.widgets.sourcecodeR4   t   spyder.widgets.sourcecode.baseR5   t$   spyder.widgets.sourcecode.codeeditorR6   R7   t   spyder.widgets.statusR8   R9   R:   R;   t   spyder.widgets.tabsR<   t   spyder.config.mainR=   t   spyder.widgets.explorerR>   RJ   R?   RQ   Rt   R   R   R  R9  Rd  R|  R  R  RN   (    (    (    s4   lib/python2.7/site-packages/spyder/widgets/editor.pyt   <module>   s`   FR(("""Sx9f       Xt	