
    G@dO'                     @   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%             dS dS )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dS )HistoryWidgetActionsmaximum_history_entries_actiontoggle_wrap_actiontoggle_line_numbers_actionN)__name__
__module____qualname__MaximumHistoryEntries
ToggleWrapToggleLineNumbers     >lib/python3.11/site-packages/spyder/plugins/history/widgets.pyr   r   $   s#        < &J4r   r   c                       e Zd ZdZdS ) HistoryWidgetOptionsMenuSectionsmain_sectionN)r   r   r   Mainr   r   r    r"   r"   -   s        DDDr   r"   c                   2    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                                         t                      }|                    d           t"          j        dk    r{t'          |           }|                    d           t          |          }|                    dddd           |                    | j                   |                    |           n|                    | j                   |                    | j                   |                     |           | j        j                            | j                   | j        j                            | j                   d S )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###DMMM''888$]33J))!Q1555  000]++++T^,,,)***v 	%--dl;;; ((77777r   c                      t          d          S )NHistoryr   rB   s    r    	get_titlezHistoryWidget.get_titlel   s    ||r   c                 4    | j                                         S N)r-   currentWidgetrL   s    r    get_focus_widgetzHistoryWidget.get_focus_widgeto   s    ~++---r   c                    |                      t          j        t          d          d|                     d          d          | _        |                      t          j        t          d          d|                     d          d          | _        |                                 }| j        | j        fD ]$}| 	                    ||t          j                   %d S )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&''MM.11! #5 #
 #
 $$&&%t'>? 	 	D!!8= "    	 	r   c                     d S rO   r   rL   s    r    update_actionszHistoryWidget.update_actions   s    r   rS   )rW   c                 D    | j         D ]}|                    |           d S rO   )r+   toggle_wrap_moderB   valueeditors      r    on_wrap_updatezHistoryWidget.on_wrap_update   s4    l 	+ 	+F##E****	+ 	+r   rX   c                 D    | j         D ]}|                    |           d S rO   )r+   toggle_line_numbersre   s      r    on_line_numbers_updatez$HistoryWidget.on_line_numbers_update   s4    l 	. 	.F&&u----	. 	.r   
appearanceselectedui_theme)rZ   rW   c                 ~    |dk    r|                      dd          }| j        D ]}|                    |           d S )Nrn   rm   rl   rZ   )r\   r+   set_color_scheme)rB   rW   rf   rg   s       r    on_color_scheme_changez$HistoryWidget.on_color_scheme_change   sT    ZMM*lMCCEl 	+ 	+F##E****	+ 	+r   c                     || _         || _        | j        D ],}|                    |           |                    |           -dS )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   sW     )	l 	2 	2FOOD!!!##L1111	2 	2r   c                     | j                             |          }| j                            |          }| j                             ||           | j                            ||           dS )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   sd     >%%j11!!*--h111Hf-----r   c                    	 t          j        |          \  }}n# t          t          f$ r d}Y nw xY wt	          |          }d t          j        d|          D             }t          |          t          k    rJ||t           dz
           dz   d         }	 t          j	        ||           n# t          t          f$ r Y nw xY w|S )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

c                 6    g | ]}|                                 S r   )start).0ms     r    
<listcomp>z3HistoryWidget.get_filename_text.<locals>.<listcomp>   s     AAAAaggiiAAAr   
   N)
r   readIOErrorOSErrorr   refinditerlen	MAX_LINESwrite)rB   r|   rT   r	   
linebreakss        r    get_filename_textzHistoryWidget.get_filename_text   s    	OmH--GD!!! 	O 	O 	ONDDD	O d##AAT4)@)@AAA
z??Y&&
I:>2Q6778DtX....W%    s    00B, ,C ?C c           	         t          j        |          }|| j        v rdS t          |           }t	          j        |          d         dk    rdnd}|                    |                     d          ||                     dd	          | j        |                     d
                     |	                    d           |
                    |                     |                     |                    d           | j                            |           | j                            |t	          j        |                    }| j                            |           | j                            |           | j                            |           | j                            ||           |j                            | j                   dS )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8t~%%F "$'' <11!4==445n55z<HHv&& 	 	
 	
 	
 	4   ..x88999""5)))##F+++%%fcl8.D.DEEh'''F###&&u---$$UH555 	 (()?@@@@@r   c                    t          |          s"t          |                                d          }| j                            |          }t          |          }| j        |                             |           |                     d          r | j        |                             d           | j	        
                    |           dS )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'' 	B%hoo&7&7AAH$$X.. ))U""7+++==%% 	;L33E:::&&u-----r   c                     | j                                         r| j                                         }nd}| j                            |           dS )z8Refresh widget and update find widget on current editor.N)r-   countrP   r2   r   )rB   rg   s     r    r?   zHistoryWidget.refresh,  sO    >!! 	^1133FFF##F+++++r   c                 P   t          j                    }|                                }|d                             dd           |d                             d           |d                             d	
           |d                             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        
 
)8 )8 )8 )8 )8Z  . . .  4   ^6"""+ + #"+ ^>***. . +*. ^L*j1IJJJ+ + KJ+2 2 2$. . .*     D&A &A &AP 
T#s^^. . ^.., , , $ $ X$ $ $ $ $r   r&   c                  >   ddl m}  ddlm}  |            }d|_         | d          }t          d|d          }|                                 |                                 |                                 t          j
        |                                           dS )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33333'''''')++K+K
,
#
#
#C<d;;F
MMOOO
LLNNN
KKMMMHSYY[[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 7 7 7 7 7 % % % % % % ; ; ; ; ; ; ; ; ; ; ; ; ; ; ! ! ! ! ! ! 2 2 2 2 2 2 2 2 2 2 2 2 < < < < < < $ $ $ $ $ $ ; ; ; ; ; ; 	5 5 5 5 5 5 5 5       [$ [$ [$ [$ [$$ [$ [$ [$|    zDFFFFF r   