ó {fc@sdZddlZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z daddd„ƒYZd e fd „ƒYZd e fd „ƒYZd e fd„ƒYZd„ZedkrddlmZeeƒndS(s„Class 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 iÿÿÿÿN(tPyShell(tListedToplevel(tTreeNodetTreeItemtScrolledCanvas(tidleConft ClassBrowsercBs;eZed„Zdd„Zd„Zd„Zd„ZRS(cCs[|stjjan||_tjj|d|jdƒ|_||_ |j |ƒdS(sH _htest - bool, change box when location running htest. is.pyN( Rtflisttopent file_opentnametostpathtjointfilet_htesttinit(tselfRR R R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt__init__s  # cCs|jjƒ|jjƒdS(N(ttoptdestroytnode(Rtevent((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pytclose)s cCs8||_tjjƒt|jƒ|_}|jd|jƒ|j d|jƒ|j r‹|j d|jj ƒ|jj ƒdfƒn|jƒ|jƒtjƒ}tj|dƒd}t|d|dd d d ƒ}|jjd d d dƒ|jƒ}t|jd|ƒ|_}|jƒ|jƒdS(NtWM_DELETE_WINDOWss+%d+%diÈtnormalt backgroundtbgthighlightthicknessit takefocusitexpandtfilltboth(Rtpyclbrt_modulestclearRtrootRtprotocolRtbindRtgeometryt winfo_rootxt winfo_rootytsettitlet focus_setRt CurrentThemet GetHighlightRtframetpacktrootnodeRtcanvastNoneRtupdateR(RRRtthemeRtsctitemR((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR-s$    '     cCs+|jjd|jƒ|jjdƒdS(NsClass Browser - s Class Browser(Rtwm_titleR t wm_iconname(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR*DscCs t|jƒS(N(tModuleBrowserTreeItemR(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR0HsN( t__name__t __module__tFalseRR2RRR*R0(((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRs     R9cBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R(RR((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRMscCstjj|jƒS(N(R R tbasenameR(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pytGetTextPscCsdS(Ntpython((R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt GetIconNameSscCsFg}x9|jƒD]+}t||j|jƒ}|j|ƒqW|S(N(t listclassestClassBrowserTreeItemtclassesRtappend(RtsublistR R6((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt GetSubListVs cCsStjj|jdƒdkr#dStjj|jƒs<dStjj|jƒdS(Niýÿÿÿs.py(R R tnormcaseRtexistsRRR(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt OnDoubleClick]s cCstjj|jdƒdkS(Niýÿÿÿs.py(R R RGR(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt IsExpandabledscCsÎtjj|jƒ\}}tjj|ƒ\}}tjj|ƒdkrOgSy tj||gtjƒ}Wnt k rƒgSXg}i|_ x|j ƒD]ò\}}|j |kr |} t |dƒrl|jrlg} xp|jD]e} t| ƒtdƒkr| } n1| j} | j |j krAd| j | f} n| j| ƒqéW| ddj| ƒ} n|j|j| fƒ||j | R@RFRIRJRA(((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR9Ks      RBcBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCsq||_||_||_y|j|j|_Wn ttfk rTd|_nXt|jtj ƒ|_ dS(N( R RCRR\t IndexErrortKeyErrorR2t isinstanceR!tFunctiont isfunction(RR RCR((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRŠs    cCs'|jrd|jdSd|jSdS(Nsdef s(...)sclass (RfR (R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR>”s cCs|jr dSdSdS(NR?tfolder(Rf(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR@šs cCs5|jr1y|jj SWq1tk r-tSXndS(N(R\tmethodstAttributeErrorR<(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRJ s   cCsS|js gSg}x9|jƒD]+}t||j|jƒ}|j|ƒq W|S(N(R\t listmethodstMethodBrowserTreeItemRRD(RRER R6((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRF§s cCsZtjj|jƒsdSt|jƒ}t|jdƒrV|jj}|j|ƒndS(NRV( R R RHRR RTR\RVtgotoline(RteditRV((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRI°s  cCs|js gSg}x3|jjjƒD]\}}|j||fƒq&W|jƒg}x!|D]\}}|j|ƒq`W|S(N(R\RhRRRDRW(RRRR RVRaR6((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRj¸s  ( R:R;RR>R@RJRFRIRj(((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRBˆs    RkcBs5eZd„Zd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R R\R(RR R\R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRÆs  cCsd|jdS(Nsdef s(...)(R (R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR>ËscCsdS(NR?((R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR@ÎscCsdS(Ni((R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRJÑscCsFtjj|jƒsdSt|jƒ}|j|jj|jƒdS(N( R R RHRR RlR\RhR (RRm((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRIÔs(R:R;RR>R@RJRI(((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRkÄs     cCs¸y t}WnHtk rTtjd}tjdrDtjd}qUtjd}nXtjj|ƒ\}}tjj|ƒd}tj |ƒ}|j a t |||gdt ƒdS(NiiR(t__file__t NameErrorRPtargvR R RMRNRtPyShellFileListRR RtTrue(tparentRRXR R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt_class_browserÚs     t__main__(trun((t__doc__R RPR!tidlelibRtidlelib.WindowListRtidlelib.TreeWidgetRRRtidlelib.configHandlerRR2R RR9RBRkRtR:tidlelib.idle_test.htestRv(((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt s    2=<