Ë
    #´˜jÛ:  ã                   ój  — d Z ddlZddlZddlZddlZddlmZmZ ddl	m
Z
mZmZmZmZmZ ddlmZmZmZmZmZ ddl	mZ ddlmZ ddlmZ  G d	„ d
e
«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z e!dk(  r"ddl"m#Z#  e#ddd¬«       ddl$m%Z%  e%eee «       yy)a|  
Dialogs that query users and verify the answer before accepting.

Query is the generic base class for a popup dialog.
The user must either enter a valid answer or close the dialog.
Entries are validated when <Return> is entered or [Ok] is clicked.
Entries are ignored when [Cancel] or [X] are clicked.
The 'return value' is .result set to either a valid answer or None.

Subclass SectionName gets a name for a new config file section.
Configdialog uses it for new highlight theme and keybinding set names.
Subclass ModuleName gets a name for File => Open Module.
Subclass HelpSource gets menu item and path for additions to Help menu.
é    N)Ú
executableÚplatform)ÚToplevelÚ	StringVarÚ
BooleanVarÚWÚEÚS)ÚFrameÚButtonÚEntryÚLabelÚCheckbutton)Ú
filedialog)ÚFont)Ú_setup_dialogc                   ó`   ‡ — e Zd ZdZdi dddœd„Zdd„Zd„ Zdd„Zd	„ Zdd
„Z	dd„Z
ˆ fd„Zˆ xZS )ÚQueryzoBase class for getting verified answer from a user.

    For this base class, accept any non-blank string.
    Ú F©Útext0Ú
used_namesÚ_htestÚ_utestc                ó(  — || _         || _        || _        || _        t	        j
                  | |«       | j                  «        | j                  |«       | j                  |«       |s| j                  «        t        | «       | j                  dk(  r| j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j!                  «        | j#                  «        | j%                  d|j'                  «       |j)                  «       dz  | j+                  «       dz  z
  z   |j-                  «       |s'|j/                  «       dz  | j1                  «       dz  z
  nd	z   fz  «       | j3                  d
d
¬«       |s;| j5                  «        | j6                  j9                  «        | j;                  «        yy)aá  Create modal popup, return when destroyed.

        Additional subclass init must be done before this unless
        _utest=True is passed to suppress wait_window().

        title - string, title of popup dialog
        message - string, informational message to display
        text0 - initial value for entry
        used_names - names already in use
        _htest - bool, change box location when running htest
        _utest - bool, leave window hidden and not modal
        Úaquaz<Command-.>z<Key-Escape>ÚWM_DELETE_WINDOWz<Key-Return>z
<KP_Enter>z+%d+%dé   é–   F)ÚheightÚwidthN)ÚparentÚmessager   r   r   Ú__init__ÚwithdrawÚtitleÚ	transientÚgrab_setr   Ú_windowingsystemÚbindÚcancelÚprotocolÚokÚcreate_widgetsÚupdate_idletasksÚgeometryÚwinfo_rootxÚwinfo_widthÚwinfo_reqwidthÚwinfo_rootyÚwinfo_heightÚwinfo_reqheightÚ	resizableÚ	deiconifyÚentryÚ	focus_setÚwait_window)Úselfr"   r&   r#   r   r   r   r   s           úlib/python3.12/idlelib/query.pyr$   zQuery.__init__&   s²  € ð ˆŒØˆŒØˆŒ
Ø$ˆŒä×Ñ˜$ Ô'Ø�‰ŒØ�
‰
�5ÔØ�‰�vÔÙØ�M‰MŒOä�dÔØ× Ñ  FÒ*Ø�I‰I�m T§[¡[Ô1Ø�	‰	�. $§+¡+Ô.Ø�‰Ð(¨$¯+©+Ô6Ø�	‰	�. $§'¡'Ô*Ø�	‰	�, §¡Ô(à×ÑÔØ×ÑÔØ�‰ØØ×&Ñ&Ó(Ø×'Ñ'Ó)¨!Ñ+¨d×.AÑ.AÓ.CÀAÑ.EÑEñGà×&Ñ&Ó(á!ð ×)Ñ)Ó+¨AÑ-°×0DÑ0DÓ0FÀqÑ0HÒHØ'*ñ,ðñ ô	ð 	�‰˜e¨5ˆÔ1áØ�N‰NÔØ�J‰J× Ñ Ô"Ø×ÑÕð ó    c           	      ó†  — t        | d¬«      x| _        }|j                  ddd¬«       |j                  dd¬«       t	        |dd	| j
                  ¬
«      }t        | | j                  «      | _        t        |d| j                  ¬«      | _
        t        dd| j                  ¬«      | _        t	        |dd| j                  ¬«      | _        |j                  ddddt        ¬«       | j                  j                  ddddt        t         z   ddg¬«       | j                  j                  ddddt        t         z   ¬«       | j#                  «        t%        ||d| j&                  ¬«      | _        t%        |d| j*                  ¬«      | _        | j(                  j                  ddd¬«       | j,                  j                  ddd¬«       y)zˆCreate entry (rows, extras, buttons.

        Entry stuff on rows 0-2, spanning cols 0-2.
        Buttons on row 99, cols 1, 2.
        é
   )Úpaddingr   Únews)ÚcolumnÚrowÚstickyé   )ÚweightÚwÚleft©ÚanchorÚjustifyÚtexté   )r!   ÚtextvariableÚTkCaptionFontT)ÚnameÚexistsÚrootÚ Úred©rM   Ú
foregroundÚfonté   é   ©rC   rD   Ú
columnspanÚpadxrE   ©rC   rD   r\   r]   rE   Úpadyr   Úactive)rM   ÚdefaultÚcommandÚCancel)rM   rb   éc   )rC   rD   r]   N)r   ÚframeÚgridÚgrid_columnconfigurer   r#   r   r   Úentryvarr   r9   r   r"   Ú
error_fontÚentry_errorr   r	   Úcreate_extrar   r-   Ú	button_okr+   Úbutton_cancel)r<   Úok_textre   Ú
entrylabels       r=   r.   zQuery.create_widgetsY   sŠ  € ô # 4°Ô4Ð4ˆŒ
�UØ�
‰
˜! ¨6ˆ
Ô2Ø×"Ñ" 1¨QÐ"Ô/ä˜5¨°fØ $§¡ô.ˆ
ä! $¨¯
©
Ó3ˆŒÜ˜5¨¸¿¹ÔGˆŒ
Ü OØ&*°·±ô>ˆŒä  ¨S¸UØ&*§o¡oô7ˆÔð 	�‰˜q a°A¸AÄaˆÔHØ�
‰
�‰˜q a°A¸AÄaÌÁcØ  ˜Vð 	ô 	%à×Ñ×Ñ Q¨A¸!À!Ü%&¤q¡Sð 	ô 	*ð 	×ÑÔäØ˜G¨X¸t¿w¹wôHˆŒä#Ø˜H¨d¯k©kô;ˆÔð 	�‰×Ñ 1¨"°1ÐÔ5Ø×Ñ×Ñ q¨b°qÐÕ9r>   c                  ó   — y ©N© )r<   s    r=   rk   zQuery.create_extra}   s   € ˜Dr>   c                 ó0   — d|z   |xs | j                   d<   y )NzERROR: rM   )rj   )r<   r#   Úwidgets      r=   Ú	showerrorzQuery.showerror   s   € à/8¸7Ñ/BˆÒ	#�4×#Ñ# VÒ,r>   c                 ó~   — | j                   j                  «       j                  «       }|s| j                  d«       y|S )zReturn non-blank entry or None.zblank line.N)r9   ÚgetÚstripru   )r<   r9   s     r=   Úentry_okzQuery.entry_okƒ   s2   € à—
‘
—‘Ó ×&Ñ&Ó(ˆÙØ�N‰N˜=Ô)ØØˆr>   c                 óª   — d| j                   d<   | j                  «       }|�|| _        | j                  «        y| j                  j                  «        y)z�If entry is valid, bind it to 'result' and destroy tk widget.

        Otherwise leave dialog open for user to correct entry or cancel.
        r   rM   N)rj   ry   ÚresultÚdestroyr9   r:   )r<   Úeventr9   s      r=   r-   zQuery.ok‹   sG   € ð
 $&ˆ×Ñ˜Ñ Ø—‘“ˆØÐØˆDŒKØ�L‰L�Nð �J‰J× Ñ Õ"r>   c                 ó2   — d| _         | j                  «        y)z0Set dialog result to None and destroy tk widget.N)r{   r|   )r<   r}   s     r=   r+   zQuery.cancel™   s   € àˆŒØ�‰�r>   c                 óB   •— | j                  «        t        ‰| �	  «        y rq   )Úgrab_releaseÚsuperr|   )r<   Ú	__class__s    €r=   r|   zQuery.destroyž   s   ø€ Ø×ÑÔÜ‰‰Õr>   )ÚOKrq   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r.   rk   ru   ry   r-   r+   r|   Ú__classcell__©r‚   s   @r=   r   r   !   sD   ø„ ñð 9;ÀrØ eô1óf":òH !óCòó#ó÷
ð r>   r   c                   ó0   ‡ — e Zd ZdZdddœˆ fd„
Zd„ Zˆ xZS )ÚSectionNamez*Get a name for a config file section name.F©r   r   c                ó0   •— t         ‰| �  ||||||¬«       y )N)r   r   r   ©r�   r$   )r<   r"   r&   r#   r   r   r   r‚   s          €r=   r$   zSectionName.__init__§   s"   ø€ ä‰Ñ˜ ¨¸JØ &¨vð 	õ 	7r>   c                 óþ   — | j                   j                  «       j                  «       }|s| j                  d«       yt	        |«      dkD  r| j                  d«       y|| j
                  v r| j                  d«       y|S )z2Return sensible ConfigParser section name or None.úno name specified.NrN   z"name is longer than 30 characters.zname is already in use.)r9   rw   rx   ru   Úlenr   )r<   rQ   s     r=   ry   zSectionName.entry_ok¬   sj   € à�z‰z�~‰~Ó×%Ñ%Ó'ˆÙØ�N‰NÐ/Ô0ØÜ�‹Y�rŠ\Ø�N‰NÐ?Ô@ØØ�T—_‘_Ñ$Ø�N‰NÐ4Ô5ØØˆr>   ©r„   r…   r†   r‡   r$   ry   rˆ   r‰   s   @r=   r‹   r‹   £   s   ø„ Ù0ð !¨ö7ö
r>   r‹   c                   ó0   ‡ — e Zd ZdZdddœˆ fd„
Zd„ Zˆ xZS )Ú
ModuleNamez-Get a module name for Open Module menu entry.FrŒ   c                ó0   •— t         ‰| �  ||||||¬«       y )N©r   r   r   rŽ   )r<   r"   r&   r#   r   r   r   r‚   s          €r=   r$   zModuleName.__init__¿   s"   ø€ ä‰Ñ˜ ¨°uØ$¨Vð 	õ 	5r>   c                 óØ  — | j                   j                  «       j                  «       }|s| j                  d«       y	 t        j
                  j                  |«      }|€| j                  d«       yt        |j                  t        j                  j                  «      s| j                  d«       y	 |j                  j                  |«      }|S # t        t        f$ r$}| j                  t        |«      «       Y d}~yd}~ww xY w# t        $ r | j                  d«       Y yt        $ r@ 	 |j                  j                  «       }Y |S # t         $ r | j                  d«       Y Y yw xY ww xY w)z0Return entered module name as file path or None.r�   Nzmodule not found.znot a source-based module.z%loader does not support get_filename.zloader failed to get filename.)r9   rw   rx   ru   Ú	importlibÚutilÚ	find_specÚ
ValueErrorÚImportErrorÚstrÚ
isinstanceÚloaderÚabcÚSourceLoaderÚget_filenameÚAttributeErrorÚ	TypeError)r<   rQ   ÚspecÚmsgÚ	file_paths        r=   ry   zModuleName.entry_okÄ   s9  € à�z‰z�~‰~Ó×%Ñ%Ó'ˆÙØ�N‰NÐ/Ô0Øð	Ü—>‘>×+Ñ+¨DÓ1ˆDð ˆ<Ø�N‰NÐ.Ô/ØÜ˜$Ÿ+™+¤y§}¡}×'AÑ'AÔBØ�N‰NÐ7Ô8Øð	ØŸ™×0Ñ0°Ó6ˆIð Ðøô+ œKÐ(ò 	Ø�N‰Nœ3˜s›8Ô$Üûð	ûô ò 	Ø�N‰NÐBÔCÙÜò 	ðØ ŸK™K×4Ñ4Ó6‘	ð Ðøô ò Ø—‘Ð?Ô@Úðúð		úsG   ¾C Â2D ÃDÃC=Ã=DÄE)Ä!E)Ä*EÅE%Å!E)Å$E%Å%E)r’   r‰   s   @r=   r”   r”   »   s   ø„ Ù3ð !¨ö5ö
r>   r”   c                   ó   — e Zd ZdZd„ Zy)ÚGotoz1Get a positive line number for editor Go To Line.c                 ó¼   — 	 t        | j                  j                  «       «      }|dk  r| j	                  d«       y |S # t        $ r | j	                  d«       Y y w xY w)Nznot a base 10 integer.r   znot a positive integer.)Úintr9   rw   r›   ru   )r<   Úlinenos     r=   ry   zGoto.entry_oké   s[   € ð	Ü˜Ÿ™Ÿ™Ó)Ó*ˆFð �QŠ;Ø�N‰NÐ4Ô5ØØˆøô ò 	Ø�N‰NÐ3Ô4Ùð	ús   ‚#> ¾AÁAN)r„   r…   r†   r‡   ry   rr   r>   r=   r©   r©   å   s
   „ Ù7ó	r>   r©   c                   óf   ‡ — e Zd ZdZddi dddœˆ fd„
Zd„ Zd„ Zd„ Zej                  Z
d	„ Zd
„ Z	ˆ xZS )Ú
HelpSourcez,Get menu name and help source for Help menu.r   F)ÚmenuitemÚfilepathr   r   r   c          	      óD   •— || _         d}t        ‰	| �	  |||||||¬«       y)z·Get menu entry and url/local file for Additional Help.

        User enters a name for the Help resource and a web url or file
        name. The user can browse for the file.
        zName for item on Help menu:r   N)r°   r�   r$   )
r<   r"   r&   r¯   r°   r   r   r   r#   r‚   s
            €r=   r$   zHelpSource.__init__ù   s4   ø€ ð !ˆŒØ/ˆÜ‰ÑØ˜˜w¨hØ%¨f¸Vð 	õ 	Er>   c           	      óD  — | j                   }t        |ddd¬«      }t        | | j                  «      | _        t        || j                  d¬«      | _        t        |dd| j                  ¬	«      }t        |d
d| j                  ¬«      | _
        |j                  ddddddgt        ¬«       | j                  j                  ddddt        t        z   ddg¬«       |j                  dddt        t        z   ¬«       | j                  j                  ddddt        t        z   ¬«       y)zAdd path widjets to rows 10-12.rH   rI   z,Help File Path: Enter URL or browse for filerJ   é(   )rO   r!   ÚBrowseé   )rM   r!   rb   rT   rU   rV   r   r@   rY   rZ   )rC   rD   r\   r]   r_   rE   é   r   r^   )rC   rD   r]   rE   é   r[   N)re   r   r   r°   Úpathvarr   Úpathr   Úbrowse_fileri   Ú
path_errorrf   r   r	   r
   )r<   re   Ú	pathlabelÚbrowses       r=   rk   zHelpSource.create_extra  s  € à—
‘
ˆÜ˜%¨°VØMôOˆ	ä   t§}¡}Ó5ˆŒÜ˜%¨d¯l©lÀ"ÔEˆŒ	Ü˜ H°AØ $× 0Ñ 0ô2ˆä ¨C¸EØ%)§_¡_ô6ˆŒð 	�‰˜a R°A¸AÀRÈÀFÜð 	ô 	!à�	‰	�‰˜a R°A¸AÄaÌÁcØ ˜Fð 	ô 	$à�‰˜1 "¨1´Q´q±SˆÔ9Ø�‰×Ñ A¨2¸!À!Ü$%¤a¡Cð 	õ 	)r>   c                 óR   — t        j                  | |¬«      j                  ||¬«      S )N)r"   Ú	filetypes)Ú
initialdirÚinitialfile)r   ÚOpenÚshow)r<   r¿   ÚinitdirÚinitfiles       r=   ÚaskfilenamezHelpSource.askfilename  s%   € ô �‰ d°iÔ@ß‘ °X�Ó>ð	?r>   c                 ó  — g d¢}| j                   j                  «       }|r#t        j                  j	                  |«      \  }}n—d }t
        d d dk(  rut        j                  j                  t        j                  j                  t        «      d«      }t        j                  j                  |«      s)t        j                  «       }nt        j                  «       }| j                  |||«      }|r| j                   j                  |«       y y )N))z
HTML Filesz*.htm *.htmlÚTEXT)z	PDF Filesz*.pdfrÈ   )zWindows Help Filesz*.chm)z
Text Filesz*.txtrÈ   )z	All FilesÚ*rY   ÚwinÚDoc)r¸   rw   Úosr¹   Úsplitr   ÚjoinÚdirnamer   ÚisdirÚgetcwdrÆ   Úset)r<   r¿   r¹   ÚdirÚbaseÚfiles         r=   rº   zHelpSource.browse_file!  s¾   € ò ˆ	ð �|‰|×ÑÓ!ˆÙÜŸ™Ÿ™ dÓ+‰IˆC‘àˆDÜ˜˜ˆ|˜uÒ$Ü—g‘g—l‘l¤2§7¡7§?¡?´:Ó#>ÀÓF�Ü—w‘w—}‘} SÔ)ÜŸ)™)›+‘Cä—i‘i“k�Ø×Ñ 	¨3°Ó5ˆÙØ�L‰L×Ñ˜TÕ"ð r>   c                 ód  — | j                   j                  «       j                  «       }|s| j                  d| j                  «       y|j                  d«      sW|dd dk(  r|dd }t        j                   j                  |«      s| j                  d| j                  «       yt        dk(  rd|z   }|S )	z(Simple validity check for menu file pathzno help file path specified.N)zwww.ÚhttprZ   zfile:zhelp file path does not exist.Údarwinzfile://)	r¹   rw   rx   ru   r»   Ú
startswithrÌ   rR   r   )r<   r¹   s     r=   Úpath_okzHelpSource.path_ok9  s™   € à�y‰y�}‰}‹×$Ñ$Ó&ˆÙØ�N‰NÐ9¸4¿?¹?ÔKØØ—‘Ð!1Ô2Ø�B�Qˆx˜7Ò"Ø˜A˜B�x�Ü—7‘7—>‘> $Ô'Ø—‘Ð?Ø#Ÿ™ô0àÜ˜8Ò#Ø! DÑ(�Øˆr>   c                 ót   — d| j                   d<   | j                  «       }| j                  «       }|�|€dS ||fS )z,Return apparently valid (name, path) or Noner   rM   N)r»   Úitem_okrÚ   )r<   rQ   r¹   s      r=   ry   zHelpSource.entry_okJ  s=   € à"$ˆ�‰˜ÑØ�|‰|‹~ˆØ�|‰|‹~ˆØ�| t |ˆtÐE¸$À¸ÐEr>   )r„   r…   r†   r‡   r$   rk   rÆ   rº   r‹   ry   rÜ   rÚ   rˆ   r‰   s   @r=   r®   r®   õ   sA   ø„ Ù2ð 35¸rØ u°UöEò)ò(?ò#ð, ×"Ñ"€Gòö"Fr>   r®   c                   ó>   ‡ — e Zd ZdZg dddœˆ fd„
Zd„ Zd„ Zd„ Zˆ xZS )Ú	CustomRunz†Get settings for custom run of module.

    1. Command line arguments to extend sys.argv.
    2. Whether to restart Shell or not.
    F)Úcli_argsr   r   c                ó4   •— d}t         ‰| �  ||||||¬«       y)z¢cli_args is a list of strings.

        The list is assigned to the default Entry StringVar.
        The strings are displayed joined by ' ' for display.
        z$Command Line Arguments for sys.argv:r–   NrŽ   )r<   r"   r&   rß   r   r   r#   r‚   s          €r=   r$   zCustomRun.__init__Y  s*   ø€ ð 9ˆÜ‰ÑØ˜˜w¨hØ fð 	õ 	.r>   c                 ó  — | j                   }t        | d¬«      | _        t        || j                  ddd¬«      }t	        |dd| j
                  ¬«      | _        |j                  d	d
ddd¬«       | j                  j                  d	dddd¬«       y)zAdd run mode on rows 10-12.T)ÚvalueFzRestart shell)ÚvariableÚonvalueÚoffvaluerM   rT   rU   rV   r   r@   rY   rZ   rH   r[   r·   ÚweN)re   r   Ú
restartvarr   r   ri   Ú
args_errorrf   )r<   re   Úrestarts      r=   rk   zCustomRun.create_extrae  s†   € à—
‘
ˆÜ$ T°Ô6ˆŒÜ˜e¨d¯o©oÀtØ',°?ôDˆä ¨C¸EØ%)§_¡_ô6ˆŒð 	�‰˜A 2°!¸!ÀCˆÔHØ�‰×Ñ A¨2¸!À!Ø$(ð 	õ 	*r>   c                 óæ   — | j                   j                  «       j                  «       }	 t        j                  |d¬«      }|S # t
        $ r$}| j                  t        |«      «       Y d}~yd}~ww xY w)z.Return command line arg list or None if error.T)ÚposixN)r9   rw   rx   ÚshlexrÍ   r›   ru   r�   )r<   Ú
cli_stringrß   Úerrs       r=   Úcli_args_okzCustomRun.cli_args_okr  s\   € à—Z‘Z—^‘^Ó%×+Ñ+Ó-ˆ
ð	Ü—{‘{ :°TÔ:ˆHð ˆøô ò 	Ø�N‰Nœ3˜s›8Ô$Üûð	ús   ªA Á	A0ÁA+Á+A0c                 óf   — | j                  «       }| j                  j                  «       }|€dS ||fS )z4Return apparently valid (cli_args, restart) or None.N)rï   rç   rw   )r<   rß   ré   s      r=   ry   zCustomRun.entry_ok|  s7   € à×#Ñ#Ó%ˆØ—/‘/×%Ñ%Ó'ˆØÐ'ˆtÐ@¨h¸Ð-@Ð@r>   )	r„   r…   r†   r‡   r$   rk   rï   ry   rˆ   r‰   s   @r=   rÞ   rÞ   Q  s'   ø„ ñð 35Ø eö
.ò*òöAr>   rÞ   Ú__main__)Úmainzidlelib.idle_test.test_queryr   F)Ú	verbosityÚexit)Úrun)&r‡   Úimportlib.utilr˜   Úimportlib.abcrÌ   rì   Úsysr   r   Útkinterr   r   r   r   r	   r
   Útkinter.ttkr   r   r   r   r   r   Útkinter.fontr   Útkinter.simpledialogr   r   r‹   r”   r©   r®   rÞ   r„   Úunittestrò   Úidlelib.idle_test.htestrõ   rr   r>   r=   Ú<module>rÿ      s¯   ðñ÷* %Û 	Û ß $ç <× <ß @Õ @Ý Ý Ý .ôˆHô ôD�%ô ô0'�ô 'ôTˆ5ô ô ZF�ô ZFôx/A�ô /Aðd ˆzÒÝÙÐ	'°1¸5ÕAå+Ùˆˆz˜9Õ%ð r>   