3  f0@sdZddlZddlZddlmZmZddlmZmZm Z m Z m Z ddl m Z mZmZmZddlmZddlmZGdd d eZGd d d eZGd d d eZGdddeZedkrddlmZeddddddlmZeeedS)a Dialogs that query users and verify the answer before accepting. Use ttk widgets, limiting use to tcl/tk 8.5+, as in IDLE 3.6+. 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 StringVarWES)FrameButtonEntryLabel) filedialog)FontcsbeZdZdZdidddddZddZdd d Zd d ZdddZdddZ fddZ 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 CsXtj|||j||_|j|||_||_||_|j||j |j j dd}|dkry|j j dd|j ddWn YnX|j d|j|j d |j|jd |j|j d |j|j d |j|jd d d|j|j|jd|j|jd|jd|j|s2|jd|jdndf|sT|j|jdS)aCreate popup, do not return until tk widget destroyed. Additional subclass init must be done before calling 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 tkwindowingsystemZaquaz!::tk::unsupported::MacWindowStyleZstyleZ moveableModalrz z ZWM_DELETE_WINDOWz z F)Zheightwidthz+%d+%dN)r__init__ZwithdrawparenttitlemessagerrZ transientZgrab_setrZcallZ_wZbindcancelZprotocolokZ resizablecreate_widgetsZupdate_idletasksZgeometryZ winfo_rootxZ winfo_widthZwinfo_reqwidthZ winfo_rootyZ winfo_heightZwinfo_reqheightZ deiconifyZ wait_window) selfrrrrrrrrr"2/opt/alt/python36/lib64/python3.6/idlelib/query.pyr%sB    *zQuery.__init__cCs.t|dd|_}|jdddd|jdddt|dd |jd }t||j|_t |d |jd |_ |j j t d d|j d|_t|dd|jd|_t|dd|jd|_t|d|jd|_|jddddtd|j jddddttddgd|jjddddttd|jjdddd|jjdddddS)N )ZpaddingrZnews)columnrowsticky)Zweightwleft)anchorjustifytext)r textvariableZ TkCaptionFontT)nameexistsroot red)r- foregroundfontZOKZactive)r-defaultcommandZCancel)r-r8)r%r& columnspanpadxr')r%r&r;r<r'padyrc)r%r&r<)r framegridZgrid_columnconfigurer rrrZentryvarr entry focus_setrr error_font entry_errorr rZ button_okrZ button_cancelrr)r!r?Z entrylabelr"r"r#r Ws.     zQuery.create_widgetsNcCsd||p|jd<dS)NzERROR: r-)rD)r!rZwidgetr"r"r# showerrorsszQuery.showerrorcCs.d|jd<|jjj}|s*|jddS|S)zReturn non-blank entry or None.rr-z blank line.N)rDrAgetstriprE)r!rAr"r"r#entry_okws   zQuery.entry_okcCs.|j}|dk r ||_|jn |jjdS)zIf entry is valid, bind it to 'result' and destroy tk widget. Otherwise leave dialog open for user to correct entry or cancel. N)rHresultdestroyrArB)r!eventrAr"r"r#rs  zQuery.okcCsd|_|jdS)z0Set dialog result to None and destroy tk widget.N)rIrJ)r!rKr"r"r#rsz Query.cancelcs|jtjdS)N)Z grab_releasesuperrJ)r!) __class__r"r#rJsz Query.destroy)N)N)N) __name__ __module__ __qualname____doc__rr rErHrrrJ __classcell__r"r")rMr#r s1  rcs0eZdZdZdddfdd ZddZZS) SectionNamez*Get a name for a config file section name.F)rrcstj||||||ddS)N)rrr)rLr)r!rrrrrr)rMr"r#rszSectionName.__init__cCs`d|jd<|jjj}|s*|jddSt|dkrD|jddS||jkr\|jddS|S)z2Return sensible ConfigParser section name or None.rr-zno name specified.Nr.z"name is longer than 30 characters.zname is already in use.)rDrArFrGrElenr)r!r0r"r"r#rHs      zSectionName.entry_ok)rNrOrPrQrrHrRr"r")rMr#rSsrScs0eZdZdZdddfdd ZddZZS) ModuleNamez-Get a module name for Open Module menu entry.F)rrcstj||||||ddS)N)rrr)rLr)r!rrrrrr)rMr"r#rszModuleName.__init__cCsd|jd<|jjj}|s*|jddSytjj|}Wn2tt fk rl}z|jt |dSd}~XnX|dkr|jddSt |j tj js|jddSy|j j|}Wn"tk r|jd|ddSX|S) z0Return entered module name as file path or None.rr-zno name specified.Nzmodule not foundznot a source-based modulez$loader does not support get_filename)r)rDrArFrGrE importlibutil find_spec ValueError ImportErrorstr isinstanceloaderabc SourceLoader get_filenameAttributeError)r!r0specmsgZ file_pathr"r"r#rHs.    zModuleName.entry_ok)rNrOrPrQrrHrRr"r")rMr#rUsrUcs`eZdZdZddidddfdd ZfddZd d Zd d Zej Z d dZ ddZ Z S) HelpSourcez,Get menu name and help source for Help menu.rF)menuitemfilepathrrrc s(||_d}tj|||||||ddS)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:)rrrrN)rfrLr) r!rrrerfrrrr)rMr"r#rs zHelpSource.__init__cstj|j}t|dddd}t||j|_t||jdd|_t |dd|j d }t|d d |j d |_ |j d ddddd gtd|jj d dddttdd gd|j dddttd|j j d dddttddS)Nr)r*z,Help File Path: Enter URL or browse for file)r+r,r-()r/rZBrowse)r-rr8r3r4)r-r5r6rr$r9r:)r%r&r;r<r=r' r)r%r&r;r<r'r=)r%r&r<r' )r%r&r;r<r')rLr r?r rrfpathvarr pathr browse_filerC path_errorr@rrr)r!r?Z pathlabelZbrowse)rMr"r#r s"    zHelpSource.create_widgetscCstj||dj||dS)N)r filetypes)Z initialdirZ initialfile)r ZOpenZshow)r!roZinitdirZinitfiler"r"r# askfilenameszHelpSource.askfilenamecCsdddddg}|jj}|r.tjj|\}}nHd}tdd d krntjjtjjtd}tjj |svtj }ntj }|j |||}|r|jj |dS)N HTML Files *.htm *.htmlTEXT PDF Files*.pdfWindows Help Files*.chm Text Files*.txt All Files*r9winZDoc)rqrrrs)rtrurs)rvrw)rxryrs)rzr{) rkrFosrlsplitrjoindirnamerisdirgetcwdrpset)r!rorldirbasefiler"r"r#rms"   zHelpSource.browse_filecCs||jjj}|s$|jd|jdS|jd sx|dddkrJ|dd}tjj|sh|jd|jdStdkrxd |}|S) z(Simple validity check for menu file pathzno help file path specified.Nwww.httpr:zfile:zhelp file path does not exist.darwinzfile://)rr) rlrFrGrErn startswithr}r1r)r!rlr"r"r#path_oks   zHelpSource.path_okcCs@d|jd<d|jd<|j}|j}|dks4|dkr8dS||fS)z,Return apparently valid (name, path) or Nonerr-N)rDrnitem_okr)r!r0rlr"r"r#rH*s   zHelpSource.entry_ok) rNrOrPrQrr rprmrSrHrrrRr"r")rMr#rds rd__main__)mainzidlelib.idle_test.test_queryrF) verbosityexit)run)rQrVr}sysrrZtkinterrrrrrZ tkinter.ttkr r r r r Z tkinter.fontrrrSrUrdrNZunittestrZidlelib.idle_test.htestrr"r"r"r#s   w%^