B
    b¹_R™  ã               @   sÈ  d Z dZddlZddlZddlmZ ddlmZ ddlmZ ej	Z	ej
Z
ejZejZejZejZejZejZejZejZejZejZejZejZejZe ¡ ZejZe ¡ Ze ¡ Ze ¡ Ze ¡ Ze ¡ Ze ¡ Z e ¡ Z!e ¡ Z"e ¡ Z#e ¡ Z$e ¡ Z%e ¡ Z&e ¡ Z'e ¡ Z(e ¡ Z)e ¡ Z*e ¡ Z+e ¡ Z,e ¡ Z-e ¡ Z.e ¡ Z/e ¡ Z0e ¡ Z1e ¡ Z2e ¡ Z3ej4Z4e ¡ Z5e ¡ Z6e ¡ Z7e ¡ Z8G dd	„ d	ej9ƒZ9G d
d„ dƒZ:G dd„ dej;ƒZ<dS )zBase frame with menu.z(Patrick K. O'Brien <pobrien@orbtech.com>é    Né   )ÚVERSION)Ú
editwindow)Ú
dispatcherc               @   sè  e Zd ZdZdddejejej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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*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Z d8d9„ Z!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%dBdC„ Z&dDdE„ Z'dFdG„ Z(dHdI„ Z)dJdK„ Z*dLdM„ Z+dNdO„ Z,dPdQ„ Z-dRdS„ Z.dTdU„ Z/dVdW„ Z0dXdY„ Z1dZd[„ Z2d\d]„ Z3d^d_„ Z4d`da„ Z5dbdc„ Z6ddde„ Z7dwdgdh„Z8didj„ Z9dkdl„ Z:dmdn„ Z;dodp„ Z<dqdr„ Z=dsdt„ Z>dudv„ Z?dS )xÚFramezFrame with standard menu items.NéÿÿÿÿZEditorÚPyCrustc       	   	   C   sž   t j | ||||||¡ |  ¡  |  d¡ || _ddlm} |  |j	|d¡ |  
¡  d| _d| _t  ¡ | _| j t j¡ |  t j| j¡ |  t j| j¡ dS )zCreate a Frame instance.r   r   )Úimages)Ú	shellNameFN)Úwxr   Ú__init__ZCreateStatusBarZSetStatusTextr
   Ú r	   ZSetIconZ	getPyIconÚ_Frame__createMenusÚiconizedÚfindDlgZFindReplaceDataÚfindDataÚSetFlagsÚFR_DOWNÚBindZ	EVT_CLOSEÚOnCloseZEVT_ICONIZEÚ	OnIconize)	ÚselfÚparentÚidÚtitleÚposÚsizeÚstyler
   r	   © r   ú*lib/python3.7/site-packages/wx/py/frame.pyr   A   s    

zFrame.__init__c             C   s   |  ¡ | _dS )zEvent handler for Iconize.N)Z
IsIconizedr   )r   Úeventr   r   r   r   V   s    zFrame.OnIconizec             C   s   |   ¡  dS )zEvent handler for closing.N)ÚDestroy)r   r    r   r   r   r   [   s    zFrame.OnClosec             C   sè  t  ¡  }| _| tdd¡ | tdd¡ | ¡  | tdd¡ | tdd¡ | ¡  | t	d	d
¡ | t
dd¡ | jdkrŠ| tdd¡ | ¡  | tdd¡ | ¡  | tdd¡ | ¡  | tdd¡ t  ¡  }| _| tdd¡ | tdd¡ | ¡  | tdd¡ | tdd¡ | tdd¡ | td d!¡ | td"d#¡ | ¡  | td$d%¡ | td&d'¡ | ¡  | td(d)¡ | td*d+¡ | td,d-¡ | td.d/¡ t  ¡  }| _| td0d1t j ¡ | t!d2d3t j ¡ | t"d4d5¡ t#| d6ƒr| t$d7d8t j ¡ | jd9d:gkr(| t%d;d<t j ¡ t  ¡  }| _&| t'd=d>t j ¡ | t(d?d@t j ¡ | t)dAdBt j ¡ | t*dCdDt j ¡ t  ¡  }| _+| t,dEdFt j ¡ | t-dGdHt j ¡ t  ¡  }| _.| /| j&dIdJ¡ | /| j+dKdL¡ | ¡  t  ¡ | _0| j0 t1dMdNt j ¡ | j0 t2dOdP¡ | j0 t3dQdR¡ | /| j0dSdT¡ t  ¡ | _4| j4 t5dUdVt j ¡ | j4 t6dWdX¡ | jdkr‚| j4 t7dYdZt j ¡ | /| j4d[d\¡ t  ¡ | _8| jdkr¼| j8 t9d]d^t j ¡ | jd:krÜ| j8 t:d_d`t j ¡ | j8 t;dadbt j ¡ | j8 t<dcdd¡ | j8 t=dedf¡ | /| j8dgdh¡ t  ¡  }| _>| t?didj¡ | ¡  | t@dkdl¡ t  A¡  }| _B| | jdm¡ | | jdn¡ | | jdo¡ | | j.dp¡ | | j>dq¡ |  C|¡ | jDt jE| jFtdr | jDt jE| jGtdr | jDt jE| jHtdr | jDt jE| jItdr | jDt jE| jJt	dr | jDt jE| jKt
dr | jDt jE| jLtdr | jDt jE| jMtdr | jDt jE| jNtdr | jDt jE| jOtdr | jDt jE| jPtdr | jDt jE| jQtdr | jDt jE| jRtdr | jDt jE| jStdr | jDt jE| jTtdr | jDt jE| jUtdr | jDt jE| jVtdr | jDt jE| jWtdr | jDt jE| jXtdr | jDt jE| jYtdr | jDt jE| jZt@dr | jDt jE| j[t?dr | jDt jE| j\t'dr | jDt jE| j]t(dr | jDt jE| j^t)dr | jDt jE| j_t*dr | jDt jE| j`t,dr | jDt jE| jat-dr | jDt jE| jbtdr | jDt jE| jct"dr | jDt jE| jdt!dr | jDt jE| jet9dr | jDt jE| jft:dr | jDt jE| jgt;dr | jDt jE| jht1dr | jDt jE| jit2dr | jDt jE| jjt3dr | jDt jE| jkt<dr | jDt jE| jlt=dr | jDt jE| jmt6dr | jDt jE| jnt5dr | jDt jE| jot7dr | jDt jE| jptdr | jDt jE| jqtdr | jDt jE| jrtdr | jDt jE| jst$dr | jDt jE| jtt%dr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvt	dr | jDt ju| jvt
dr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvt'dr | jDt ju| jvt(dr | jDt ju| jvt)dr | jDt ju| jvt*dr | jDt ju| jvt,dr | jDt ju| jvt-dr | jDt ju| jvtdr | jDt ju| jvt!dr | jDt ju| jvt9dr | jDt ju| jvt:dr | jDt ju| jvt;dr | jDt ju| jvt<dr | jDt ju| jvt=dr | jDt ju| jvt5dr | jDt ju| jvt7dr | jDt ju| jvt1dr | jDt ju| jvt2dr | jDt ju| jvt3dr | jDt ju| jvt6dr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvtdr | jDt ju| jvt$dr | jDt ju| jvt%dr |  Dt jw| jx¡ |  Dt jy| jq¡ |  Dt jz| jq¡ |  Dt j{| j|¡ d S )sNz&New 	Ctrl+NzNew filez&Open... 	Ctrl+Oz	Open filez&Revert 	Ctrl+RzRevert to last saved versionz&Close 	Ctrl+Wz
Close filez&Save... 	Ctrl+Sz	Save filezSave &As 	Ctrl+Shift+SzSave file with new name)ÚPySlicesÚSymPySliceszSave A Cop&yz9Save a copy of the file without changing the current filez&Print... 	Ctrl+Pz
Print filez&Update Namespace 	Ctrl+Shift+Nz0Update namespace for autocompletion and calltipszE&xit	Ctrl+QzExit Programz&Undo 	Ctrl+ZzUndo the last actionz&Redo 	Ctrl+YzRedo the last undone actionzCu&t 	Ctrl+XzCut the selectionz&Copy 	Ctrl+CzCopy the selectionzCop&y Plus 	Ctrl+Shift+Cz&Copy the selection - retaining promptsz&Paste 	Ctrl+VzPaste from clipboardzPast&e Plus 	Ctrl+Shift+VzPaste and run commandszCle&arzDelete the selectionzSelect A&ll 	Ctrl+AzSelect all textzE&mpty Buffer...z*Delete all the contents of the edit bufferz&Find Text... 	Ctrl+Fz"Search for text in the edit bufferzFind &Next 	Ctrl+Gz%Find next instance of the search textzFind Pre&vious 	Ctrl+Shift+Gz)Find previous instance of the search textz&Wrap Lines	Ctrl+Shift+WzWrap lines at right edgez&Show Line Numbers	Ctrl+Shift+LzShow Line Numbersz&Toggle Maximize	F11zMaximize/Restore ApplicationÚToggleToolszShow &Tools	F4z Show the filling and other toolsr"   r#   z&Hide Folding MarginzHide Folding Marginz"Show &Auto Completion	Ctrl+Shift+AzShow auto completion listz&Include &Magic Attributes	Ctrl+Shift+Mz9Include attributes visible to __getattr__ and __setattr__z(Include Single &Underscores	Ctrl+Shift+Uz1Include attibutes prefixed by a single underscorez(Include &Double Underscores	Ctrl+Shift+Dz1Include attibutes prefixed by a double underscorezShow Call &Tips	Ctrl+Shift+Tz4Show call tips with argument signature and docstringz&Insert Call Tips	Ctrl+Shift+Iz&Insert Call Tipsz&Auto CompletionzAuto Completion Optionsz
&Call TipszCall Tip Optionsz&Autosave Historyz#Automatically save history on closez&Save History NowzSave historyz&Clear History zClear historyz&HistoryzHistory OptionszE&xecute Startup ScriptzExecute Startup Scriptz&Edit Startup Script...zEdit Startup Scriptz&Show PySlices TutorialzShow PySlices Tutorialz&StartupzStartup Optionsz&Enable Shell ModezEnable Shell Modez8&Enable "Auto-Sympy" Conversions for Undefined VariableszEnable "Auto-Sympy" Conversionsz&Auto Save Settingsz$Automatically save settings on closez&Save SettingszSave settings nowz&Revert to defaultzRevert to the default settingsz	&SettingszSettings Optionsz&Help	F1zHelp!z	&About...zAbout this programz&Filez&Editz&Viewz&Optionsz&Help)r   )}r   ZMenuZfileMenuZAppendÚID_NEWÚID_OPENZAppendSeparatorÚ	ID_REVERTÚID_CLOSEÚID_SAVEÚ	ID_SAVEASr
   ÚID_SAVEACOPYÚID_PRINTÚID_NAMESPACEÚID_EXITZeditMenuÚID_UNDOÚID_REDOÚID_CUTÚID_COPYÚID_COPY_PLUSÚID_PASTEÚID_PASTE_PLUSÚID_CLEARÚID_SELECTALLÚID_EMPTYBUFFERÚID_FINDÚID_FINDNEXTÚID_FINDPREVIOUSZviewMenuÚID_WRAPZ
ITEM_CHECKÚID_SHOW_LINENUMBERSÚID_TOGGLE_MAXIMIZEÚhasattrÚID_SHOWTOOLSÚID_HIDEFOLDINGMARGINZautocompMenuÚID_AUTOCOMP_SHOWÚID_AUTOCOMP_MAGICÚID_AUTOCOMP_SINGLEÚID_AUTOCOMP_DOUBLEZcalltipsMenuÚID_CALLTIPS_SHOWÚID_CALLTIPS_INSERTZoptionsMenuZAppendSubMenuZhistoryMenuÚID_SAVEHISTORYÚID_SAVEHISTORYNOWÚID_CLEARHISTORYZstartupMenuÚID_EXECSTARTUPSCRIPTÚID_EDITSTARTUPSCRIPTÚID_SHOWPYSLICESTUTORIALZsettingsMenuÚID_ENABLESHELLMODEÚID_ENABLEAUTOSYMPYÚID_AUTO_SAVESETTINGSÚID_SAVESETTINGSÚID_DELSETTINGSFILEZhelpMenuÚID_HELPÚID_ABOUTZMenuBarZmenuBarZ
SetMenuBarr   ZEVT_MENUÚ	OnFileNewÚ
OnFileOpenÚOnFileRevertÚOnFileCloseÚ
OnFileSaveÚOnFileSaveAsÚOnFileSaveACopyÚOnFileUpdateNamespaceÚOnFilePrintÚOnExitÚOnUndoÚOnRedoÚOnCutÚOnCopyÚ
OnCopyPlusÚOnPasteÚOnPastePlusÚOnClearÚOnSelectAllÚOnEmptyBufferÚOnAboutÚOnHelpÚOnAutoCompleteShowÚOnAutoCompleteMagicÚOnAutoCompleteSingleÚOnAutoCompleteDoubleÚOnCallTipsShowÚOnCallTipsInsertÚOnWrapÚOnToggleMaximizeÚOnShowLineNumbersÚOnEnableShellModeÚOnEnableAutoSympyÚOnAutoSaveSettingsÚOnSaveHistoryÚOnSaveHistoryNowÚOnClearHistoryÚOnSaveSettingsÚOnDelSettingsFileÚOnEditStartupScriptÚOnExecStartupScriptÚOnShowPySlicesTutorialÚ
OnFindTextÚ
OnFindNextÚOnFindPreviousÚOnToggleToolsÚOnHideFoldingMarginZEVT_UPDATE_UIÚOnUpdateMenuZEVT_ACTIVATEÚ
OnActivateZEVT_FINDZEVT_FIND_NEXTZEVT_FIND_CLOSEÚOnFindClose)r   ÚmÚbr   r   r   Z__createMenus`   sÒ   























zFrame.__createMenusc             C   s.   t j ¡ }t|dƒr*| ¡ |_| |j¡ d S )NÚlineNumbers)r   ÚWindowÚ	FindFocusr?   Ú	IsCheckedr‰   ZsetDisplayLineNumbers)r   r    Úwinr   r   r   rs   ^  s    


zFrame.OnShowLineNumbersc             C   s   |   |  ¡  ¡ d S )N)ZMaximizeÚIsMaximized)r   r    r   r   r   rr   d  s    zFrame.OnToggleMaximizec             C   s   |   ¡  d S )N)Ú	bufferNew)r   r    r   r   r   rU   g  s    zFrame.OnFileNewc             C   s   |   ¡  d S )N)Ú
bufferOpen)r   r    r   r   r   rV   j  s    zFrame.OnFileOpenc             C   s   |   ¡  d S )N)ÚbufferRevert)r   r    r   r   r   rW   m  s    zFrame.OnFileRevertc             C   s   |   ¡  d S )N)ÚbufferClose)r   r    r   r   r   rX   p  s    zFrame.OnFileClosec             C   s   |   ¡  d S )N)Ú
bufferSave)r   r    r   r   r   rY   s  s    zFrame.OnFileSavec             C   s   |   ¡  d S )N)ÚbufferSaveAs)r   r    r   r   r   rZ   v  s    zFrame.OnFileSaveAsc             C   s   |   ¡  d S )N)ÚbufferSaveACopy)r   r    r   r   r   r[   y  s    zFrame.OnFileSaveACopyc             C   s   |   ¡  d S )N)ÚupdateNamespace)r   r    r   r   r   r\   |  s    zFrame.OnFileUpdateNamespacec             C   s   |   ¡  d S )N)ÚbufferPrint)r   r    r   r   r   r]     s    zFrame.OnFilePrintc             C   s   |   d¡ d S )NF)ZClose)r   r    r   r   r   r^   ‚  s    zFrame.OnExitc             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   ZUndo)r   r    r   r   r   r   r_   …  s    
zFrame.OnUndoc             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   ZRedo)r   r    r   r   r   r   r`   ‰  s    
zFrame.OnRedoc             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   ZCut)r   r    r   r   r   r   ra     s    
zFrame.OnCutc             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   ZCopy)r   r    r   r   r   r   rb   ‘  s    
zFrame.OnCopyc             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   ÚCopyWithPrompts)r   r    r   r   r   r   rc   •  s    
zFrame.OnCopyPlusc             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   ZPaste)r   r    r   r   r   r   rd   ™  s    
zFrame.OnPastec             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   ÚPasteAndRun)r   r    r   r   r   r   re     s    
zFrame.OnPastePlusc             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   ZClear)r   r    r   r   r   r   rf   ¡  s    
zFrame.OnClearc             C   s`   t j ¡ }t  | ddt jt jB t jB ¡}| ¡ }| ¡  |t j	kr\| 
¡  t|dƒr\| ¡  d S )NzFAre you sure you want to clear the edit buffer,
deleting all the text?zEmpty BufferÚprompt)r   rŠ   r‹   ÚMessageDialogÚOKÚCANCELÚICON_QUESTIONÚ	ShowModalr!   ÚID_OKÚClearAllr?   rš   )r   r    r   ÚdÚanswerr   r   r   rh   ¥  s    


zFrame.OnEmptyBufferc             C   s   t j ¡ }| ¡  d S )N)r   rŠ   r‹   Ú	SelectAll)r   r    r   r   r   r   rg   ²  s    
zFrame.OnSelectAllc             C   s4   d}d}t  | ||t jt jB ¡}| ¡  | ¡  dS )zDisplay an About window.ZAboutzYour message here.N)r   r›   rœ   ÚICON_INFORMATIONrŸ   r!   )r   r    r   ÚtextÚdialogr   r   r   ri   ¶  s    
zFrame.OnAboutc             C   s4   d}d}t  | ||t jt jB ¡}| ¡  | ¡  dS )zDisplay a Help window.ZHelpz(Type 'shell.help()' in the shell window.N)r   r›   rœ   r¥   rŸ   r!   )r   r    r   r¦   r§   r   r   r   rj   ¿  s    
zFrame.OnHelpc             C   s   t j ¡ }| ¡ |_d S )N)r   rŠ   r‹   rŒ   ÚautoComplete)r   r    r   r   r   r   rk   È  s    
zFrame.OnAutoCompleteShowc             C   s   t j ¡ }| ¡ |_d S )N)r   rŠ   r‹   rŒ   ÚautoCompleteIncludeMagic)r   r    r   r   r   r   rl   Ì  s    
zFrame.OnAutoCompleteMagicc             C   s   t j ¡ }| ¡ |_d S )N)r   rŠ   r‹   rŒ   ÚautoCompleteIncludeSingle)r   r    r   r   r   r   rm   Ð  s    
zFrame.OnAutoCompleteSinglec             C   s   t j ¡ }| ¡ |_d S )N)r   rŠ   r‹   rŒ   ÚautoCompleteIncludeDouble)r   r    r   r   r   r   rn   Ô  s    
zFrame.OnAutoCompleteDoublec             C   s   t j ¡ }| ¡ |_d S )N)r   rŠ   r‹   rŒ   ÚautoCallTip)r   r    r   r   r   r   ro   Ø  s    
zFrame.OnCallTipsShowc             C   s   t j ¡ }| ¡ |_d S )N)r   rŠ   r‹   rŒ   ÚcallTipInsert)r   r    r   r   r   r   rp   Ü  s    
zFrame.OnCallTipsInsertc             C   s,   t j ¡ }| | ¡ ¡ t  d| jj¡ d S )Nr   )r   rŠ   r‹   ZSetWrapModerŒ   Z	CallLaterÚshellZEnsureCaretVisible)r   r    r   r   r   r   rq   à  s    
zFrame.OnWrapc             C   s   |  ¡ | _d S )N)rŒ   ÚautoSaveHistory)r   r    r   r   r   rw   å  s    zFrame.OnSaveHistoryc             C   s   |   ¡  d S )N)ÚSaveHistory)r   r    r   r   r   rx   è  s    zFrame.OnSaveHistoryNowc             C   s   | j  ¡  d S )N)r®   ZclearHistory)r   r    r   r   r   ry   ë  s    zFrame.OnClearHistoryc             C   s   |  ¡ | _d S )N)rŒ   ÚenableShellMode)r   r    r   r   r   rt   î  s    zFrame.OnEnableShellModec             C   s   |  ¡ | _d S )N)rŒ   ÚenableAutoSympy)r   r    r   r   r   ru   ñ  s    zFrame.OnEnableAutoSympyc             C   s   |  ¡ | _d S )N)rŒ   ÚhideFoldingMargin)r   r    r   r   r   rƒ   ô  s    zFrame.OnHideFoldingMarginc             C   s   |  ¡ | _d S )N)rŒ   ÚautoSaveSettings)r   r    r   r   r   rv   ÷  s    zFrame.OnAutoSaveSettingsc             C   s   |   ¡  d S )N)ÚDoSaveSettings)r   r    r   r   r   rz   ú  s    zFrame.OnSaveSettingsc             C   sX   | j d k	rTt | ddtjtjB tjB ¡}| ¡ }| ¡  |tjkrT| j  	¡  |  
¡  d S )Nz`Do you want to revert to the default settings?
A restart is needed for the change to take effectÚWarning)Úconfigr   r›   rœ   r   rž   rŸ   r!   r    Z	DeleteAllÚLoadSettings)r   r    r¢   r£   r   r   r   r{   ý  s    


zFrame.OnDelSettingsFilec             C   s   t | dƒr|  ¡  d S )NÚEditStartupScript)r?   r¹   )r   r    r   r   r   r|   
  s    
zFrame.OnEditStartupScriptc             C   s   |  ¡ | _| jdd d S )NT)Úforce)rŒ   ÚexecStartupScriptÚSaveSettings)r   r    r   r   r   r}     s    
zFrame.OnExecStartupScriptc             C   s   |  ¡ | _| jdd d S )NT)rº   )rŒ   ÚshowPySlicesTutorialr¼   )r   r    r   r   r   r~     s    
zFrame.OnShowPySlicesTutorialc             C   sd   | j d k	rd S tj ¡ }| jdkr:t || jdtj¡| _ nt || jdtjtjB ¡| _ | j  	¡  d S )Nr   ZFindzFind & Replace)
r   r   rŠ   r‹   r
   ZFindReplaceDialogr   ZFR_NOWHOLEWORDZFR_REPLACEDIALOGZShow)r   r    r   r   r   r   r     s    




zFrame.OnFindTextFc             C   s¼   |r.| j  ¡ tj@ r.| j  | j  ¡ tjA ¡ n,|sZ| j  ¡ tj@ sZ| j  | j  ¡ tjA ¡ | j  ¡ sr|  |¡ d S t|tjƒrŠ| j	 
¡ }n
tj ¡ }| | j | j	¡ | j	d k	r¸|  d ¡ d S )N)r   ZGetFlagsr   r   r   ZGetFindStringr   Ú
isinstanceZFindDialogEventr   Z	GetParentrŠ   r‹   Ú
DoFindNextr†   )r   r    Úbackwardr   r   r   r   r€   "  s    



zFrame.OnFindNextc             C   s   | j |dd d S )NT)rÀ   )r€   )r   r    r   r   r   r   3  s    zFrame.OnFindPreviousc             C   s   | j  ¡  d | _ d S )N)r   r!   )r   r    r   r   r   r†   6  s    
zFrame.OnFindClosec             C   s   |   ¡  d S )N)r$   )r   r    r   r   r   r‚   :  s    zFrame.OnToggleToolsc             C   sî  t j ¡ }| ¡ }| d¡ yª|tkr<| t| dƒ¡ nŠ|tkrX| t| dƒ¡ nn|tkr|| t| dƒot|  	¡ ¡ nJ|t
kr | t| dƒo˜|  	¡ ¡ n&|tkrÄ| t| dƒo¼|  ¡ ¡ n|tkrè| t| dƒoà|  	¡ ¡ nÞ|tkr| t| dƒo|  	¡ ¡ n¶|tkr8| t| d	ƒo0|  	¡ ¡ nŽ|tkr`| t| d
ƒoX|  	¡ ¡ nf|tkr|| | ¡ ¡ nJ|tkr˜| | ¡ ¡ n.|tkr´| | ¡ ¡ n|tkrÐ| | ¡ ¡ nö|tkrø| | ¡ oðt|dƒ¡ nÎ|tkr| | ¡ ¡ n²|tkr<| | ¡ o4t|dƒ¡ nŠ|tkrX| | ¡ ¡ nn|tkrv| t|dƒ¡ nP|tkr | t|dƒo˜|  ¡  ¡ n&|t!krº| "|j#¡ n|t$krÔ| "|j%¡ nò|t&krî| "|j'¡ nØ|t(kr| "|j)¡ n¾|t*kr"| "|j+¡ n¤|t,kr<| "|j-¡ nŠ|t.krX| "| /¡ ¡ nn|t0krr| "|j1¡ nT|t2krœ| "| j3¡ | | j4dk	¡ n*|t5krÆ| "| j6¡ | | j4dk	¡ n |t7krð| "| j8¡ | | j4dk	¡ nÖ|t9kr| | j4dk	ot| dƒ¡ n¬|t:kr8| | j4dk	¡ nŽ|t;krb| "| j<¡ | | j4dk	¡ nd|t=krŒ| "| j>¡ | | j4dk	¡ n:|t?kr¶| "| j@¡ | | jAdk	¡ n|tBkrÞ| | jAdk	oØt| dƒ¡ nè|tCkrú| | jAdk	¡ nÌ|tDkr&| t| dƒ¡ | | jAdk	¡ n |tEkrB| t|dƒ¡ n„|tFkr^| t|dƒ¡ nh|tGkrz| t|dƒ¡ nL|tHkr”| "|  I¡ ¡ n2|tJkr¼| "| jK¡ | | j4dk	¡ n
| d¡ W n  tLk
rè   | d¡ Y nX dS )z6Update menu items based on current status and context.Tr   r   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   r¤   r¡   Nrµ   r°   r¹   r¿   F)Mr   rŠ   r‹   ZGetIdZEnabler%   r?   r&   r'   Z	hasBufferr(   r)   ÚbufferHasChangedr*   r+   r-   r,   r/   ZCanUndor0   ZCanRedor1   ZCanCutr2   ZCanCopyr3   r4   ZCanPaster5   r6   r7   r8   ZGetReadOnlyrB   ZCheckr¨   rC   r©   rD   rª   rE   r«   rF   r¬   rG   r­   r<   ZGetWrapModer=   r‰   rN   r±   r·   rO   r²   rP   r´   rQ   rR   rK   r»   rM   r½   rH   r¯   ÚdataDirrI   rJ   rL   r9   r:   r;   r@   Z
ToolsShownrA   r³   ÚAttributeError)r   r    r   r   r   r   r   r„   >  sÜ    














 























zFrame.OnUpdateMenuc             C   s8   |  ¡ s,tj ¡ }t|dƒr,| ¡ r,| ¡  | ¡  dS )zw
        Event Handler for losing the focus of the Frame. Should close
        Autocomplete listbox, if shown.
        ÚAutoCompActiveN)Z	GetActiver   rŠ   r‹   r?   rÄ   ZAutoCompCancelZSkip)r   r    r   r   r   r   r…   »  s
    
zFrame.OnActivatec             C   sP   t  | dd¡| dd¡¡}t  | dd¡| dd¡¡}|  |¡ |  |¡ dS )z@Called by derived classes to load settings specific to the FramezWindow/PosXr   zWindow/PosYzWindow/WidthzWindow/HeightN)r   ZPointZReadIntZSizeZSetSizeZMove)r   r·   r   r   r   r   r   r¸   Ë  s    
zFrame.LoadSettingsc             C   sZ   | j sV|  ¡ sV|  ¡ \}}| d|¡ | d|¡ |  ¡ \}}| d|¡ | d|¡ dS )zFCalled by derived classes to save Frame settings to a wx.Config objectzWindow/WidthzWindow/HeightzWindow/PosXzWindow/PosYN)r   rŽ   ZGetSizeZWriteIntZGetPosition)r   r·   ÚwÚhZpxÚpyr   r   r   r¼   ×  s    zFrame.SaveSettings)F)@Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ZDefaultPositionZDefaultSizeZDEFAULT_FRAME_STYLEr   r   r   r   rs   rr   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rh   rg   ri   rj   rk   rl   rm   rn   ro   rp   rq   rw   rx   ry   rt   ru   rƒ   rv   rz   r{   r|   r}   r~   r   r€   r   r†   r‚   r„   r…   r¸   r¼   r   r   r   r   r   =   sz      		
}r   c               @   sZ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚShellFrameMixinz 
    A mix-in class for frames that will have a Shell or a Crust window
    and that want to add history, startupScript and other common
    functionality.
    c             C   s¼   || _ || _tj d¡| _| js8| jr8tj | jd¡| _d| _d| _	d| _
d| _d| _d| _d| _| j r¸| j  dd¡| _
| j  dd¡| _| j  dd¡| _| j  dd¡| _| j  d	d¡| _d S )
NZPYTHONSTARTUPZstartupFTzOptions/ExecStartupScriptzOptions/ShowPySlicesTutorialzOptions/EnableShellModezOptions/EnableAutoSympyzOptions/HideFoldingMargin)r·   rÂ   ÚosÚenvironÚgetÚstartupScriptÚpathÚjoinr´   r¯   r»   r½   r±   r²   r³   ÚReadBool)r   r·   rÂ   r   r   r   r   î  s$    zShellFrameMixin.__init__c             C   sz   ddl }d}|jjj}|jjj| ||dd}| d|j|j	|j
¡}| ¡ d  |¡ | ¡ d  d¡ | ¡  | ¡  dS )zDisplay a Help window.r   NzHelp on key bindings)i¼  i  )r   é
   )Zwx.lib.dialogsrÇ   r®   Z	HELP_TEXTÚlibZdialogsZScrolledMessageDialogZFontZFONTFAMILY_TELETYPEZFONTSTYLE_NORMALZFONTWEIGHT_NORMALZGetChildrenZSetFontZSetInsertionPointrŸ   r!   )r   r    r   r   r¦   ÚdlgZfntr   r   r   rj   
  s    
zShellFrameMixin.OnHelpc             C   s†   | j d k	r‚| j  dd¡| _| j  dd¡| _| j  dd¡| _| j  dd¡| _| j  dd¡| _| j  dd¡| _| j  d	d¡| _|  	¡  d S )
NzOptions/AutoSaveSettingsFzOptions/ExecStartupScriptTzOptions/AutoSaveHistoryzOptions/ShowPySlicesTutorialzOptions/EnableShellModezOptions/EnableAutoSympyzOptions/HideFoldingMargin)
r·   rÓ   r´   r»   r¯   r½   r±   r²   r³   ÚLoadHistory)r   r   r   r   r¸     s    
zShellFrameMixin.LoadSettingsFc             C   s–   | j d k	r’| j  d| j¡ | js$|r„| j  d| j¡ | j  d| j¡ | j  d| j¡ | j  d| j¡ | j  d| j¡ | j  d| j¡ | jr’|  	¡  d S )NzOptions/AutoSaveSettingszOptions/AutoSaveHistoryzOptions/ExecStartupScriptzOptions/ShowPySlicesTutorialzOptions/EnableShellModezOptions/EnableAutoSympyzOptions/HideFoldingMargin)
r·   Z	WriteBoolr´   r¯   r»   r½   r±   r²   r³   r°   )r   rº   r   r   r   r¼   /  s$    

zShellFrameMixin.SaveSettingsc          
      s–   | j r’yTd‰ d ‡ fdd„| jjD ƒ¡}tj | j d¡}t|dƒ}| |¡ W d Q R X W n6   t 	| ddtj
tjB ¡}| ¡  | ¡  ‚ Y nX d S )	Nzutf-8s    
c                s   g | ]}|  ˆ ¡‘qS r   )Úencode)Ú.0rÆ   )Úencr   r   ú
<listcomp>K  s   z/ShellFrameMixin.SaveHistory.<locals>.<listcomp>ÚhistoryÚwbzError saving history file.ÚError)rÂ   rÒ   r®   rÜ   rÍ   rÑ   ÚopenÚwriter   r›   ÚICON_EXCLAMATIONrœ   rŸ   r!   )r   ÚhistÚnameÚfr¢   r   )rÚ   r   r°   G  s    zShellFrameMixin.SaveHistoryc          
      sÄ   | j rÀtj | j d¡}tj |¡rÀyXt|dƒ}| ¡ }W d Q R X d‰ ‡ fdd„| d¡D ƒ}|| j_	t
jd| jj	d W nD   d	d l}| ¡  t | d
dtjtjB ¡}| ¡  | ¡  Y nX d S )NrÜ   Úrbzutf-8c                s   g | ]}|  ˆ ¡‘qS r   )Údecode)rÙ   rÆ   )rÚ   r   r   rÛ   `  s    z/ShellFrameMixin.LoadHistory.<locals>.<listcomp>s    
zShell.loadHistory)ÚsignalrÜ   r   zError loading history file.rÞ   )rÂ   rÍ   rÑ   rÒ   Úexistsrß   ÚreadÚsplitr®   rÜ   r   ÚsendÚ	tracebackÚ	print_excr   r›   rá   rœ   rŸ   r!   )r   rã   rä   râ   rì   r¢   r   )rÚ   r   r×   W  s$    zShellFrameMixin.LoadHistoryc             C   s   dS )NTr   )r   r   r   r   rÁ   n  s    z ShellFrameMixin.bufferHasChangedc          
   C   s´   dd l }t ¡  ¡ }|d | d¡ }tjdd|ddtjtjB d}|sLd S | j 	¡ }y$t
|d	ƒ}| |¡ W d Q R X W n4   t | d
dtjtjB ¡}| ¡  | ¡  Y nX d S )Nr   ú-z%Y%m%d-%H%M.pyzSave File AsZSavingrÇ   z*.py)Zdefault_filenameZdefault_extensionZwildcardÚflagsrÅ   zError saving sessionrÞ   )Útimer   ZGetAppZ
GetAppNameZstrftimeZFileSelectorZSAVEZOVERWRITE_PROMPTr®   ÚGetTextrß   rà   r›   rœ   Z
ICON_ERRORrŸ   r!   )r   rð   ZappnameÚdefaultÚfileNamer¦   rä   r¢   r   r   r   r“   r  s&    

zShellFrameMixin.bufferSavec          
   C   sÎ   t j | j¡r@dd l}|j| jdd dd}| ¡ }W d Q R X nd}t| | j|ƒ}| ¡ t	j
krÊ| ¡ }y,t| jdƒ}| | d¡¡ W d Q R X W n4   t	 | ddt	jt	jB ¡}| ¡  | ¡  Y nX d S )	Nr   Úrzutf-8)ÚnewlineÚencodingr   rÝ   zError saving startup file.rÞ   )rÍ   rÑ   rè   rÐ   Úiorß   ré   ÚEditStartupScriptDialogrŸ   r   r    rñ   rà   rØ   r›   rá   rœ   r!   )r   r÷   Zfidr¦   rÖ   rä   r¢   r   r   r   r¹   ”  s     z!ShellFrameMixin.EditStartupScriptN)F)rÈ   rÉ   rÊ   rË   r   rj   r¸   r¼   r°   r×   rÁ   r“   r¹   r   r   r   r   rÌ   è  s   
"rÌ   c               @   s   e Zd Zdd„ Zdd„ ZdS )rø   c             C   sj  t jj| |ddt jt jB d t  | dd¡}t j| d|t jd}t 	| ¡| _
| j
 |¡ t  | j
j¡ t  | t j¡}t  | t j¡}t  t j¡}t  t j¡}	|	j|t jd |	 d¡ |	 |d	¡ | |	d
t jt jB d¡ | | j
d	t jt jB t jB d¡ t  t j¡}
|
 dd	¡ |
 |¡ |
 dd	¡ |
 |¡ |
 dd	¡ | |
d
t jt jB d¡ |  |¡ |  ¡  d S )N)i©  i^  zEdit Startup Script)r   r   r   r   zPath:)r   )Úflag)é   rú   r   r   rÔ   )r   ÚDialogr   ZDEFAULT_DIALOG_STYLEZRESIZE_BORDERZ
StaticTextZTextCtrlZTE_READONLYr   Z
EditWindowÚeditorZSetTextZ	CallAfterZSetFocusZButtonr    Z	ID_CANCELZBoxSizerZVERTICALZ
HORIZONTALZAddZALIGN_CENTER_VERTICALZEXPANDZALLZLEFTZRIGHTZSetSizerZLayout)r   r   ró   r¦   ZpstZptxÚokZcancelZ	mainSizerZpthSizerZbtnSizerr   r   r   r   ­  s4    
 


z EditStartupScriptDialog.__init__c             C   s
   | j  ¡ S )N)rü   rñ   )r   r   r   r   rñ   Ñ  s    zEditStartupScriptDialog.GetTextN)rÈ   rÉ   rÊ   r   rñ   r   r   r   r   rø   ¬  s   $rø   )=rË   Ú
__author__r   rÍ   Úversionr   r   r   r   r%   r&   r'   r(   r)   r*   r,   r.   r/   r0   r1   r2   r4   r6   r7   ZNewIdRefr8   rT   rS   rB   rC   rD   rE   rF   rG   r3   r-   r5   r<   r>   r=   rN   rO   rP   r+   rH   rI   rJ   rQ   rR   rL   rK   rM   r9   r:   r;   r@   rA   r   rÌ   rû   rø   r   r   r   r   Ú<module>   s|        0 E