B
    b¹_<  ã               @   sÌ   d Z dZed7 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 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dS )z:PySlices combines the slices and filling into one control.z1David N. Mashburn <david.n.mashburn@gmail.com> / z(Patrick K. O'Brien <pobrien@orbtech.com>é    Né   )Ú
dispatcher)Úcrust)Údocument)Ú
editwindow)Úeditor)ÚFilling)Úframe)ÚSlicesShell)ÚVERSIONc               @   sN   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dd	d	fd
d„ZdS )ÚCrustSliceszSlices based on SplitterWindow.ZSlicesi,  éÿÿÿÿzSlices WindowNTÚ Fc             O   sð  t j | ||||||¡ |  ¡ }|  |t j @ ¡ t|| |
|||||||dœ	|—Ž| _| j| _| j| _	|dkrx| 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| jd| _| jj| jdd | jj| jj
jd< | j ¡ d | j_tj| jdd| _| jj| jdd tj| jdd| _| jj| jdd tj| 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 CrustSlices instance.)	ÚparentZ	introTextÚlocalsÚInterpClassÚstartupScriptÚexecStartupScriptÚshowPySlicesTutorialÚenableShellModeÚhideFoldingMarginNr   )r   ÚidÚnotebook)r   Ú
rootObjectÚ	rootLabelÚrootIsNamespaceÚfillingZ	NamespaceT)ÚpageÚtextZselect)r   ÚDisplay)r   r   Zppr   r
   )r   ZShellClassNameÚCalltipZHistoryZ
Dispatcheréd   )*ÚwxZSplitterWindowÚ__init__ZGetWindowStyleZSetWindowStyleZTAB_TRAVERSALr
   Ú
sliceshellr   ÚshellZinterpr   ZNotebookr   r   r   ZAddPager   r   ZdisplayZsetItemZGetPageCountZnbTabr    ZcalltipZSessionListingZsessionlistingZDispatcherListingZdispatcherlistingZHideZ
InitializeZ_shouldsplitZ	CallAfterZ_CheckShouldSplitZSetMinimumPaneSizeÚBindZEVT_SIZEZSplitterOnSizeZEVT_SPLITTER_SASH_POS_CHANGEDZ	OnChangedZEVT_SPLITTER_DCLICKZOnSashDClick)Úselfr   r   ÚposÚsizeÚstyleÚnamer   r   r   Úintror   r   r   r   r   r   r   ÚargsÚkwds© r/   ú0lib/python3.7/site-packages/wx/py/crustslices.pyr#      sH    
"




zCrustSlices.__init__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r+   Z
sashoffsetr"   ÚDefaultPositionÚDefaultSizeZSP_3DZSP_LIVE_UPDATEr#   r/   r/   r/   r0   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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d0dd„Zdd„ Zdd„ Zdd „ Zd1d!d"„Zd2d$d%„Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ ZdS )3ÚCrustSlicesFramez-Frame containing all the PySlices components.Z
SliceFrameNr   ÚPySlicesTc             O   s  t jj| ||||||dd t j | ||¡ |tjkr@|  d¡ dt }|  | 	dd¡¡ t
|| ||||	|
|| j| j| j| j| jdœ|—Ž| _| jj| _| j| _| jj| _| j| jjj_| j| j_| j ¡  |  ¡  tj d¡| _|d	krô|  |¡ |  tj| j ¡ d	S )
zCreate CrustFrame instance.r8   )Z	shellName)i   iX  z2PySlices %s - The Flakiest Python Shell... Cut up!Ú
z, )r   r,   r   r   r   r   r   r   r   r   r   r   ú~N)!r	   ÚFramer#   ZShellFrameMixinr"   r6   ZSetSizer   ÚSetStatusTextÚreplacer   r   r   r   r   r   r   r$   r%   Úbufferr   ZtreeZsetStatusTextZSetFocusZLoadSettingsÚosÚpathÚ
expanduserÚcurrentDirectoryÚ
bufferOpenr&   ZEVT_IDLEÚOnIdle)r'   r   r   Útitler(   r)   r*   r   r   r   r   r   ZconfigZdataDirÚfilenamer-   r.   r,   r/   r/   r0   r#   k   s(    

2




zCrustSlicesFrame.__init__c             C   s   |   ¡  dS )zEvent handler for closing.N)ÚbufferClose)r'   Úeventr/   r/   r0   ÚOnCloseœ   s    zCrustSlicesFrame.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 PySliceszPySlices %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_STRINGÚjoinZPlatformInfoZMessageDialogZOKZICON_INFORMATIONZ	ShowModalÚDestroy)r'   rH   rE   r   Zdialogr/   r/   r0   ÚOnAbout    s    8
zCrustSlicesFrame.OnAboutc             C   s    t j | |¡ | j | j¡ dS )z)Change between Slices Mode and Shell ModeN)r	   r;   ÚOnEnableShellModer$   ZToggleShellModer   )r'   rH   r/   r/   r0   rQ   °   s    z"CrustSlicesFrame.OnEnableShellModec             C   s    t j | |¡ | j | j¡ dS )z)Change between Slices Mode and Shell ModeN)r	   r;   ÚOnHideFoldingMarginr$   ZToggleFoldingMarginr   )r'   rH   r/   r/   r0   rR   µ   s    z$CrustSlicesFrame.OnHideFoldingMarginc             C   s   |   ¡  | ¡  dS )zEvent handler for idle time.N)Ú_updateTitleZSkip)r'   rH   r/   r/   r0   rD   ¾   s    zCrustSlicesFrame.OnIdlec             C   sL   |   ¡ }|  ¡ r,| d¡rqH|  d| ¡ n| d¡rH|  |dd… ¡ dS )zShow current title information.z* é   N)ZGetTitleÚbufferHasChangedÚ
startswithÚSetTitle)r'   rE   r/   r/   r0   rS   Ã   s    

zCrustSlicesFrame._updateTitlec             C   s   | j r
dS dS dS )z)Return True if there is a current buffer.TFN)r>   )r'   r/   r/   r0   Ú	hasBufferÏ   s    zCrustSlicesFrame.hasBufferc             C   sB   | j  ¡ r|  ¡ }|r|S |  ¡  | jj ¡  |  ¡  |  ¡  dS )zClose buffer.F)	r>   Ú
hasChangedÚbufferSuggestSaveZSaveSettingsr   r$   ZdestroyÚbufferDestroyrO   )r'   Úcancelr/   r/   r0   rG   Ö   s    
zCrustSlicesFrame.bufferClosec             C   s²   |   ¡  tƒ }tj| dd | _}| tjdd„ ¡ t|d}||_t 	tj
¡}| |jdtj¡ | |¡ | d¡ | ¡  | |¡ | |¡ |  |¡ | j ¡  |  ¡  dS )	zCreate new buffer.r   )r   r   c             S   s   | S )Nr/   )Úxr/   r/   r0   Ú<lambda>é   ó    z/CrustSlicesFrame.bufferCreate.<locals>.<lambda>)r   r   TN)r[   ZBufferr"   ZPanelÚpanelr&   ZEVT_ERASE_BACKGROUNDZEditorr   ZBoxSizerZVERTICALZAddZwindowZEXPANDZSetSizerZSetAutoLayoutZLayoutZ	addEditorÚopenZ	setEditorZsetFocusZSendSizeEvent)r'   rF   r>   r`   r   Zsizerr/   r/   r0   ÚbufferCreateä   s     






zCrustSlicesFrame.bufferCreatec             C   s   | j rd| _d| _ dS )zDestroy the current buffer.N)r>   r   )r'   r/   r/   r0   r[   ø   s    zCrustSlicesFrame.bufferDestroyc             C   s   | j r| j  ¡ S dS dS )z2Return True if buffer has changed since last save.FN)r>   rY   )r'   r/   r/   r0   rU   ÿ   s    
z!CrustSlicesFrame.bufferHasChangedc             C   s`   |   ¡ }|r|S | j ¡  |  d¡ d| j_| j ¡  t ¡ | j_	d| j_
| jj	j| j_d}|S )zCreate new buffer.r8   Fz
This shell)rZ   r$   ÚclearrW   ÚNeedsCheckForSaveÚSetSavePointr   ÚDocumentr>   Údocr+   ÚfilebaseÚ
modulename)r'   r\   r/   r/   r0   Ú	bufferNew  s    


zCrustSlicesFrame.bufferNewc          	   C   sÜ   |   ¡ r|  ¡ }|r|S |dkr2tjdd| jd}|dkrØ|dkrØt|dƒ}| j |¡ W dQ R X tj	 
|¡d | _|  tj	 
|¡d d	 ¡ d
| j_| j ¡  t |¡| j_| jjj| j_| jjj| j_| j d¡ dS )zOpen file in buffer.NzOpen a PySlices Filez
*.pyslices)ÚwildcardZdefault_pathr   Úrr   r   z - PySlicesF)rU   rZ   r"   ZFileSelectorrB   ra   r$   ZLoadPySlicesFiler?   r@   rM   rW   rd   re   r   rf   r>   rg   rF   r+   rh   ri   ZScrollToLine)r'   Úfiler\   Úfidr/   r/   r0   rC     s(    

zCrustSlicesFrame.bufferOpenFc          	   C   s    | j jj}|| j _|sd S tj |¡s.d| j _| j jsF| j  |¡| j _| j jrœt|dƒ}| j	 
|¡ W d Q R X | j	 ¡  |  tj |¡d d ¡ d| j	_d S )NTÚwbr   z - PySlicesF)r>   rg   ÚfilepathÚ	confirmedr?   r@   ÚexistsZoverwriteConfirmra   r$   ÚSavePySlicesFilere   rW   rM   rd   )r'   rq   rp   rn   r/   r/   r0   Ú
simpleSave7  s    

zCrustSlicesFrame.simpleSavec             C   s(   | j jjr| jdd d}n|  ¡ }|S )zSave buffer to its file.T)rq   F)r>   rg   rp   rt   ÚbufferSaveAs)r'   r\   r/   r/   r0   Ú
bufferSaveH  s
    
zCrustSlicesFrame.bufferSavec             C   sÀ   |   ¡ r"| jjjr"|  ¡ }|r"|S d}| jr@| jjjr@| jjj}tjd|dd}|jdkr¸|jdd… dkrz| jd7  _t	 
|j¡| j_| jjj| j_| jjj| j_| jd	d
 d}nd	}|S )zSave buffer to a new filename.r   zSave PySlices Filez&PySlices Files (*.pyslices)|*.pyslices)rE   Ú	directoryrk   )r   Ni÷ÿÿÿNz	.pyslicesT)rq   F)rU   r>   rg   rp   rZ   Úfiledirr   Ú
saveSingler@   r   rf   rF   r+   rh   ri   rt   )r'   r\   rx   Úresultr/   r/   r0   ru   R  s&    

zCrustSlicesFrame.bufferSaveAsc          	   C   sŠ   d}| j r| j jjr| j jj}tjd|dd}|jdkr‚|jdd… dkrX| jd7  _t|jd	ƒ}| j |¡ W dQ R X d
}nd}|S )zSave buffer to a new filename.r   zSave a Copy of PySlices Filez&PySlices Files (*.pyslices)|*.pyslices)rE   rw   rk   )r   Ni÷ÿÿÿNz	.pyslicesro   FT)	r>   rg   rx   r   ry   r@   ra   r$   rs   )r'   rx   rz   rn   r\   r/   r/   r0   ÚbufferSaveACopyj  s    

z CrustSlicesFrame.bufferSaveACopyc             C   sR   t jdd| jj dtjtjB tjB tjB tj	B d}|j
rD|  ¡ }n
|jdk}|S )z=Suggest saving changes.  Return True if user selected Cancel.Nz0%s has changed.
Would you like to save it first?zSave current file?)r   ÚmessagerE   r*   ZCancel)r   ZmessageDialogr>   r+   r"   ZYES_NOZCANCELZ
NO_DEFAULTZCENTREZICON_QUESTIONZpositiverv   r   )r'   rz   r\   r/   r/   r0   rZ     s    "

z"CrustSlicesFrame.bufferSuggestSavec             C   s$   | j  ¡ r|  d¡ n
|  d¡ dS )z<Update the buffer namespace for autocompletion and calltips.zNamespace updatedz+Error executing, unable to update namespaceN)r>   ÚupdateNamespacer<   )r'   r/   r/   r0   r}   Ž  s    
z CrustSlicesFrame.updateNamespace)N)N)F)r1   r2   r3   r4   r+   r"   r5   r6   ZDEFAULT_FRAME_STYLEr#   rI   rP   rQ   rR   rD   rS   rX   rG   rb   r[   rU   rj   rC   rt   rv   ru   r{   rZ   r}   r/   r/   r/   r0   r7   e   s6   ,	

!

r7   )r4   Ú
__author__r"   r?   ZpprintÚrerJ   r   r   r   r   r   r   r   r   r	   r$   r
   rL   r   ZCrustr   Z
CrustFramer7   r/   r/   r/   r0   Ú<module>   s$   M