7ec@sdZddlZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z dadddYZd e fd YZd e fd YZd e fdYZdZedkrddlmZeendS(sClass 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(tPyShell(tListedToplevel(tTreeNodetTreeItemtScrolledCanvas(tidleConft ClassBrowsercBs;eZedZddZdZdZdZRS(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|jjdS(N(ttoptdestroytnode(Rtevent((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pytclose)s cCs8||_tjjt|j|_}|jd|j|j d|j|j r|j d|jj |jj dfn|j|jtj}tj|dd}t|d|dd d d }|jjd d d d|j}t|jd||_}|j|jdS(NtWM_DELETE_WINDOWss+%d+%ditnormalt 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|jjddS(NsClass Browser - s Class Browser(Rtwm_titleR t wm_iconname(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR*DscCs t|jS(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     R9cBsGeZdZdZdZdZdZdZdZRS(cCs ||_dS(N(R(RR((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRMscCstjj|jS(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|jD]+}t||j|j}|j|qW|S(N(t listclassestClassBrowserTreeItemtclassesRtappend(RtsublistR R6((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt GetSubListVs cCsStjj|jddkr#dStjj|js<dStjj|jdS(Nis.py(R R tnormcaseRtexistsRRR(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt OnDoubleClick]s cCstjj|jddkS(Nis.py(R R RGR(R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyt IsExpandabledscCstjj|j\}}tjj|\}}tjj|dkrOgSy tj||gtj}Wnt k rgSXg}i|_ x|j D]\}}|j |kr|} t |drl|jrlg} xp|jD]e} t| tdkr| } n1| j} | j |j krAd| j | f} n| j| qW| ddj| } n|j|j| f||j | R@RFRIRJRA(((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyR9Ks      RBcBsGeZdZdZdZdZdZdZdZRS(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.pyRs    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.pyRJs   cCsS|js gSg}x9|jD]+}t||j|j}|j|q W|S(N(R\t listmethodstMethodBrowserTreeItemRRD(RRER R6((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRFs cCsZtjj|jsdSt|j}t|jdrV|jj}|j|ndS(NRV( R R RHRR RTR\RVtgotoline(RteditRV((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRIs  cCs|js gSg}x3|jjjD]\}}|j||fq&W|jg}x!|D]\}}|j|q`W|S(N(R\RhRRRDRW(RRRR RVRaR6((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRjs  ( R:R;RR>R@RJRFRIRj(((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRBs    RkcBs5eZdZdZdZdZdZRS(cCs||_||_||_dS(N(R R\R(RR R\R((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRs  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.pyRJscCsFtjj|jsdSt|j}|j|jj|jdS(N( R R RHRR RlR\RhR (RRm((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRIs(R:R;RR>R@RJRI(((s,/usr/lib64/python2.7/idlelib/ClassBrowser.pyRks     cCsy 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_browsers     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=<