B
    b¹_­9  ã               @   sì   d Z dZddlZddlZddlZddlZddl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 G dd„ dejƒZG dd„ de	jƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejejƒZdS )z6Crust combines the shell and filling into one control.z(Patrick K. O'Brien <pobrien@orbtech.com>é    Né   )Ú
dispatcher)Ú
editwindow)ÚFilling)Úframe)ÚShell)ÚVERSIONc               @   sˆ   e Zd ZdZd ZdZdejejej	ej
B dddddddddfdd	„Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCrustzCrust based on SplitterWindow.i,  éÿÿÿÿzCrust WindowNTÚ c          	   O   sÖ  t j | ||||||¡ |  ¡ }|  |t j @ ¡ t|| |
||||dœ|—Ž| _| j| _|dkrj| jj	j
}t j| dd| _| j| jj	j
d< t| j|||	d| _| j| jj	j
d< | jj| jdd	d
 t| jd| _| jj| jdd | jj| jj	j
d< | j ¡ d | j_t| jd| _| jj| jdd t| jd| _| jj| jdd t| jd| _| jj| jdd | j ¡  | j ¡  |  | j¡ d	| _t  | j¡ |   d¡ |  !t j"| j#¡ |  !t j$| j%¡ |  !t j&| j'¡ dS )zCreate Crust instance.)ÚparentZ	introTextÚlocalsÚInterpClassÚstartupScriptÚexecStartupScriptNr
   )r   ÚidÚnotebook)r   Ú
rootObjectÚ	rootLabelÚrootIsNamespaceÚfillingZ	NamespaceT)ÚpageÚtextZselect)r   ÚDisplay)r   r   Zppr   ÚCalltipZHistoryZ
Dispatcheréd   )(ÚwxÚSplitterWindowÚ__init__ZGetWindowStyleZSetWindowStyleZTAB_TRAVERSALr   ÚshellZeditorZinterpr   ZNotebookr   r   r   ZAddPager   ÚdisplayÚsetItemZGetPageCountÚnbTabr   ÚcalltipÚSessionListingZsessionlistingÚDispatcherListingZdispatcherlistingZHideZ
InitializeÚ_shouldsplitÚ	CallAfterÚ_CheckShouldSplitZSetMinimumPaneSizeZBindZEVT_SIZEÚSplitterOnSizeZEVT_SPLITTER_SASH_POS_CHANGEDÚ	OnChangedZEVT_SPLITTER_DCLICKÚOnSashDClick)Úselfr   r   ÚposÚsizeÚstyleÚnamer   r   r   Úintror   r   r   r   ÚargsÚkwds© r4   ú*lib/python3.7/site-packages/wx/py/crust.pyr      sF    




zCrust.__init__c             C   s<   | j r(|  | j| j| j ¡ |  ¡ | _nd| _|  ¡ | _d S )Nr
   )	r&   ÚSplitHorizontallyr   r   Ú
sashoffsetÚGetSashPositionÚlastsashposÚIsSplitÚissplit)r,   r4   r4   r5   r(   [   s
    zCrust._CheckShouldSplitc             C   s>   | j r|  ¡  n |  | j| j| j ¡ |  ¡ | _|  ¡ | _ dS )z1Toggle the display of the filling and other toolsN)	r;   ÚUnsplitr6   r   r   r7   r8   r9   r:   )r,   r4   r4   r5   ÚToggleToolsc   s
    

zCrust.ToggleToolsc             C   s   | j S )N)r;   )r,   r4   r4   r5   Ú
ToolsShownl   s    zCrust.ToolsShownc             C   s*   |   ¡ j| ¡  | _| ¡ | _| ¡  dS )z0update sash offset from the bottom of the windowN)ÚGetSizeÚheightr8   r7   r9   ÚSkip)r,   Úeventr4   r4   r5   r*   o   s    
zCrust.OnChangedc             C   s   |   ¡  d| _d S )NF)r<   r;   )r,   rB   r4   r4   r5   r+   u   s    zCrust.OnSashDClickc             C   s0   |  ¡ }| ¡ }| |j| j d¡ | ¡  d S )NT)ZGetEventObjectr?   ÚSetSashPositionr@   r7   rA   )r,   rB   ZsplitterÚszr4   r4   r5   r)   z   s    zCrust.SplitterOnSizec                s†   ˆ j  |¡ ˆ j |¡ | dd¡}t ˆ j|¡ ‡ fdd„}t |¡ | dd¡}|dkrhˆ j |¡ | dd¡ˆ _	ˆ j	s‚d	ˆ _
d S )
NzSash/CrustPosi  c                 s   ˆ   ¡ } | jˆ  ¡  ˆ _d S )N)r?   r@   r8   r7   )rD   )r,   r4   r5   Ú_updateSashPosValue‡   s    z/Crust.LoadSettings.<locals>._updateSashPosValuezView/Zoom/DisplayiÿÿÿzSash/IsSplitTF)r   ÚLoadSettingsr   ZReadIntr   r'   rC   r    ZSetZoomr;   r&   )r,   Úconfigr-   rE   Zzoomr4   )r,   r5   rF      s    
zCrust.LoadSettingsc             C   sT   | j  |¡ | j |¡ | jdkr0| d| j¡ | d| j¡ | d| j ¡ ¡ d S )Nr
   zSash/CrustPoszSash/IsSplitzView/Zoom/Display)r   ÚSaveSettingsr   r9   ZWriteIntr;   r    ZGetZoom)r,   rG   r4   r4   r5   rH   ’   s    
zCrust.SaveSettings)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   r7   r   ÚDefaultPositionÚDefaultSizeZSP_3DZSP_LIVE_UPDATEr   r(   r=   r>   r*   r+   r)   rF   rH   r4   r4   r4   r5   r	      s"   <	r	   c               @   sH   e Zd ZdZdejejejejB dfdd„Z	dd„ Z
dd	„ Zd
d„ ZdS )r   z1STC used to display an object using Pretty Print.r
   Fc             C   sB   t j | |||||¡ |  d¡ |  d¡ |s>tj| jdd dS )zCreate Display instance.TFzInterpreter.push)ÚreceiverÚsignalN)r   Ú
EditWindowr   ÚSetReadOnlyZSetWrapModer   ÚconnectÚpush)r,   r   r   r-   r.   r/   Zstaticr4   r4   r5   r   ž   s
    

zDisplay.__init__c             C   s$   | st j| jdd dS |  ¡  dS )z%Receiver for Interpreter.push signal.zInterpreter.push)rO   rP   N)r   Ú
disconnectrT   ÚRefresh)r,   ÚcommandZmorer4   r4   r5   rT   ª   s    zDisplay.pushc             C   s<   t | dƒsd S |  d¡ t | j¡}|  |¡ |  d¡ d S )NÚitemFT)ÚhasattrrR   ÚpprintZpformatrX   ZSetText)r,   r   r4   r4   r5   rV   ±   s    


zDisplay.Refreshc             C   sJ   || _ |  ¡  |  ¡  ¡ | jkrFtj ¡ }|  ¡  | j¡ t 	|j
¡ dS )z5Set item to pretty print in the notebook Display tab.N)rX   rV   Z	GetParentÚGetSelectionr"   r   ZWindowZ	FindFocusÚSetSelectionr'   ÚSetFocus)r,   rX   Zfocusr4   r4   r5   r!   ¹   s    
zDisplay.setItemN)rI   rJ   rK   rL   r   rM   rN   ZCLIP_CHILDRENZSUNKEN_BORDERr   rT   rV   r!   r4   r4   r4   r5   r   ›   s   
	r   c               @   s"   e Zd ZdZd	dd„Zdd„ ZdS )
r   z6Text control containing the most recent shell calltip.Nr
   r   c             C   s†   t jt jB t jB }t jj| |||d |  t  ddd¡¡ || _t	j
| j| jd d |  ¡ }t  | ¡ t jt jt j¡}|  |¡ d S )N)r/   éÿ   éÐ   z.calltip)rO   rP   )r   ÚTE_MULTILINEÚTE_READONLYÚTE_RICH2ÚTextCtrlr   ZSetBackgroundColourZColourÚShellClassNamer   rS   r    ÚGetFontÚFontÚGetPointSizeÚFONTFAMILY_TELETYPEÚFONTSTYLE_NORMALÚFONTWEIGHT_NORMALÚSetFont)r,   r   r   rd   r/   ÚdfÚfontr4   r4   r5   r   Ç   s    zCalltip.__init__c             C   s>   | st j| j| jd d dS |  ¡  |  |¡ |  d¡ dS )z!Receiver for this.calltip signal.z.calltip)rO   rP   Nr   )r   rU   r    rd   ZClearÚ
AppendTextZSetInsertionPoint)r,   r#   r4   r4   r5   r    Ò   s    
zCalltip.display)Nr
   r   )rI   rJ   rK   rL   r   r    r4   r4   r4   r5   r   Ä   s   
r   c               @   s:   e Zd ZdZddd„Zdd„ Zd	d
„ Zdd„ Zdd„ ZdS )r$   z1Text control containing all commands for session.Nr
   r   c             C   s¤   t jt jB t jB t jB }t jj| |||d || _tj	| j
| jd d tj	| j| jd d tj	| j| jd d |  ¡ }t  | ¡ t jt jt j¡}|  |¡ d S )N)r/   z.addHistory)rO   rP   z.clearHistoryz.loadHistory)r   r`   ra   rb   ÚTE_DONTWRAPrc   r   rd   r   rS   Ú
addHistoryÚclearHistoryÚloadHistoryre   rf   rg   rh   ri   rj   rk   )r,   r   r   rd   r/   rl   rm   r4   r4   r5   r   â   s    zSessionListing.__init__c             C   sF   t j| j| jd d t j| j| jd d t j| j| jd d d S )Nz.addHistory)rO   rP   z.clearHistoryz.loadHistory)r   rU   rp   rd   rq   rr   )r,   r4   r4   r5   Ú_disconnectó   s    zSessionListing._disconnectc             C   sD   | s|   ¡  d S |d d … }| ¡  |  d |¡d ¡ |  ¡  d S )NÚ
)rs   ÚreverseÚSetValueÚjoinÚSetInsertionPointEnd)r,   ÚhistoryZhistr4   r4   r5   rr   ü   s    zSessionListing.loadHistoryc             C   s.   | s|   ¡  d S |r*|  ¡  |  |d ¡ d S )Nrt   )rs   rx   rn   )r,   rW   r4   r4   r5   rp     s    zSessionListing.addHistoryc             C   s   | s|   ¡  d S |  d¡ d S )Nr   )rs   rv   )r,   r4   r4   r5   rq     s    zSessionListing.clearHistory)Nr
   r   )	rI   rJ   rK   rL   r   rs   rr   rp   rq   r4   r4   r4   r5   r$   ß   s   
	
r$   c               @   s"   e Zd ZdZddd„Zdd„ ZdS )	r%   z3Text control containing all dispatches for session.Nr
   c             C   sj   t jt jB t jB t jB }t jj| |||d tj| j	d |  
¡ }t  | ¡ t jt jt j¡}|  |¡ d S )N)r/   )rO   )r   r`   ra   rb   ro   rc   r   r   rS   Úspyre   rf   rg   rh   ri   rj   rk   )r,   r   r   r/   rl   rm   r4   r4   r5   r     s    zDispatcherListing.__init__c             C   s\   | st j| jd dS d||f }|  ¡  |  ¡ \}}||krJ|  dd¡ |  |d ¡ dS )z(Receiver for Any signal from Any sender.)rO   Nz
%r from %sr   rt   )r   rU   rz   rx   r[   r\   rn   )r,   rP   Zsenderr   ÚstartÚendr4   r4   r5   rz   "  s    zDispatcherListing.spy)Nr
   )rI   rJ   rK   rL   r   rz   r4   r4   r4   r5   r%     s   

r%   c               @   s€   e Zd ZdZd Zdddejejejdddddddfdd„Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zddd„Zdd„ ZdS )Ú
CrustFramez,Frame containing all the PyCrust components.Nr
   ÚPyCrustTc             O   sº   t jj| ||||||dd t j | ||¡ |tjkr@|  d¡ dt }|  | 	dd¡¡ t
|| ||||	|
|| j| jdœ	|—Ž| _| jj| _| j| jjj_| j| j_| j ¡  |  ¡  dS )	zCreate CrustFrame instance.r~   )Z	shellName)i   iX  z&PyCrust %s - The Flakiest Python Shellrt   z, )	r   r1   r   r   r   r   r   r   r   N)r   ÚFramer   ÚShellFrameMixinr   rN   ZSetSizer   ZSetStatusTextÚreplacer	   r   r   Úcrustr   r   ZtreeZsetStatusTextr]   rF   )r,   r   r   Útitler-   r.   r/   r   r   r   r   r   rG   ZdataDirr2   r3   r1   r4   r4   r5   r   6  s    

&


zCrustFrame.__init__c             C   s    |   ¡  | jj ¡  |  ¡  dS )zEvent handler for closing.N)rH   r‚   r   ZdestroyÚDestroy)r,   rB   r4   r4   r5   ÚOnClose]  s    zCrustFrame.OnClosec             C   s‚   d}dt  d d d dtj  dtj ¡ d   d	tj  d
d tjdd… ¡  }t 	| ||tj
tjB ¡}| ¡  | ¡  dS )zDisplay an About window.zAbout PyCrustzPyCrust %s

z)Yet another Python shell, only flakier.

z"Half-baked by Patrick K. O'Brien,
z&the other half is still in the oven.

zPlatform: %s
zPython Version: %s
r   zwxPython Version: %s
z	(%s)
z, r   N)r   ÚsysÚplatformÚversionÚsplitr   ZVERSION_STRINGrw   ZPlatformInfoZMessageDialogZOKZICON_INFORMATIONZ	ShowModalr„   )r,   rB   rƒ   r   Zdialogr4   r4   r5   ÚOnAboutd  s    8
zCrustFrame.OnAboutc             C   s
   | j  ¡ S )z1Toggle the display of the filling and other tools)r‚   r=   )r,   r4   r4   r5   r=   u  s    zCrustFrame.ToggleToolsc             C   s
   | j  ¡ S )N)r‚   r>   )r,   r4   r4   r5   r>   y  s    zCrustFrame.ToolsShownc             C   s   t j | |¡ dS )zShow a help dialog.N)r   r€   ÚOnHelp)r,   rB   r4   r4   r5   r‹   |  s    zCrustFrame.OnHelpc             C   s8   | j d k	r4tj | ¡ tj | | j ¡ | j | j ¡ d S )N)rG   r   r€   rF   r   r‚   )r,   r4   r4   r5   rF   €  s    
zCrustFrame.LoadSettingsFc             C   sD   | j d k	r@tj | |¡ | js"|r@tj | | j ¡ | j | j ¡ d S )N)rG   r   r€   rH   ZautoSaveSettingsr   r‚   )r,   Úforcer4   r4   r5   rH   ‡  s
    

zCrustFrame.SaveSettingsc             C   s$   | j d k	r | jdd | j  ¡  d S )NT)rŒ   )rG   rH   ZFlush)r,   r4   r4   r5   ÚDoSaveSettings  s    
zCrustFrame.DoSaveSettings)F)rI   rJ   rK   rL   r0   r   rM   rN   ZDEFAULT_FRAME_STYLEr   r…   rŠ   r=   r>   r‹   rF   rH   r   r4   r4   r4   r5   r}   0  s    "
r}   )rL   Ú
__author__r   ÚosrZ   Úrer†   r   r   r   r   r   r   r   r   rˆ   r   r   r	   rQ   r   rc   r   r$   r%   r   r€   r}   r4   r4   r4   r5   Ú<module>   s&    )6