\d:dZddlZddlZddlZddlZddlmZmZddl m Z m Z m Z m Z mZmZddlmZmZmZmZmZddl mZddlmZddlmZGd d e ZGd d eZGd deZGddeZGddeZGddeZ e!dkr)ddl"m#Z#e#dddddl$m%Z%e%eee dSdS)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 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) executableplatform)Toplevel StringVar BooleanVarWES)FrameButtonEntryLabel Checkbutton) filedialog)Font) _setup_dialogc`eZdZdZdiddddZddZdZdd Zd Zdd Z dd Z fdZ xZ S)QueryzoBase class for getting verified answer from a user. For this base class, accept any non-blank string. Ftext0 used_names_htest_utestc||_||_||_||_t j||||||||s| t||j dkr| d|j | d|j |d|j | d|j| d|j|||d||dz |dz z z||s/|dz |dz z nd zfz|d d |sC||j|d Sd S) aCreate 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 z WM_DELETE_WINDOWz z z+%d+%dF)heightwidthN)parentmessagerrr__init__withdrawtitle transientgrab_setr_windowingsystembindcancelprotocolokcreate_widgetsupdate_idletasksgeometry winfo_rootx winfo_widthwinfo_reqwidth winfo_rooty winfo_heightwinfo_reqheight resizable deiconifyentry focus_set wait_window)selfr"r&r#rrrrs ..\python\lib\idlelib\query.pyr$zQuery.__init__&s;   $$'''  5 v  MMOOOd  F * * IImT[ 1 1 1 .$+... ($+666 .$'*** ,(((   &&((''))!+d.A.A.C.CA.EEG&&((!+f))++A-0D0D0F0Fq0HHH'*,    e5111  NN    J " " "          OKc t|dx|_}|ddd|ddt |dd |j }t ||j|_t|d |j |_ td d|j |_ t |dd|j |_|ddddt|j ddddtt zddg|jddddtt z|t%||d|j|_t%|d|j|_|jddd|jddddS)zCreate entry (rows, extras, buttons. Entry stuff on rows 0-2, spanning cols 0-2. Buttons on row 99, cols 1, 2. )paddingrnews)columnrowsticky)weightwleftanchorjustifytext)r! textvariable TkCaptionFontT)nameexistsroot redrN foregroundfontrDrE columnspanpadxrFrDrEr]r^rFpadyractive)rNdefaultcommandCancel)rNrcc)rDrEr^N)r framegridgrid_columnconfigurerr#rrentryvarr r9rr" error_font entry_errorrr create_extrar r- button_okr+ button_cancel)r<ok_textrf entrylabels r=r.zQuery.create_widgetsYs#44444 U !6 222 ""1Q"///5f $ ... !$ 33 5GGG O&*>>> SU&*o777 qaAAaHHH qaAAac V  % % % QA!!%&qS  * * * GXtwHHH#Hdk;;; 1"1555 qbq99999r>cdSN)r<s r=rlzQuery.create_extra}sr>Nc$d|z|p|jd<dS)NzERROR: rN)rk)r<r#widgets r= showerrorzQuery.showerrors/87/B #4#V,,,r>c|j}|s|ddS|S)zReturn non-blank entry or None.z blank line.N)r9getstriprv)r<r9s r=entry_okzQuery.entry_oksC   &&((  NN= ) ) )4 r>cd|jd<|}|||_|dS|jdS)zIf entry is valid, bind it to 'result' and destroy tk widget. Otherwise leave dialog open for user to correct entry or cancel. rrNN)rkrzresultdestroyr9r:)r<eventr9s r=r-zQuery.oksX $&    DK LLNNNNN J " " " " "r>c<d|_|dS)z0Set dialog result to None and destroy tk widget.N)r|r})r<r~s r=r+z Query.cancels  r>cp|tdSrr) grab_releasesuperr})r< __class__s r=r}z Query.destroys/  r>)r?rr) __name__ __module__ __qualname____doc__r$r.rlrvrzr-r+r} __classcell__rs@r=rr!s9;re11111f":":":":H!  CCCC # # # # r>rc0eZdZdZdddfd ZdZxZS) SectionNamez*Get a name for a config file section name.FrrcVt||||||dS)N)rrrrr$)r<r"r&r#rrrrs r=r$zSectionName.__init__s; J &v  7 7 7 7 7r>c"|j}|s|ddSt |dkr|ddS||jvr|ddS|S)z2Return sensible ConfigParser section name or None.no name specified.NrOz"name is longer than 30 characters.zname is already in use.)r9rxryrvlenr)r<rRs r=rzzSectionName.entry_oksz~~%%''  NN/ 0 0 04 YYr\\ NN? @ @ @4 T_ $ $ NN4 5 5 54 r>rrrrr$rzrrs@r=rrs^00!7777777       r>rc0eZdZdZdddfd ZdZxZS) ModuleNamez-Get a module name for Open Module menu entry.FrcVt||||||dS)Nrrrr)r<r"r&r#rrrrs r=r$zModuleName.__init__s; u$V  5 5 5 5 5r>c|j}|s|ddS tj|}nA#ttf$r-}|t|Yd}~dSd}~wwxYw||ddSt|j tj j s|ddS |j |}ns#t$r|dYdSt$rE |j }n'#t $r|dYYdSwxYwYnwxYw|S)z0Return entered module name as file path or None.rNzmodule not found.znot a source-based module.z%loader does not support get_filename.zloader failed to get filename.)r9rxryrv importlibutil find_spec ValueError ImportErrorstr isinstanceloaderabc SourceLoader get_filenameAttributeError TypeError)r<rRspecmsg file_paths r=rzzModuleName.entry_oksz~~%%''  NN/ 0 0 04 >++D11DDK(    NN3s88 $ $ $44444  < NN. / / /4$+y}'ABB  NN7 8 8 84  0066II    NNB C C C44     K4466    ?@@@ttt   sTA&&B$7"BB$<DF9 FEFF<FFFFrrs@r=rrs^33!5555555 r>rceZdZdZdZdS)Gotoz1Get a positive line number for editor Go To Line.c t|j}n&#t$r|dYdSwxYw|dkr|ddS|S)Nznot a base 10 integer.rznot a positive integer.)intr9rxrrv)r<linenos r=rzz Goto.entry_oks ))**FF    NN3 4 4 444  Q;; NN4 5 5 54 s&)A  A N)rrrrrzrsr>r=rrs)77     r>rc\eZdZdZddidddfd ZdZdZdZej Z d Z d Z xZ S) HelpSourcez,Get menu name and help source for Help menu.rF)menuitemfilepathrrrc j||_d}t|||||||dS)zGet 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. zName for item on Help menu:rN)rrr$) r<r"r&rrrrrr#rs r=r$zHelpSource.__init__sQ! / wh%fV  E E E E Er>c V|j}t|ddd}t||j|_t ||jd|_t|dd|j }t|d d |j |_ | d ddddd gt|j d dddttzdd g| dddttz|j d dddttzdS)zAdd path widjets to rows 10-12.rIrJz,Help File Path: Enter URL or browse for filerK()rPr!Browse)rNr!rcrUrVrWrrArZr[)rDrEr]r^r`rF rr_)rDrEr^rF r\N)rfrrrpathvarr pathr browse_filerj path_errorrgrr r )r<rf pathlabelbrowses r=rlzHelpSource.create_extrasK %VMOOO  t}55 %dl"EEE HA $ 0222CE%)_666 aRAARF  ! ! ! aRAAacF  $ $ $ 1"1QqS 999 A2!!$%aC  ) ) ) ) )r>cXtj||||S)N)r" filetypes) initialdir initialfile)rOpenshow)r<rinitdirinitfiles r= askfilenamezHelpSource.askfilenames,di@@@X>> ?r>c.gd}|j}|r#tj|\}}nd}t dddkrutjtjtd}tj |stj }ntj }| |||}|r|j |dSdS)N))z HTML Filesz *.htm *.htmlTEXT)z PDF Filesz*.pdfr)zWindows Help Filesz*.chm)z Text Filesz*.txtr)z All Files*rZwinDoc) rrxosrsplitrjoindirnamerisdirgetcwdrset)r<rrdirbasefiles r=rzHelpSource.browse_file!s   |!!  " d++ICD|u$$gll27??:#>#>FFw}}S))&)++Cikk 355  # L  T " " " " " # #r>c|j}|s|d|jdS|dsd|dddkr |dd}t j|s|d|jdStdkrd|z}|S) z(Simple validity check for menu file pathzno help file path specified.N)zwww.httpr[zfile:zhelp file path does not exist.darwinzfile://) rrxryrvr startswithrrSr)r<rs r=path_okzHelpSource.path_ok9sy}}$$&& ) NN94? K K K4!122 )BQBx7""ABBx7>>$'' ?#000t8##!D( r>czd|jd<|}|}||dn||fS)z,Return apparently valid (name, path) or NonerrNN)ritem_okr)r<rRrs r=rzzHelpSource.entry_okJs>"$||~~||~~|t|tt$Er>) rrrrr$rlrrrrzrrrrs@r=rrs2235ruU E E E E E E E)))(???###,"G"FFFFFFFr>rc>eZdZdZgdddfd ZdZdZdZxZS) CustomRunzGet settings for custom run of module. 1. Command line arguments to extend sys.argv. 2. Whether to restart Shell or not. F)cli_argsrrcZd}t||||||dS)zcli_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:rNr)r<r"r&rrrr#rs r=r$zCustomRun.__init__YsC9 whf  . . . . .r>c|j}t|d|_t||jddd}t |dd|j|_|d d d d d |jd dd d ddS)zAdd run mode on rows 10-12.T)valueFz Restart shell)variableonvalueoffvaluerNrUrVrWrrArZr[rIr\rweN)rfr restartvarrrrj args_errorrg)r<rfrestarts r=rlzCustomRun.create_extraes $T666edot',?DDDCE%)_666  A2!!C HHH A2!!$(  * * * * *r>c|j} tj|d}n:#t $r-}|t|Yd}~dSd}~wwxYw|S)z6Validity check and parsing for command line arguments.T)posixN)r9rxryshlexrrrvr)r< cli_stringrerrs r= cli_args_okzCustomRun.cli_args_okrsZ^^%%++--  {:T:::HH    NN3s88 $ $ $44444 sA A;"A66A;cl|}|j}|dn||fS)z4Return apparently valid (cli_args, restart) or None.N)rrrx)r<rrs r=rzzCustomRun.entry_ok|s:##%%/%%'''tth-@@r>) rrrrr$rlrrzrrs@r=rrQs35e . . . . . . . * * *AAAAAAAr>r__main__)mainzidlelib.idle_test.test_queryrF) verbosityexit)run)&rimportlib.utilr importlib.abcrrsysrrtkinterrrrrr r tkinter.ttkr r r rrr tkinter.fontrtkinter.simpledialogrrrrrrrrunittestridlelib.idle_test.htestrrsr>r=rsn  *%$$$$$$$ $$$$$$$$<<<<<<<<<<<<<<<<@@@@@@@@@@@@@@......HD%0''''''''T     5    ZFZFZFZFZFZFZFZFx/A/A/A/A/A/A/A/Ad zD '15AAAA++++++Cz9%%%%% r>