î
\á[\_!  ã               @   sÔ   d  Z  d d l Z d d l Z d d l m Z d d l Z d d „  Z d d „  Z d a 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 S)z5
A number of functions that enhance IDLE on Mac OSX.
é    N)Úpathc               C   s   t  j d t d d ƒt ƒ  S)Nz/runningAsOSXApp() is deprecated, use isAquaTk()Ú
stacklevelé   )ÚwarningsÚwarnÚDeprecationWarningÚisAquaTk© r	   r	   ú+/usr/lib/python3.4/idlelib/macosxSupport.pyÚrunningAsOSXApp	   s    	r   c             C   s   t  j d t d d ƒt ƒ  S)Nz4isCarbonAquaTk(root) is deprecated, use isCarbonTk()r   r   )r   r   r   Ú
isCarbonTk)Úrootr	   r	   r
   ÚisCarbonAquaTk   s    	r   c             C   sˆ   t  j d k r~ |  j j d d ƒ } d | k r9 d a q„ d | k rN d a q„ d |  j j d	 d
 d ƒ k ru d a q„ d a n d a d S)zl
    Initializes OS X Tk variant values for
    isAquaTk(), isCarbonTk(), isCocoaTk(), and isXQuartz().
    ÚdarwinÚtkZwindowingsystemZx11ÚxquartzZaquaÚotherZAppKitZwinfoZserverÚ.ÚcocoaÚcarbonN)ÚsysÚplatformr   ÚcallÚ_tk_type)r   Zwsr	   r	   r
   Ú_initializeTkVariantTests   s    				r   c               C   s(   t  d k	 s t ‚ t  d k p' t  d k S)zK
    Returns True if IDLE is using a native OS X Tk (Cocoa or Carbon).
    Nr   r   )r   ÚAssertionErrorr	   r	   r	   r
   r   (   s    r   c               C   s   t  d k	 s t ‚ t  d k S)zb
    Returns True if IDLE is using a Carbon Aqua Tk (instead of the
    newer Cocoa Aqua Tk).
    Nr   )r   r   r	   r	   r	   r
   r   /   s    r   c               C   s   t  d k	 s t ‚ t  d k S)z8
    Returns True if IDLE is using a Cocoa Aqua Tk.
    Nr   )r   r   r	   r	   r	   r
   Ú	isCocoaTk7   s    r   c               C   s   t  d k	 s t ‚ t  d k S)z7
    Returns True if IDLE is using an OS X X11 Tk.
    Nr   )r   r   r	   r	   r	   r
   Ú	isXQuartz>   s    r   c             C   sC   t  ƒ  r; |  j j d d ƒ } | d k r. d Sd j | ƒ Sd Sd S)	a2  
    Returns a string warning message if the Tk version in use appears to
    be one known to cause problems with IDLE.
    1. Apple Cocoa-based Tk 8.5.7 shipped with Mac OS X 10.6 is unusable.
    2. Apple Cocoa-based Tk 8.5.9 in OS X 10.7 and 10.8 is better but
        can still crash unexpectedly.
    ÚinfoÚ
patchlevelú8.5.7ú8.5.9Fz†WARNING: The version of Tcl/Tk ({0}) in use may be unstable.\nVisit http://www.python.org/download/mac/tcltk/ for current information.N)r    r!   )r   r   r   Úformat)r   r   r	   r	   r
   ÚtkVersionWarningE   s    		r#   c                s&   ‡  f d d †  } |  j  d | ƒ d S)z¢
    This ensures that the application will respond to open AppleEvents, which
    makes is feasible to use IDLE as the default application for python files.
    c                 s"   x |  D] } ˆ  j  | ƒ q Wd  S)N)Úopen)ÚargsÚfn)Úflistr	   r
   Ú
doOpenFile^   s    z'addOpenEventSupport.<locals>.doOpenFilez::tk::mac::OpenDocumentN)Úcreatecommand)r   r'   r(   r	   )r'   r
   ÚaddOpenEventSupportY   s    r*   c             C   s3   y |  j  j d d ƒ Wn t j k
 r. Yn Xd  S)NZconsoleZhide)r   r   ÚtkinterZTclError)r   r	   r	   r
   ÚhideTkConsoleg   s    r,   c                sã  d d l  m } m } m } d d l m } m } d d l m } d d l m ‰  d d l	 m
 } | j d d d+ } | j d d d, d
 … =| j d d j d | ƒ | j d- d d d … =| j d. d d d … =| ˆ ƒ }	 ˆ j d |	 ƒ i  }
 | |	 d d ƒ|
 d <} |	 j d d d | d d ƒ | ‡  f d d † } ˆ  j | ƒ d
 ‡ f d d † } d
 ‡ ‡ f d d † } d
 ‡ f d d † } ˆ j d | ƒ ˆ j d | ƒ ˆ j d | ƒ ˆ rõˆ j d ˆ j ƒ ˆ j d ˆ j ƒ n  t ƒ  r¡| |	 d d ƒ|
 d  <} |	 j d d! d | ƒ | j j d d  d/ d
 g f ƒ ˆ j j d# ƒ } t t t | j d$ ƒ ƒ ƒ d0 k  r¡| j d d j d1 ƒ q¡n  t ƒ  rßˆ j d) | ƒ ˆ j d* | ƒ | j d2 d d =n  d
 S)3zf
    Replace the Tk root menu by something that is more appropriate for
    IDLE with an Aqua Tk.
    r   )ÚMenuÚTextr.   )ÚprepstrÚget_accelerator)ÚBindings)Ú
WindowList)ÚMultiCallCreatoré   r   é   Né   ÚmenuÚnameZwindowsZlabelZWindowZ	underlinec                sT   |  j  d ƒ } | d  k r$ d } n  | d k rC |  j d | ƒ n  ˆ  j |  ƒ d  S)NÚendr4   r   éÿÿÿÿ)ÚindexZdeleteZadd_windows_to_menu)r7   r9   )r2   r	   r
   Úpostwindowsmenu›   s    	z)overrideRootMenu.<locals>.postwindowsmenuc                s$   d d l  m } | j ˆ  d ƒ d  S)Nr   )ÚaboutDialogz
About IDLE)Úidlelibr=   ZAboutDialog)Úeventr=   )r   r	   r
   Úabout_dialog¥   s    z&overrideRootMenu.<locals>.about_dialogc                s<   d d l  m } ˆ  j ˆ _ ˆ  j ˆ _ | j ˆ d ƒ d  S)Nr   )ÚconfigDialogZSettings)r>   rA   ZinversedictZinstance_dictZConfigDialog)r?   rA   )r'   r   r	   r
   Úconfig_dialog©   s    z'overrideRootMenu.<locals>.config_dialogc                sK   d d l  m } t j t j t j t ƒ ƒ d ƒ } | j ˆ  d | ƒ d  S)Nr   )ÚtextViewzhelp.txtZHelp)r>   rC   r   ÚjoinÚabspathÚdirnameÚ__file__Z	view_file)r?   rC   r&   )r   r	   r
   Úhelp_dialog´   s    $z%overrideRootMenu.<locals>.help_dialogú<<about-idle>>ú<<open-config-dialog>>z::tk::mac::ShowPreferencesz<<close-all-windows>>ÚexitZappleZapplicationZIDLEú
About IDLEzinfo patchlevelr   é   é   é   ú_Preferences....ZtkAboutDialogz::tk::mac::ShowHelpéþÿÿÿéýÿÿÿr:   rQ   )rL   rI   )rM   rN   rO   )rP   rJ   r:   )r+   r-   r.   Zidlelib.EditorWindowr/   r0   r>   r1   r2   Zidlelib.MultiCallr3   ZmenudefsÚinsertZ	configureZadd_cascadeZregister_callbackZbindr)   Zclose_all_callbackr   r   ÚevalÚtupleÚmapÚintÚsplitÚappendr   )r   r'   r-   r.   r/   r0   r1   r3   Z	closeItemZmenubarZmenudictr7   r<   r@   rB   rH   Z	tkversionr	   )r2   r'   r   r
   ÚoverrideRootMenun   sR    	$	rZ   c             C   s>   t  |  ƒ t ƒ  r: t |  ƒ t |  | ƒ t |  | ƒ n  d S)aì  
    Perform initial OS X customizations if needed.
    Called from PyShell.main() after initial calls to Tk()

    There are currently three major versions of Tk in use on OS X:
        1. Aqua Cocoa Tk (native default since OS X 10.6)
        2. Aqua Carbon Tk (original native, 32-bit only, deprecated)
        3. X11 (supported by some third-party distributors, deprecated)
    There are various differences among the three that affect IDLE
    behavior, primarily with menus, mouse key events, and accelerators.
    Some one-time customizations are performed here.
    Others are dynamically tested throughout idlelib by calls to the
    isAquaTk(), isCarbonTk(), isCocoaTk(), isXQuartz() functions which
    are initialized here as well.
    N)r   r   r,   rZ   r*   )r   r'   r	   r	   r
   ÚsetupAppÛ   s
    
	
r[   )Ú__doc__r   r+   Úosr   r   r   r   r   r   r   r   r   r   r#   r*   r,   rZ   r[   r	   r	   r	   r
   Ú<module>   s"   m