fc@sdZddlZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z GdddZGd d d e ZGd d d e ZGd dde ZddZedkrendS(uClass browser. XXX TO DO: - reparse when source changed (maybe just a button would be OK?) (or recheck on window popup) - add popup menu with more options (e.g. doc strings, base classes, imports) - show function argument list? (have to do pattern matching on source) - should the classes and methods lists also be in the module's menu bar? - add base classes to class browser tree iN(uPyShell(uListedToplevel(uTreeNodeuTreeItemuScrolledCanvas(uidleConfcBsS|EeZdZddZd ddZddZddZd d Zd S( u ClassBrowsercCs=||_tjj|d|jd|_|j|dS(Niu.py(unameuosupathujoinufileuinit(uselfuflistunameupath((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu__init__s #uClassBrowser.__init__cCs|jj|jjdS(N(utopudestroyunode(uselfuevent((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyucloses uClassBrowser.closecCs||_tjjt|j|_}|jd|j|j d|j|j |j t j ddd}t j|dd}t|d|d d d d }|jjd d dd|j}t|jd||_}|j|jdS(NuWM_DELETE_WINDOWuumainuThemeunameunormalu backgroundubguhighlightthicknessiu takefocusiuexpandufilluboth(uflistupyclbru_modulesuclearuListedToplevelurootutopuprotocolucloseubindusettitleu focus_setuidleConfu GetOptionu GetHighlightuScrolledCanvasuframeupackurootnodeuTreeNodeucanvasuNoneunodeuupdateuexpand(uselfuflistutoputhemeu backgrounduscuitemunode((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyuinit#s      uClassBrowser.initcCs+|jjd|j|jjddS(NuClass Browser - u Class Browser(utopuwm_titleunameu wm_iconname(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyusettitle7suClassBrowser.settitlecCs t|jS(N(uModuleBrowserTreeItemufile(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyurootnode;suClassBrowser.rootnodeN( u__name__u __module__u __qualname__u__init__uNoneucloseuinitusettitleurootnode(u __locals__((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu ClassBrowsers    u ClassBrowsercBsh|EeZdZddZddZddZddZd d Zd d Zd dZ dS(uModuleBrowserTreeItemcCs ||_dS(N(ufile(uselfufile((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu__init__@suModuleBrowserTreeItem.__init__cCstjj|jS(N(uosupathubasenameufile(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyuGetTextCsuModuleBrowserTreeItem.GetTextcCsdS(Nupython((uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu GetIconNameFsu!ModuleBrowserTreeItem.GetIconNamecCsFg}x9|jD]+}t||j|j}|j|qW|S(N(u listclassesuClassBrowserTreeItemuclassesufileuappend(uselfusublistunameuitem((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu GetSubListIs u ModuleBrowserTreeItem.GetSubListcCsYtjj|jdddkr)dStjj|jsBdStjj|jdS(Niu.pyi(uosupathunormcaseufileuexistsuPyShelluflistuopen(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu OnDoubleClickPs %u#ModuleBrowserTreeItem.OnDoubleClickcCs#tjj|jdddkS(Niu.pyi(uosupathunormcaseufile(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu IsExpandableWsu"ModuleBrowserTreeItem.IsExpandablecCstjj|j\}}tjj|\}}tjj|dkrOgSy tj||gtj}Wn)t k r}z gSWYdd}~XnXg}i|_ x|j D]\}} | j |kr|} t | dr| jrg} xp| jD]e} t| tdkr'| } n1| j} | j | j krXd| j | f} n| j| qW| ddj| } n|j| j| f| |j | s      uModuleBrowserTreeItemcBsh|EeZdZddZddZddZddZd d Zd d Zd dZ dS(uClassBrowserTreeItemc Csr||_||_||_y|j|j|_Wn!ttfk rUd|_YnXt|jtj |_ dS(N( unameuclassesufileuclu IndexErroruKeyErroruNoneu isinstanceupyclbruFunctionu isfunction(uselfunameuclassesufile((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu__init__}s   uClassBrowserTreeItem.__init__cCs'|jrd|jdSd|jSdS(Nudef u(...)uclass (u isfunctionuname(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyuGetTexts uClassBrowserTreeItem.GetTextcCs|jr dSdSdS(Nupythonufolder(u isfunction(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu GetIconNames u ClassBrowserTreeItem.GetIconNamec Cs9|jr5y|jj SWq5tk r1dSYq5XndS(NF(uclumethodsuAttributeErroruFalse(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu IsExpandables   u!ClassBrowserTreeItem.IsExpandablecCsS|js gSg}x9|jD]+}t||j|j}|j|q W|S(N(uclu listmethodsuMethodBrowserTreeItemufileuappend(uselfusublistunameuitem((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu GetSubLists uClassBrowserTreeItem.GetSubListcCs`tjj|jsdStjj|j}t|jdr\|jj }|j |ndS(Nulineno( uosupathuexistsufileuPyShelluflistuopenuhasattruclulinenougotoline(uselfueditulineno((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu OnDoubleClicks  u"ClassBrowserTreeItem.OnDoubleClickcCs|js gSg}x3|jjjD]\}}|j||fq&W|jg}x!|D]\}}|j|q`W|S(N(uclumethodsuitemsuappendusort(uselfuitemsunameulinenoulistuitem((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu listmethodss  u ClassBrowserTreeItem.listmethodsN( u__name__u __module__u __qualname__u__init__uGetTextu GetIconNameu IsExpandableu GetSubListu OnDoubleClicku listmethods(u __locals__((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyuClassBrowserTreeItem{s    uClassBrowserTreeItemcBsP|EeZdZddZddZddZddZd d Zd S( uMethodBrowserTreeItemcCs||_||_||_dS(N(unameuclufile(uselfunameuclufile((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu__init__s  uMethodBrowserTreeItem.__init__cCsd|jdS(Nudef u(...)(uname(uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyuGetTextsuMethodBrowserTreeItem.GetTextcCsdS(Nupython((uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu GetIconNamesu!MethodBrowserTreeItem.GetIconNamecCsdS(Ni((uself((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu IsExpandablesu"MethodBrowserTreeItem.IsExpandablecCsLtjj|jsdStjj|j}|j|jj |j dS(N( uosupathuexistsufileuPyShelluflistuopenugotolineuclumethodsuname(uselfuedit((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu OnDoubleClicksu#MethodBrowserTreeItem.OnDoubleClickN(u__name__u __module__u __qualname__u__init__uGetTextu GetIconNameu IsExpandableu OnDoubleClick(u __locals__((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyuMethodBrowserTreeItems     uMethodBrowserTreeItemc Csy t}WnOtk r[tjd}tjddrJtjd}n tjd}YnXtjj|\}}tjj|d}tt j ||gtj tj krt ndS(Nii(u__file__u NameErrorusysuargvuosupathusplitusplitextu ClassBrowseruPyShelluflistustdinu __stdin__umainloop(ufileudiruname((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyumains   umainu__main__(u__doc__uosusysupyclbruidlelibuPyShelluidlelib.WindowListuListedTopleveluidlelib.TreeWidgetuTreeNodeuTreeItemuScrolledCanvasuidlelib.configHandleruidleConfu ClassBrowseruModuleBrowserTreeItemuClassBrowserTreeItemuMethodBrowserTreeItemumainu__name__(((u9/opt/alt/python33/lib64/python3.3/idlelib/ClassBrowser.pyu s   (=<