sB: dZddlZddlZddlZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZd ZdZdZdZ ejBdk(r dZ"eeee fZ#ndZ"eeeefZ#e$e%e"Dcic]}e"|D]}||c}}Z&dZ'Gd d!Z(e$de%e"zZ)e)Dcgc]"d"jUfd#e+e"D$c}Z,d$Z-e-e)Z.gZ/e)D]9Z0dZ1e$e%e"D]Z2de2ze0zs e1e#e2zZ1e/jge1;Gd%d&Z4d'Z5e4fdze(fe%e5dz zzZ6e$e%e5Dcic]}e5|D]}||c}}Z7ejpd(Z9ejpd)Z:d*Z;d+Zd-Z?e@d.k(r dd/lAmBZBeBd0dd12dd3lCmDZDeDe?yycc}}wcc}wcc}}w)4a 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. N  @darwin)ShiftControl)Option)Command)r)Altr)MetaMzapplication has been destroyedc$eZdZdZdZdZdZy) _SimpleBindercx||_dt|dzdz|_||_||_g|_d|_y)N)type_typessequencewidget widgetinst bindedfuncs handlerid)selfr+r.r/s 8/opt/alt/python312/lib64/python3.12/idlelib/multicall.py__init__z_SimpleBinder.__init__Js? F4LO+C/  $c|jsP|j|jfd}|jj |j |j ||_|jj|y)Nc||_i}tt|dz ddD]}||}||vs d||<||}|s|cSy)NrT)mc_typerangelen)eventlr9 wascalledifuncrs r3handlerz#_SimpleBinder.bind..handlerTsT '  s1vaxR0AQ4D9,*. $ K#$H 1r5)r1r0r+r.bindr/r-append)r2tripletr@rBs r3rCz_SimpleBinder.bindRsY~~#'#3#3tyy %"[[--doo.2mmWFDN %r5c|jj||jsC|jj|j|j |j d|_yyN)r0remover.unbindr/r-r1)r2rEr@s r3rIz_SimpleBinder.unbindbsM % KK  t t~~ N!DN r5c|jr= |jj|j|j|jyy#t j $r }t|jdvrYd}~yd}~wwxYwNr) r1r.rIr/r-tkinterTclErrorAPPLICATION_GONEargs)r2es r3__del__z_SimpleBinder.__del__hsh >>  ""4??DMM( ## '166!945 s;A A>A99A>N)__name__ __module__ __qualname__r4rCrIrQr5r3r'r'Is& " r5r'c3DK|]\}}d|zzr |ddzyw)rr-NrU).0r?mss r3 r\ws0)$9DAqFa<!S$9s cd}g}|D]B}t|Dchc]}||z c}}|j|d|j|D|Scc}w)zFor each item of states return a list containing all combinations of that item with individual bits reset, sorted by the number of set bits. c<d}|rt|d\}}||z }|r|S)znumber of bits set in n base 2rr)divmod)nnbrems r3nbitszexpand_substates..nbitss. Aq\FAs #IB r5T)keyreverse)listsortrD)statesrc stateliststatex substatess r3expand_substatesrm|s`IV4V%!)V45 5$/# 5s A c*eZdZdZdZdZdZdZy)_ComplexBinderc@||||j|jfd}|S)Ncdg|dd||_||_i}d}|D]B}tt|dz ddD] } || } | |vs d|| <|| |}|s n|sBng|dd|D] } |  g|dd|r|Sy)NTrr8)r9mc_stater:r;) r<listsr9rrishandlerrunningdoafterhandlerr>rAr=r?r@fs r3rBz0_ComplexBinder.__create_handler..handlers$(& Q #EM%ENIAs1vaxR0AQ4D9,*. $ AaDK! 1#% Q #$ "N1 r5)rtru)r2rsr9rrrBs r3__create_handlerz_ComplexBinder.__create_handlers(#(%('+'<'<%)%8%8 4r5c ||_t|d|_||_||_dt Dcgc]}gc}i|_g|_g|_g|_ t D]}t|Dcgc]}|j d|}}|j||t|}dt|z|jzdz}|jj||jj|j||fycc}wcc}w)Nrr)r*)r+r,typenamer.r/_statesr0 handleridsrtru_state_subsets_ComplexBinder__create_handler _state_codes _state_namesrDrC) r2r+r.r/r[r?rsrBseqs r3r4z_ComplexBinder.__init__s t Q  $ w"7w!2w"78!# A8Fq8IJ8I1T%%d+A.8IEJ++E4aIGl1o%dmm3C7C OO " "C)9)9$//:=w*H$I J #8Ks D+Dc ~djvrtDcgc]}gc}jd<tD]}ddfDcgc]"}t|D]}j||$}}}j|jt |}dt |jddd}jj|jjj||ffd} js| yjj| ycc}wcc}}w)Nrr)rXr*cRjddjSNrr)r0rDr@r2rEsr3z%_ComplexBinder.bind..(t'' 3GAJ?FFtLr5)r0rzr|r}r+r~rryr{rDr.rCr/rtru) r2rEr@r[detailr?rsrBrdoits ``` r3rCz_ComplexBinder.binds4 1:T-- -8?+@1B+@D  WQZ ()0T(:=(:f#1!#4a**6215#46(:=//tyy0A7.L(MNM$$ F    & &t ,,A=s D4 'D9cvfd}js|yjj|y)NcRjddjSr)r0rHrsr3rz'_ComplexBinder.unbind..rr5)rtrurD)r2rEr@rs``` r3rIz_ComplexBinder.unbinds*L$$ F    & &t ,r5c|jD]-\}} |jj|j||/y#tj $r }t |jdvrYd}~_d}~wwxYwrK)r{r.rIr/rLrMrNrO)r2ridrPs r3rQz_ComplexBinder.__del__scGC  ""4??C<'## '166!945 s'>A1A,,A1N)rRrSrTr}r4rCrIrQrUr5r3roros:J.-$-r5ro))KeyPressKey) KeyRelease) ButtonPressButton) ButtonRelease)Activate) Circulate)Colormap) Configure) Deactivate)Destroy)Enter)Expose)FocusIn)FocusOut)Gravity)Leave)Map)Motion) MouseWheel)Property)Reparent)Unmap) Visibilityz^\w+$z^[1-5]$c|r|ddk7s|ddk7ry|ddjd}d}|r.|dtvr#|dt|dzz}|d=|r |dtvr#|r|dtvrt|d}|d=nyt|tur|s|ryd}nT|dDcgc] }t| c}vrt }nt }|sd}n)t|dk(r|j|dr|d}ny|||fScc}w) a-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. rr)r8r*NrrX)rr) split_modifier_names _type_names_binder_classesr' _keysym_re _button_rer;match)r-words modifiersr+rr[type_res r3_parse_sequencer s% x{c)Xb\S-@ QrN  %EI E!H/Q/%(333 !H E!H/ q[(58$ !Ht - F ,FG,FqKN,FG G G GF Z1_uQx!81XF dF ""HsC(c|dr+dt|dzt|ddzdz|dzdzSdt|dzt|ddzdzS)Nrr)rrrXr*)rr,)rEs r3_triplet_to_sequencer2syqz< ++F71:,>q,AA#Eqz < ++F71:,>q,AA#EEr5cVtvr tSGfdd}|t<|S)zReturn a MultiCall class which inherits its methods from the given widget class (for example, Tkinter.Text). This is used instead of a templating mechanism. ceZdZeWej sJfdZd fd Zd fd ZfdZ fdZ d fd Z dZ y) #MultiCallCreator..MultiCallcj|g|i|i|_tttDcgc]}t |||c}|_ycc}wrG)r4_MultiCall__eventinfor:r;r,r_MultiCall__binders)r2rOkwargsr?r.s r3r4z,MultiCallCreator..MultiCall.__init__Es` FOOD 24 26 2 "D ',S['9;'9!.a0FDA'9;DN;sANct|turt|dkDr|dddk(r|dddk(r||jvrz|j|}|d/|dD]'}|j|dj ||d)||d<|d>|dD]$}|j|dj ||&n|gg|j|<j ||||S)Nr<<>>rr)r+strr;rrrIrC)r2r-r@addeirEr.s r3rCz(MultiCallCreator..MultiCall.bindNsH~$X):|t# (=t///))(3B!u(')!uG NN71:6==gr!uM(- BqE!u(')!uG NN71:6;;GTJ(-37D$$X.;;tXtS9 9r5cBt|tur{t|dkDrm|dddk(re|dddk(r]||jvrO|j|\}}|;|D]$}|j|dj ||&d|j|d<j |||S)Nrrrrrr)r+rr;rrrI)r2r-funcidr@tripletsrEr.s r3rIz*MultiCallCreator..MultiCall.unbind`sH~$X):|t# (=4+++!%!1!1(!;h##+wqz299'4H$,48D$$X.q1==x8 8r5c"||jvrdgg|j|<|j|\}}|D]X}t|}|j|||$|"|j|dj |||j |ZyNr)rr event_addrrCrDr2virtual sequencesr@rrrEr.s r3rz-MultiCallCreator..MultiCall.event_addksd...-12J  )!--g6ND( )#.?$$T7C8'wqz277FOOG,!r5c||jvry|j|\}}|D]X}t|}|j|||$|"|j|dj |||j |Zyr)rr event_deleterrIrHrs r3rz0MultiCallCreator..MultiCall.event_delete|sd...!--g6ND( )#.?''gs;'wqz299'4HOOG,!r5c|||jvrj||Sttt|j|dj||zSr)r event_infotuplemapr)r2rr.s r3rz.MultiCallCreator..MultiCall.event_infosh'1A1A"A((w77S!5!%!1!1'!:1!=?@((w788r5c|jD]A}|j|\}}|s|D]%} |j|dj||'Cy#tj$r }t |j dvrYd}~Yd}~wwxYw)Nrr)rrrIrLrMrNrO)r2rr@rrErPs r3rQz+MultiCallCreator..MultiCall.__del__s++!%!1!1'!:h#+& NN71:6==gtL$,, '//qvvay#@ %$A&s"AB%BB)NNNrG) rRrSrT issubclassrLMiscr4rCrIrrrrQ)r.sr3 MultiCallrBs:&',,/// ; :$ 9 -" - 8 &r5r)_multicall_dict)r.rs` r3MultiCallCreatorr:s9  v&&Y&VY&v(OF r5c8tj|}|jdtt|j j ddd\}}|j d||dzfzttj|jjdgffd }|d|d |d |d |d |d |d|d|d|d|d|dy)NzTest MultiCall+rz+%d+%drcfd}jd|dz|jd|dz|dxxdz cc<y)NctyrG)print)r<rs r3rBz-_multi_call..bindseq..handlers #Jr5z <>rr)rCr)rr`rBtexts` r3bindseqz_multi_call..bindseqsC  /!A$&0 qt+S1 ! r5zz z zzzzz zz zz) rLTopleveltitlerintgeometryrrTextpack focus_set)parenttoprkyrrs @r3 _multi_callrs   6 "CII sFOO%++C04 5DAqLLQCL() ) GLL )# .DIIKNNs  G O M  !" I ! L  L I Ir5__main__)mainzidlelib.idle_test.test_mainmenuF) verbosityexit)run)E__doc__resysrL MC_KEYPRESS MC_KEYRELEASEMC_BUTTONPRESSMC_BUTTONRELEASE MC_ACTIVATE MC_CIRCULATE MC_COLORMAP MC_CONFIGURE MC_DEACTIVATE MC_DESTROYMC_ENTER MC_EXPOSE MC_FOCUSIN MC_FOCUSOUT MC_GRAVITYMC_LEAVEMC_MAP MC_MOTION MC_MOUSEWHEEL MC_PROPERTY MC_REPARENTMC_UNMAP MC_VISIBILITYMC_SHIFT MC_CONTROLMC_ALTMC_META MC_OPTION MC_COMMANDplatform _modifiers_modifier_masksr:r;rrNr'rzjoin enumeraterrmr|r~r[rAr?rDror,rrcompilerrrrrrrrRunittestridlelib.idle_test.htestr)numbernamer[s00pr3rs<   Q}q12B A|1{1l AxbIR*  2 x2Fy b+b+2(R} dTFT7  t*<<8FJY CODJ!68W=O(-S_'=9'=V%/%7T<%7'=94&&Z S_$ %!"!A)$-j$9))!" $"'* A A 3z? # Fa< # #A$ [[~ "#a'=*:c&k!m*LL$)V#51#5!'V|!/#51 RZZ ! RZZ # %#NFdN: z *aeD+  O 9@"\1s;G 5'GG