JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrў fyDc@svdZddlZddlZddlZddlmZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZZd[Zd\Zd]Z d^Z!d_Z"ej#rddZ$eee!e"fZ%ndiZ$eeee fZ%e&d!d"e'e(e$DZ)Gd#d$d$Z*e'de(e$>Z+d%d"e+DZ,d&d'Z-e-e+Z.gZ/x]e+D]UZ0dZ1x9e'e(e$D]%Z2de2>e0@re1e%e2OZ1qqWe/j3e1qWGd(d)d)Z4dZ5e4fde*fe(e5dZ6e&dCd"e'e(e5DZ7ej8dDZ9ej8dEZ:dFdGZ;dHdIZ<iZ=dJdKZ>e?dLkrrej@ZAe>ejBeAZCeCjDdgdMdNZEeEdOeEdPeEdQeEdReEdSeEdTeEdUeEdVeEdWeEdXeEdYeAjFndS(u 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. iN(u macosxSupportiiiiiiiii i i i i iiiiiiiiiuShiftuControluOptionuCommanduAltuMetauMcCs-g|]#}t|D]}||fqqS((u _modifiers(u.0unumberuname((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu 8s u cBsD|EeZdZddZddZddZddZd S( u _SimpleBindercCsJ||_dt|dd|_||_||_g|_d|_dS(Nu(utypeu_typesusequenceuwidgetu widgetinstu bindedfuncsuNoneu handlerid(uselfutypeuwidgetu widgetinst((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu__init__Es     u_SimpleBinder.__init__cCsY|jsE|j|jdd}|jj|j|j||_n|jj|dS(NcSss||_i}x]tt|dddD]?}||}||kr,d||<||}|rk|Sq,q,WdS(NiiiT(umc_typeurangeulenuTrue(ueventulumc_typeu wascalleduiufuncur((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyuhandlerOs #    u#_SimpleBinder.bind..handler(u handleridu bindedfuncsutypeuwidgetubindu widgetinstusequenceuappend(uselfutripletufuncuhandler((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyubindMs   u_SimpleBinder.bindcCsH|jj||jsD|jj|j|j|jd|_ndS(N(u bindedfuncsuremoveuwidgetuunbindu widgetinstusequenceu handleriduNone(uselfutripletufunc((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyuunbind]s u_SimpleBinder.unbindcCs/|jr+|jj|j|j|jndS(N(u handleriduwidgetuunbindu widgetinstusequence(uself((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu__del__cs u_SimpleBinder.__del__N(u__name__u __module__u __qualname__u__init__ubinduunbindu__del__(u __locals__((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu _SimpleBinderDs   u _SimpleBindercs8g|].djfddttDqS(uc3s1|]'\}}d|>@r|ddVqdS(iiu-N((u.0uium(us(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu ms u.(ujoinu enumerateu _modifiers(u.0((usu6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu ms csodd}g}xV|D]Nttfdd|D}|jd|dd|j|qW|S(uFor 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(unumber of bits set in n base 2ii(udivmod(ununburem((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyunbitsvs  uexpand_substates..nbitsc3s|]}|@VqdS(N((u.0ux(ustate(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu su#expand_substates..ukeyureverseT(ulistusetusortuTrueuappend(ustatesunbitsu statelistu substates((ustateu6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyuexpand_substatesrs  %uexpand_substatescBsP|EeZdZddZddZddZddZd d Zd S( u_ComplexBindercCs%||||j|jdd}|S(Nc Ssdg|dd<||_||_i}d}x||D]t}xatt|dddD]C} || } | |kr[d|| <|| |}|rPqq[q[W|r8Pq8q8Wg|dd.handler(uishandlerrunningudoafterhandler(uselfulistsumc_typeumc_stateuhandler((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu__create_handlers u_ComplexBinder.__create_handlercs|_t|d_|_|_iddtDd6_g_g_ g_ xtD]}fddt |D}j ||t |}dt|jd}jj|jjj||fqkWdS(NicSsg|] }gqS(((u.0us((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu s u+_ComplexBinder.__init__..cs!g|]}jd|qS(N(u bindedfuncsuNone(u.0ui(uself(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu s u(utypeu_typesutypenameuwidgetu widgetinstu_statesuNoneu bindedfuncsu handleridsuishandlerrunningudoafterhandleru_state_subsetsu_ComplexBinder__create_handleru _state_codesu _state_namesuappendubind(uselfutypeuwidgetu widgetinstusulistsuhandleruseq((uselfu6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu__init__s       u_ComplexBinder.__init__csdjkrddtDjds u'_ComplexBinder.bind..cs2g|](}tD]}j||qqS((u_state_subsetsu bindedfuncs(u.0udetailui(usuself(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu s u <%s%s-%s>cs jddjS(Nii(u bindedfuncsuappend((ufuncuselfutriplet(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyusu%_ComplexBinder.bind..(u bindedfuncsu_statesuNoneu_ComplexBinder__create_handlerutypeu _state_codesu _state_namesutypenameu handleridsuappenduwidgetubindu widgetinstuishandlerrunningudoafterhandler(uselfutripletufunculistsuhandlerusequdoit((ufuncususelfutripletu6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyubinds    u_ComplexBinder.bindcs?fdd}js+|njj|dS(Ncs jddjS(Nii(u bindedfuncsuremove((ufuncuselfutriplet(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyusu'_ComplexBinder.unbind..(uishandlerrunningudoafterhandleruappend(uselfutripletufuncudoit((ufuncuselfutripletu6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyuunbinds  u_ComplexBinder.unbindcCs7x0|jD]%\}}|jj|j||q WdS(N(u handleridsuwidgetuunbindu widgetinst(uselfusequid((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu__del__su_ComplexBinder.__del__N(u__name__u __module__u __qualname__u_ComplexBinder__create_handleru__init__ubinduunbindu__del__(u __locals__((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu_ComplexBinders     u_ComplexBinderuKeyPressuKeyu KeyReleaseu ButtonPressuButtonu ButtonReleaseuActivateu CirculateuColormapu Configureu DeactivateuDestroyuEnteruExposeuFocusInuFocusOutuGravityuLeaveuMapuMotionu MouseWheeluPropertyuReparentuUnmapu VisibilitycCs-g|]#}t|D]}||fqqS((u_types(u.0unumberuname((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu s u^\w+$u^[1-5]$cCsY| s'|ddks'|d dkr+d S|dd jd}d}x7|r|dtkr|dt|d>O}|d=qMW|r|dtkrt|d}|d=nd St|tkr|s|rd Sd }nm|ddd Dkrt}nt}|sd }n6t|dkrH|j |drH|d}nd S|||fS(u-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. iuu-cSsg|]}t|qS((u _type_names(u.0us((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu s u#_parse_sequence..uKeyPressu KeyReleaseiNi(uKeyPressu KeyRelease( uNoneusplitu_modifier_namesu _type_namesu_binder_classesu _SimpleBinderu _keysym_reu _button_reulenumatch(usequenceuwordsu modifiersutypeudetailutype_re((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu_parse_sequences0'      % u_parse_sequencecCsb|dr:dt|dt|ddd|ddSdt|dt|dddSdS(Niu(u _state_namesu_types(utriplet((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu_triplet_to_sequence$s 0u_triplet_to_sequencecs>tkrtSGfddd}|t<|S(uReturn a MultiCall class which inherits its methods from the given widget class (for example, Tkinter.Text). This is used instead of a templating mechanism. cs|EeZdZfddZdddfddZdfddZfddZfd d Zdfd d Z d dZ dS(u#MultiCallCreator..MultiCallcsKj||i_fddtttD_dS(Ncs&g|]}t||qS((u_binder_classes(u.0ui(uselfuwidget(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu =s u@MultiCallCreator..MultiCall.__init__..(u__init__u_MultiCall__eventinfourangeulenu_typesu_MultiCall__binders(uselfuargsukwargs(uwidget(uselfu6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu__init__7s u,MultiCallCreator..MultiCall.__init__cs/t|tkrt|dkr|dddkr|dddkr||jkr|j|}|ddk rx4|dD]%}|j|dj||dqWn||d<|ddk rx0|dD]!}|j|dj||qWqq|gg|j|>iii(utypeustrulenu_MultiCall__eventinfouNoneu_MultiCall__bindersuunbindubind(uselfusequenceufuncuaddueiutriplet(uwidget(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyubind@s$, & %u(MultiCallCreator..MultiCall.bindcst|tkrt|dkr|dddkr|dddkr||jkr|j|\}}|dk rx)|D]!}|j|dj||qWd|j|d>iii(utypeustrulenu_MultiCall__eventinfouNoneu_MultiCall__bindersuunbind(uselfusequenceufuncidufuncutripletsutriplet(uwidget(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyuunbindRs$,  u*MultiCallCreator..MultiCall.unbindcs||jkr%dgg|j|.MultiCall.event_addcs||jkrdS|j|\}}xs|D]k}t|}|dkraj|||q-|dk r|j|dj||n|j|q-WdS(Ni(u_MultiCall__eventinfou_parse_sequenceuNoneu event_deleteu_MultiCall__bindersuunbinduremove(uselfuvirtualu sequencesufuncutripletsusequtriplet(uwidget(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu event_deletens    u0MultiCallCreator..MultiCall.event_deletecs]|dks||jkr+j||Sttt|j|dj||SdS(Ni(uNoneu_MultiCall__eventinfou event_infoutupleumapu_triplet_to_sequence(uselfuvirtual(uwidget(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu event_info|s  u.MultiCallCreator..MultiCall.event_infocSs`xY|jD]N}|j|\}}|r x,|D]!}|j|dj||q0Wq q WdS(Ni(u_MultiCall__eventinfou_MultiCall__bindersuunbind(uselfuvirtualufuncutripletsutriplet((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu__del__s  u+MultiCallCreator..MultiCall.__del__N( u__name__u __module__u __qualname__u__init__uNoneubinduunbindu event_addu event_deleteu event_infou__del__(u __locals__(uwidget(u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyu MultiCall4s  u MultiCall(u_multicall_dict(uwidgetu MultiCall((uwidgetu6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyuMultiCallCreator,s  X uMultiCallCreatoru__main__csTfdd}tjd|d|tjd|d|dd7.handleru <>ii(utextubindu event_add(usequnuhandler((usequ6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyubindseqsubindsequu u uuuuuu uuiiii i@i(uShift(uControl(uOption(uCommand((uShift(uControl(uOption(uCommand(uControl(uAlt(uShift(uMetauM((uControl(uAlt(uShift(uMetauM(uKeyPressuKey(u KeyRelease(u ButtonPressuButton(u ButtonRelease(uActivate(u Circulate(uColormap(u Configure(u Deactivate(uDestroy(uEnter(uExpose(uFocusIn(uFocusOut(uGravity(uLeave(uMap(uMotion(u MouseWheel(uProperty(uReparent(uUnmap(u Visibility((uKeyPressuKey(u KeyRelease(u ButtonPressuButton(u ButtonRelease(uActivate(u Circulate(uColormap(u Configure(u Deactivate(uDestroy(uEnter(uExpose(uFocusIn(uFocusOut(uGravity(uLeave(uMap(uMotion(u MouseWheel(uProperty(uReparent(uUnmap(u Visibility(Gu__doc__usysureutkinteruidlelibu macosxSupportu MC_KEYPRESSu MC_KEYRELEASEuMC_BUTTONPRESSuMC_BUTTONRELEASEu MC_ACTIVATEu MC_CIRCULATEu MC_COLORMAPu MC_CONFIGUREu MC_DEACTIVATEu MC_DESTROYuMC_ENTERu MC_EXPOSEu MC_FOCUSINu MC_FOCUSOUTu MC_GRAVITYuMC_LEAVEuMC_MAPu MC_MOTIONu MC_MOUSEWHEELu MC_PROPERTYu MC_REPARENTuMC_UNMAPu MC_VISIBILITYuMC_SHIFTu MC_CONTROLuMC_ALTuMC_METAu MC_OPTIONu MC_COMMANDurunningAsOSXAppu _modifiersu_modifier_masksudicturangeulenu_modifier_namesu _SimpleBinderu_statesu _state_namesuexpand_substatesu_state_subsetsu _state_codesusuruiuappendu_ComplexBinderu_typesu_binder_classesu _type_namesucompileu _keysym_reu _button_reu_parse_sequenceu_triplet_to_sequenceu_multicall_dictuMultiCallCreatoru__name__uTkurootuTextutextupackubindsequmainloop(((u6/opt/alt/python33/lib64/python3.3/idlelib/MultiCall.pyus      (     \"  '  c