ó ükWc@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/lib/python2.7/idlelib/ClassBrowser.pyt__init__s  # cCs|jjƒ|jjƒdS(N(ttoptdestroytnode(Rtevent((s*/usr/lib/python2.7/idlelib/ClassBrowser.pytclose)s cCsA||_tjjƒt|jƒ|_}|jd|jƒ|j d|jƒ|j r‹|j d|jj ƒ|jj ƒdfƒn|jƒ|jƒtjdddƒ}tj|dƒd }t|d |d d d dƒ}|jjddddƒ|jƒ}t|jd|ƒ|_}|jƒ|jƒdS(NtWM_DELETE_WINDOWss+%d+%diÈtmaintThemeR tnormalt backgroundtbgthighlightthicknessit takefocusitexpandtfilltboth(Rtpyclbrt_modulestclearRtrootRtprotocolRtbindRtgeometryt winfo_rootxt winfo_rootytsettitlet focus_setRt GetOptiont GetHighlightRtframetpacktrootnodeRtcanvastNoneRtupdateR (RRRtthemeRtsctitemR((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyR-s$    '    cCs+|jjd|jƒ|jjdƒdS(NsClass Browser - s Class Browser(Rtwm_titleR t wm_iconname(R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyR,DscCs t|jƒS(N(tModuleBrowserTreeItemR(R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyR2HsN( t__name__t __module__tFalseRR4RRR,R2(((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRs     R;cBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R(RR((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRMscCstjj|jƒS(N(R R tbasenameR(R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pytGetTextPscCsdS(Ntpython((R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyt GetIconNameSscCsFg}x9|jƒD]+}t||j|jƒ}|j|ƒqW|S(N(t listclassestClassBrowserTreeItemtclassesRtappend(RtsublistR R8((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyt GetSubListVs cCsStjj|jdƒdkr#dStjj|jƒs<dStjj|jƒdS(Niýÿÿÿs.py(R R tnormcaseRtexistsRRR(R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyt OnDoubleClick]s cCstjj|jdƒdkS(Niýÿÿÿs.py(R R RIR(R((s*/usr/lib/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((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRL s   cCsS|js gSg}x9|jƒD]+}t||j|jƒ}|j|ƒq W|S(N(R^t listmethodstMethodBrowserTreeItemRRF(RRGR R8((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRH§s cCsZtjj|jƒsdSt|jƒ}t|jdƒrV|jj}|j|ƒndS(NRX( R R RJRR RVR^RXtgotoline(RteditRX((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRK°s  cCs|js gSg}x3|jjjƒD]\}}|j||fƒq&W|jƒg}x!|D]\}}|j|ƒq`W|S(N(R^RjRTRFRY(RRTR RXRcR8((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRl¸s  ( R<R=RR@RBRLRHRKRl(((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRDˆs    RmcBs5eZd„Zd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R R^R(RR R^R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRÆs  cCsd|jdS(Nsdef s(...)(R (R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyR@ËscCsdS(NRA((R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRBÎscCsdS(Ni((R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRLÑscCsFtjj|jƒsdSt|jƒ}|j|jj|jƒdS(N( R R RJRR RnR^RjR (RRo((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRKÔs(R<R=RR@RBRLRK(((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyRmÄs     cCs¸y t}WnHtk rTtjd}tjdrDtjd}qUtjd}nXtjj|ƒ\}}tjj|ƒd}tj |ƒ}|j a t |||gdt ƒdS(NiiR(t__file__t NameErrorRRtargvR R RORPRtPyShellFileListRR RtTrue(tparentRRZR R((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyt_class_browserÚs     t__main__(trun((t__doc__R RRR#tidlelibRtidlelib.WindowListRtidlelib.TreeWidgetRRRtidlelib.configHandlerRR4R RR;RDRmRvR<tidlelib.idle_test.htestRx(((s*/usr/lib/python2.7/idlelib/ClassBrowser.pyt s    2=<