ó q”þfc@s)dZddlZddlZddlZddlZddlmZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdTZdUZdVZ dWZ!dXZ"dYZ#ej$ƒr'dZd[d\d]fZ%eee"e#fZ&n$d^d_d`dafZ%ee ee!fZ&e'ge(e)e%ƒƒD]#Z*e%e*D]Z+e+e*f^qoqaƒZ,d"dbd#„ƒYZ-e(de)e%ƒ>ƒZ.ge.D]%Z/d$j0d%„e1e%ƒDƒƒ^q½Z2d&„Z3e3e.ƒZ4gZ5x]e.D]UZ/dZ6x9e(e)e%ƒƒD]%Z7de7>e/@r)e6e&e7OZ6q)q)We5j8e6ƒq Wd'dcd(„ƒYZ9dddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzfZ:e9fde-fe)e:ƒdZ;e'ge(e)e:ƒƒD]#Z*e:e*D]Z+e+e*f^qqùƒZ<ej=dBƒZ>ej=dCƒZ?dD„Z@dE„ZAiZBdF„ZCeDdGkr%ejEƒZFeCejGƒeFƒZHeHjIƒdgdH„ZJeJdIƒeJdJƒeJdKƒeJdLƒeJdMƒeJdNƒeJdOƒeJdPƒeJdQƒeJdRƒeJdSƒeFjKƒndS({s˜ MultiCall - a class which inherits its methods from a Tkinter widget (Text, for example), but enables multiple calls of functions per virtual event - all matching events will be called, not only the most specific one. This is done by wrapping the event functions - event_add, event_delete and event_info. MultiCall recognizes only a subset of legal event sequences. Sequences which are not recognized are treated by the original Tk handling mechanism. A more-specific event will be called before a less-specific event. The recognized sequences are complete one-event sequences (no emacs-style Ctrl-X Ctrl-C, no shortcuts like <3>), for all types of events. Key/Button Press/Release events can have modifiers. The recognized modifiers are Shift, Control, Option and Command for Mac, and Control, Alt, Shift, Meta/M for other platforms. For all events which were handled by MultiCall, a new member is added to the event instance passed to the binded functions - mc_type. This is one of the event type constants defined in this module (such as MC_KEYPRESS). For Key/Button events (which are handled by MultiCall and may receive modifiers), another member is added - mc_state. This member gives the state of the recognized modifiers, as a combination of the modifier constants also defined in this module (for example, MC_SHIFT). Using these members is absolutely portable. The order by which events are called is defined by these rules: 1. A more-specific event will be called before a less-specific event. 2. A recently-binded event will be called before a previously-binded event, unless this conflicts with the first rule. Each function will be called at most once for each event. iÿÿÿÿN(t macosxSupportiiiiiiiiii i i i i iiiiiiiiitShifttControltOptiontCommandtAlttMetatMt _SimpleBindercBs,eZd„Zd„Zd„Zd„ZRS(cCsJ||_dt|dd|_||_||_g|_d|_dS(Nt(ttypet_typestsequencetwidgett widgetinstt bindedfuncstNonet handlerid(tselfR RR((s)/usr/lib64/python2.7/idlelib/MultiCall.pyt__init__Fs     cCsV|jsB|j|jd„}|jj|j|j|ƒ|_n|jj|ƒdS(NcSss||_i}x]tt|ƒdddƒD]?}||}||kr,t||<||ƒ}|rk|Sq,q,WdS(Niiÿÿÿÿ(tmc_typetrangetlentTrue(teventtlRt wascalledtitfunctr((s)/usr/lib64/python2.7/idlelib/MultiCall.pythandlerPs #    (RRR RtbindRR tappend(RttripletRR((s)/usr/lib64/python2.7/idlelib/MultiCall.pyR Ns   cCsH|jj|ƒ|jsD|jj|j|j|jƒd|_ndS(N(RtremoveRtunbindRR RR(RR"R((s)/usr/lib64/python2.7/idlelib/MultiCall.pyR$^s cCs/|jr+|jj|j|j|jƒndS(N(RRR$RR (R((s)/usr/lib64/python2.7/idlelib/MultiCall.pyt__del__ds (t__name__t __module__RR R$R%(((s)/usr/lib64/python2.7/idlelib/MultiCall.pyREs   tccs1|]'\}}d|>t@r|ddVqdS(iit-N(ts(t.0Rtm((s)/usr/lib64/python2.7/idlelib/MultiCall.pys ns csid„}g}xS|D]K‰tt‡fd†|Dƒƒƒ}|jd|dtƒ|j|ƒqW|S(s•For each item of states return a list containing all combinations of that item with individual bits reset, sorted by the number of set bits. cSs6d}x)|r1t|dƒ\}}||7}q W|S(snumber of bits set in n base 2ii(tdivmod(tntnbtrem((s)/usr/lib64/python2.7/idlelib/MultiCall.pytnbitsws  c3s|]}ˆ|@VqdS(N((R+tx(tstate(s)/usr/lib64/python2.7/idlelib/MultiCall.pys €stkeytreverse(tlisttsettsortRR!(tstatesR1t statelistt substates((R3s)/usr/lib64/python2.7/idlelib/MultiCall.pytexpand_substatesss  "t_ComplexBindercBs5eZd„Zd„Zd„Zd„Zd„ZRS(cCs"||||j|jd„}|S(Nc SsÛtg|(||_||_i}d}x||D]t}xatt|ƒdddƒD]C} || } | |krRt|| <|| |ƒ}|r•Pq•qRqRW|r/Pq/q/Wg|(x|D] } | ƒqµWg|(|r×|SdS(Niiÿÿÿÿ(RRtmc_stateRRR( RtlistsRR>tishandlerrunningtdoafterhandlerRRRRRtf((s)/usr/lib64/python2.7/idlelib/MultiCall.pyR™s*    #      (R@RA(RR?RR>R((s)/usr/lib64/python2.7/idlelib/MultiCall.pyt__create_handler˜s c Cs||_t|d|_||_||_igtD] }g^q6d6|_g|_g|_ g|_ x“tD]‹}gt |D]}|jd|^q‚}|j ||t |ƒ}dt||jd}|jj||jj|j||ƒfƒqqWdS(NiR R (R R ttypenameRRt_statesRRt handleridsR@RAt_state_subsetst_ComplexBinder__create_handlert _state_codest _state_namesR!R ( RR RRR*RR?Rtseq((s)/usr/lib64/python2.7/idlelib/MultiCall.pyRµs   #    (c s+ˆdˆjkrïgtD] }g^qˆjˆdWn‡‡‡fd†} ˆjs| ƒnˆjj | ƒdS(Nis <%s%s-%s>cs ˆjˆdˆdjˆƒS(Nii(RR!((RRR"(s)/usr/lib64/python2.7/idlelib/MultiCall.pytØs(RRERRGRHR RIRJRDRFR!RR RR@RA( RR"RR*tdetailRR?RRKtdoit((RRR"s)/usr/lib64/python2.7/idlelib/MultiCall.pyR Ìs$ (   cs<‡‡‡fd†}ˆjs(|ƒnˆjj|ƒdS(Ncs ˆjˆdˆdjˆƒS(Nii(RR#((RRR"(s)/usr/lib64/python2.7/idlelib/MultiCall.pyRLßs(R@RAR!(RR"RRN((RRR"s)/usr/lib64/python2.7/idlelib/MultiCall.pyR$Þs  cCs7x0|jD]%\}}|jj|j||ƒq WdS(N(RFRR$R(RRKtid((s)/usr/lib64/python2.7/idlelib/MultiCall.pyR%ås(R&R'RHRR R$R%(((s)/usr/lib64/python2.7/idlelib/MultiCall.pyR=s     tKeyPresstKeyt KeyReleaset ButtonPresstButtont ButtonReleasetActivatet CirculatetColormapt Configuret DeactivatetDestroytEntertExposetFocusIntFocusOuttGravitytLeavetMaptMotiont MouseWheeltPropertytReparenttUnmapt Visibilitys^\w+$s^[1-5]$c Csc| s'|ddks'|ddkr+d Stj|dd!dƒ}d}x7|rƒ|dtkrƒ|dt|d>O}|d=qMW|r²|dtkr²t|d}|d=nd St|tkrß|sÒ|rÖd Sd }nw|gd D]}t|^qékr t}nt}|s d }n6t |ƒdkrR|j |dƒrR|d}nd S|||fS( s-Get a string which should describe an event sequence. If it is successfully parsed as one, return a tuple containing the state (as an int), the event type (as an index of _types), and the detail - None if none, or a string if there is one. If the parsing is unsuccessful, return None. iR iÿÿÿÿR iR)RPRRN(RPRR( Rtstringtsplitt_modifier_namest _type_namest_binder_classesRt _keysym_ret _button_reRtmatch(R twordst modifiersR RMR*ttype_re((s)/usr/lib64/python2.7/idlelib/MultiCall.pyt_parse_sequenceþs0'    #  % cCsb|dr:dt|dt|ddd|ddSdt|dt|dddSdS(NiR iiR)R (RJR (R"((s)/usr/lib64/python2.7/idlelib/MultiCall.pyt_triplet_to_sequence(s 0cs>ˆtkrtˆSdˆf‡fd†ƒY}|tˆ<|S(s©Return a MultiCall class which inherits its methods from the given widget class (for example, Tkinter.Text). This is used instead of a templating mechanism. t MultiCallcs’eZeˆejƒst‚‡fd†Zddd‡fd†Zd‡fd†Z ‡fd†Z ‡fd†Z d‡fd†Z d„Z RS(csXˆj|||Ži|_gtttƒƒD]}t||ˆ|ƒ^q/|_dS(N(Rt_MultiCall__eventinfoRRR Rmt_MultiCall__binders(RtargstkwargsR(R(s)/usr/lib64/python2.7/idlelib/MultiCall.pyR;s cs#t|ƒtkr t|ƒdkr |d dkr |ddkr ||jkr÷|j|}|ddk r§x4|dD]%}|j|dj||dƒq{Wn||d<|ddk r x0|dD]!}|j|dj||ƒqÌWq q |gg|j|>ii(R tstrRRwRRxR$R (RR RtaddteiR"(R(s)/usr/lib64/python2.7/idlelib/MultiCall.pyR Ds$  & %csÈt|ƒtkrµt|ƒdkrµ|d dkrµ|ddkrµ||jkrµ|j|\}}|dk rµx)|D]!}|j|dj||ƒqyWd|j|d>ii(R R{RRwRRxR$(RR tfuncidRttripletsR"(R(s)/usr/lib64/python2.7/idlelib/MultiCall.pyR$Us$   cs²||jkr%dgg|j|>ii(ttextR R€(RKR.R((RKs)/usr/lib64/python2.7/idlelib/MultiCall.pytbindseq–sss s ssssss ssiiii i@i€(R(R(R(R(R(R(R(RR(((sKeyPressRQ(s KeyRelease(RSRT(RU(RV(RW(RX(RY(RZ(R[(R\(R](R^(R_(R`(Ra(Rb(Rc(Rd(Re(Rf(Rg(Rh(Lt__doc__tsysRitreRˆtidlelibRt MC_KEYPRESSt MC_KEYRELEASEtMC_BUTTONPRESStMC_BUTTONRELEASEt MC_ACTIVATEt MC_CIRCULATEt MC_COLORMAPt MC_CONFIGUREt MC_DEACTIVATEt MC_DESTROYtMC_ENTERt MC_EXPOSEt MC_FOCUSINt MC_FOCUSOUTt MC_GRAVITYtMC_LEAVEtMC_MAPt MC_MOTIONt MC_MOUSEWHEELt MC_PROPERTYt MC_REPARENTtMC_UNMAPt MC_VISIBILITYtMC_SHIFTt MC_CONTROLtMC_ALTtMC_METAt MC_OPTIONt MC_COMMANDtrunningAsOSXAppt _modifierst_modifier_maskstdictRRtnumbertnameRkRRER*tjoint enumerateRJR<RGRIRRR!R=R RmRltcompileRnRoRtRuR‹RŒR&tTktroottTextRŽtpackRtmainloop(((s)/usr/lib64/python2.7/idlelib/MultiCall.pyts²     & (/   \   "& *  a