
    JeO'                     "   d Z ddlmZ ddlZddlZddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlm Z  dZ! G d d      Z" G d d      Z# G d de      Z$d Z%e&dk(  r e%        yy)zHistory Widget.    N)SignalSlot)QVBoxLayoutQWidget)on_conf_change_)PluginMainWidget)is_text_stringto_text_string)encoding)normalize_eols)FindReplace)SimpleCodeEditor)Tabs)PANES_TABBAR_STYLESHEETi  c                       e Zd ZdZdZdZy)HistoryWidgetActionsmaximum_history_entries_actiontoggle_wrap_actiontoggle_line_numbers_actionN)__name__
__module____qualname__MaximumHistoryEntries
ToggleWrapToggleLineNumbers     @/usr/lib/python3/dist-packages/spyder/plugins/history/widgets.pyr   r   $   s    < &J4r   r   c                       e Zd ZdZy) HistoryWidgetOptionsMenuSectionsmain_sectionN)r   r   r   Mainr   r   r    r"   r"   -   s    Dr   r"   c                        e Zd ZdZ e       Z	  fdZd Zd Zd Z	d Z
 ed      d	        Z ed
      d        Z edddg      d        Zd Zd Zd Zd Z eee      d        Zd Zed        Z xZS )HistoryWidgetz%
    History plugin main widget.
    c                    t         |   |||       g | _        g | _        d | _        d | _        d | _        d | _        g | _        d | _        t        |       | _        t        |       | _        | j                  j                  | j                         | j                  j                          t               }|j!                  d       t"        j$                  dk(  rht'        |       }|j)                  d       t        |      }|j+                  dddd       |j-                  | j                         |j-                  |       n|j-                  | j                         |j-                  | j                         | j/                  |       | j                  j0                  j3                  | j4                         | j                  j6                  j3                  | j8                         y )Nr   darwinztab-container)super__init__editors	filenames	tabwidget
dockviewerwrap_actionlinenumbers_actionfontr   r   find_widgetsetStyleSheet_tabs_stylesheethider   
setSpacingsysplatformr   setObjectNamesetContentsMargins	addWidget	setLayoutcurrentChangedconnectrefresh	move_datamove_tab)selfnamepluginparentlayouttab_container
tab_layout	__class__s          r    r*   zHistoryWidget.__init__?   s|   vv. "&	 d&t, 	$$T%:%:; ! <<8##DMM''8$]3J))!Q15  0]+T^^,))*v 	%%--dll;  ((7r   c                     t        d      S )NHistoryr   rB   s    r    	get_titlezHistoryWidget.get_titlel   s    |r   c                 6    | j                   j                         S N)r-   currentWidgetrL   s    r    get_focus_widgetzHistoryWidget.get_focus_widgeto   s    ~~++--r   c                    | j                  t        j                  t        d      d| j	                  d      d      | _        | j                  t        j                  t        d      d| j	                  d      d      | _        | j                         }| j
                  | j                  fD ]$  }| j                  ||t        j                         & y )Nz
Wrap linesTwrap)texttoggledinitialoptionzShow line numbersline_numbers)menusection)create_actionr   r   r	   get_confr/   r   r0   get_options_menuadd_item_to_menur"   r$   )rB   rY   items      r    setupzHistoryWidget.setupr   s    -- ++<MM&) . 
 #'"4"4 22&'MM.1! #5 #
 $$&%%t'>'>? 	D!!8== " 	r   c                      y rO   r   rL   s    r    update_actionszHistoryWidget.update_actions   s    r   rS   )rW   c                 H    | j                   D ]  }|j                  |        y rO   )r+   toggle_wrap_moderB   valueeditors      r    on_wrap_updatezHistoryWidget.on_wrap_update   s#    ll 	+F##E*	+r   rX   c                 H    | j                   D ]  }|j                  |        y rO   )r+   toggle_line_numbersre   s      r    on_line_numbers_updatez$HistoryWidget.on_line_numbers_update   s#    ll 	.F&&u-	.r   
appearanceselectedui_theme)rZ   rW   c                 x    |dk(  r| j                  dd      }| j                  D ]  }|j                  |        y )Nrn   rm   rl   rZ   )r\   r+   set_color_scheme)rB   rW   rf   rg   s       r    on_color_scheme_changez$HistoryWidget.on_color_scheme_change   s=    ZMM*lMCEll 	+F##E*	+r   c                     || _         || _        | j                  D ]$  }|j                  |       |j	                  |       & y)z
        Update font of the code editor.

        Parameters
        ----------
        font: QFont
            Font object.
        color_scheme: str
            Name of the color scheme to use.
        N)color_schemer1   r+   set_fontrq   )rB   r1   rt   rg   s       r    update_fontzHistoryWidget.update_font   s@     )	ll 	2FOOD!##L1	2r   c                     | j                   j                  |      }| j                  j                  |      }| j                   j                  ||       | j                  j                  ||       y)a!  
        Move tab.

        Parameters
        ----------
        index_from: int
            Move tab from this index.
        index_to: int
            Move tab to this index.

        Notes
        -----
        Tabs themselves have already been moved by the history.tabwidget.
        N)r,   popr+   insert)rB   
index_fromindex_tofilenamerg   s        r    rA   zHistoryWidget.move_tab   sT     >>%%j1!!*-h1Hf-r   c                    	 t        j                  |      \  }}t	        |      }t        j                  d|      D cg c]  }|j                          }}t        |      t        kD  r,||t         dz
     dz   d }	 t        j                  ||       |S |S # t        t        f$ r d}Y w xY wc c}w # t        t        f$ r Y |S w xY w)z
        Read and return content from filename.

        Parameters
        ----------
        filename: str
            The file path to read.

        Returns
        -------
        str
            Content of the filename.
        z7# Previous history could not be read from disk, sorry


   N)r   readIOErrorOSErrorr   refinditerstartlen	MAX_LINESwrite)rB   r|   rT   r	   m
linebreakss         r    get_filename_textzHistoryWidget.get_filename_text   s    	OmmH-GD! d#)+T4)@AAaggiA
Az?Y&
I:>2Q678DtX. t ! 	OND	O B W% s(   B B-<B2 B*)B*2CCc           	      z   t        j                  |      }|| j                  v ryt        |       }t	        j
                  |      d   dk(  rdnd}|j                  | j                  d      || j                  dd	      | j                  | j                  d
             |j                  d       |j                  | j                  |             |j                  d       | j                  j                  |       | j                  j!                  |t	        j"                  |            }| j                  j%                  |       | j&                  j%                  |       | j                  j)                  |       | j                  j+                  ||       |j,                  j/                  | j,                         y)z
        Create a history tab for `filename`.

        Parameters
        ----------
        filename: str
            History filename.
        Nr   z.pypybatrX   rm   rl   rp   rS   )linenumberslanguagert   r1   rS   Teof)r   to_unicode_from_fsr,   r   ospsplitextsetup_editorr\   r1   setReadOnlyset_textr   set_cursor_positionr2   
set_editorr-   addTabbasenameappendr+   setCurrentIndexsetTabToolTipsig_focus_changedr>   )rB   r|   rg   r   indexs        r    add_historyzHistoryWidget.add_history   s`    ..x8t~~% "$' <<1!4=45n5z<Hv& 	 	
 	4 ..x89""5)##F+%%fcll8.DEh'F#&&u-$$UH5 	  (()?)?@r   c                 j   t        |      st        |j                         d      }| j                  j	                  |      }t        |      }| j
                  |   j                  |       | j                  d      r| j
                  |   j                  d       | j                  j                  |       y)z
        Append command to history tab.

        Parameters
        ----------
        filename: str
            History file.
        command: str
            Command to append to history file.
        zutf-8	go_to_eofr   N)r   r   toUtf8r,   r   r+   r   r\   r   r-   r   )rB   r|   commandr   s       r    append_to_historyzHistoryWidget.append_to_history  s     h'%hoo&7AH$$X. )U""7+==%LL33E:&&u-r   c                     | j                   j                         r| j                   j                         }nd}| j                  j	                  |       y)z8Refresh widget and update find widget on current editor.N)r-   countrP   r2   r   )rB   rg   s     r    r?   zHistoryWidget.refresh,  s=    >>!^^113FF##F+r   c                 
   t        j                         }|j                         }|d   j                  dd       |d   j                  d       |d   j                  d	
       |d   j                  d	       t	        |      S )zQ
        Change style of tabs because we don't have a close button here.
        zQTabBar::tabz1.0em4px)	marginToppaddingzQTabWidget::pane1px)borderzQTabWidget::left-corner0px)leftzQTabWidget::right-corner)right)r   get_copyget_stylesheet	setValuesstr)rB   tabs_stylesheetcsss      r    r4   zHistoryWidget._tabs_stylesheet5  s    
 2::<,,.N%% 	& 	

 	)) 	* 	
 	%&00 	1 	
 	&'11 	2 	
 ?##r   )r   r   r   __doc__r   r   r*   rM   rQ   r`   rb   r   rh   rk   rr   rv   rA   r   r   r   r   r   r?   propertyr4   __classcell__)rI   s   @r    r&   r&   3   s    
 
)8Z.4 6"+ #+ >*. +. L*j1IJ+ K+2$.* D&AP 
#s^. .., $ $r   r&   c                  
   ddl m}  ddlm}  |       }d|_         | d      }t        d|d      }|j                          |j                          |j                          t        j                  |j                                y)zRun history widget.r   )qapplication)	MagicMock
historylog   )	test_timeN)spyder.utils.qthelpersr   unittest.mockr   CONF_SECTIONr&   _setupr`   showr7   exitexec_)r   r   plugin_mockappwidgets        r    testr   Q  s\    3'+K+K

#C<d;F
MMO
LLN
KKMHHSYY[r   __main__)'r   os.pathpathr   r   r7   qtpy.QtCorer   r   qtpy.QtWidgetsr   r   spyder.api.config.decoratorsr   spyder.api.translationsr	   spyder.api.widgets.main_widgetr
   spyder.py3compatr   r   spyder.utilsr   spyder.utils.sourcecoder   spyder.widgets.findreplacer   spyder.widgets.simplecodeeditorr   spyder.widgets.tabsr   spyder.utils.stylesheetr   r   r   r"   r&   r   r   r   r   r    <module>r      s      	 
 % / 8 % ; ; ! 2 2 < $ ; 	5 5 [$$ [$|  zF r   