libTix.so000075500001201330150252220140006336 0ustar00ELF>`@@8@`` kk$k$z mm$m$$$PtdHHH,,QtdRtdkk$k$xxGNU-..t12~5 0` P0x@g 0A B@C@ ( $ X`A ;I @ H-D, T,AFA`*"BH4( $$@"(eI0ILD"(lA@ !!`&PJ@@0AIDp H. ((@ 56789;<=>?ABCDEGHIJLNPQRUVXYZ\abcdefgjlnprsuvy{}   } FL'?9ؤZ$Њ긳I=M5ꈫg<S*]Z8M2LE }$OOpCҍ>E;q}ۀoʥF$:{kj`o0sV3nPv4omuR8qKDeXhzaX&܇濹+\.֠/ ށ<̓{ zZTm ˸\ ٗ3Gxf&Ŗ#jhhM!0Ā~4ݍ m0$ U$Z0E"Z`rܿ1kM鞲̎o˅dArS b07.,Z[]c$ rCdU@*y$SNmiG "tpC 6-AM#j=Xt'wӑWQ4ÄwpXW_F,ٛoC`" +XϻBEK7d rC׎`Y ^-zC1>,S Dv+O"'e54FJOM<ϙ,_?)%G2U?SWd.~dM{amu%4$Iz HZɰ<֋¨WkArүMuniHVN%c~xrIMU.~yfE`,S09!1MĐrqX9iW_  -\6ya f 8 R"P @P 0" e T5  |  Pk 0uI6 mm id `9  E% p.  lf  0e P8U  i m!  G& [z О+  pA V   -7 T>J  I T>   09' B  R ~(  `M `e  ~'  y r aq{ PV  e T Gg ^   $ 0Zx$E J$H 0B  lb  0(i  u$ `} _ pKv @] }s  S> PF8  0I_F 7L($7 $ n ba}   e! Yd | z$ 0aM_ pm M  `? E1 g  ` p}  `s" u^  F=I $ PFL = OZ I> f pc4 IX 0fV$  N% } y +U$  X e F/ P}  M( F  0L  pi& $ o) p # @t pe @e7 ` [    l2 @/ s$H  5:  \ XqK k i @6D  p8$k$   > P:  <$. O 0F 0e /Ez$f  Pr T z$  UW p =X   :3 pq' t3A ,n K  1  {  j  p1@$E e  0C x  $ 0`N  y PAa  @22  `: ! PW~   @T>K  `&C } l 1 XF Т @! \a @~ P!  K s8 ?8N0$t vu @| D  0  |a$j -  0[ P$<    bC$z r!$ \ @} OH$  u  V o !  Jd  i p }$ W! 5t~ :5, [Y @ n" C |? v P{ @$U ИV A]$ P* PL 0M? !V pH Q#   @Q   @ @v Sf Y]} Lh @!__gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassestclStubsPtrTixGetHashTableTix_SimpleListIteratorInitTix_SimpleListStartTix_SimpleListDeleteTix_SimpleListNext__stack_chk_failTix_ZAlloctixStrDupTix_SimpleListInitTix_FindConfigSpecByNameTix_CreateInstanceCmdstrstrTix_InstanceCmdTix_ChangeOneOptionTix_CallMethodTix_CallConfigMethodTix_ArgcErrorstrlenTix_FindPublicMethod__sprintf_chkTix_EvalArgvTix_UnknownPublicMethodErrorTix_ChangeOptionsTix_QueryOneOptionTix_GetVarTix_QueryAllOptionsTix_UninitializedClassCmdstrcmpTix_GetConfigSpecFullNameTix_GlobalVarEvalTix_CreateWidgetCmdTix_SimpleListAppendTix_ClassCmdtkStubsPtrTix_DoWhenIdleCmdTix_DoWhenMappedCmdTix_Get3DBorderCmdTix_HandleOptionsCmdTix_ParentWindowTixpSetWindowParentTix_TmpLineCmdTixpDrawTmpLineTix_GetDefaultCmdstrcpyTix_ValueMissingErrorTix_ManageGeometryCmdTix_GeometryRequestCmdTix_MoveResizeWindowCmdTix_MapWindowCmdTix_FlushXCmdXFlushTix_UnmapWindowCmdTix_InitTcl_InitStubsTk_InitStubsTix_CreateCommandstixNormalUidtixCellUidtixRowUidtixColumnUidtixDisabledUidTixMwmProtocolHandlertixPixmapImageTypetixCompoundImageTypeTixInitializeDisplayItemsTix_SafeInitTix_CallMethodCmdTix_ChainMethodCmdTix_ItemStyleCmdTix_FormCmdTix_GetMethodCmdTix_GridCmdTix_HListCmdTix_InputOnlyCmdTix_MwmCmdTix_NoteBookFrameCmdTix_TListCmdTix_LinkListInitTix_LinkListAppendTix_LinkListIteratorInitTix_LinkListStartTix_LinkListNextTix_LinkListDeleteTix_LinkListInsertTix_LinkListDeleteRangeTix_LinkListFindTix_LinkListFindAndDeleteTix_GetContextTix_SuperClassTix_GetMethodFullNameTix_ExistMethodTix_FindMethodstrncmpTix_InitScrollInfoTix_GetScrollFractionsTix_UpdateScrollBarTix_SetScrollBarViewTix_SimpleListInsertTix_SimpleListFindAndDeleteTix_SimpleListDeleteRangeTix_SimpleListFindTix_HandleSubCmdsTix_Exitexitstderr__fprintf_chkTix_GetAnchorGCTix_DrawAnchorLinesTixpDrawAnchorLinesTix_CreateSubWindowTix_GetRenderBufferXSyncTix_SetRcFileNameTixComputeTextGeometryTixDisplayTextmemsettixConfigRelieftclIntStubsPtrTix_AddDItemTypeTix_GetDItemTypeTix_DItemCreateTix_DItemConfigureTix_DItemDisplayTix_DItemFreeTix_DItemCalculateSizeTix_DItemComponentTix_FreeArgumentListTix_SplitConfigTix_MultiConfigureInfoTix_ConfigureValue2Tix_ConfigureInfo2Tix_WidgetConfigure2TixGetColorDItemGCTixDItemGetAnchorTix_DItemFillNormalBGTixpSubRegFillRectangleTix_DItemDrawBackgroundTixpSubRegSetClipTixpSubRegUnsetClipTixpSubRegDrawAnchorLinestixConfigItemTypeTixDItemStyleChangedTixDItemStyleFreeTixpStartSubRegionDrawTixpSubRegDisplayTextTixpEndSubRegionDrawTixpSubRegDrawImageTixpSubRegDrawBitmaptix_ImageTextItemTypeTixGetDefaultDItemStyletixConfigItemStyleTixDItemStyleConfigureGCstix_ImageItemTypetix_TextItemTypetix_WindowItemTypeTix_SetDefaultStyleTemplateTix_SetWindowItemSerialTix_UnmapInvisibleWindowItemsTix_WindowItemListRemoveTixFm_FreeMasterInfofwriteTixFm_AddToMasterTixFm_UnlinkFromMasterTixFm_UnlinkTixFm_ForgetOneClientTixFm_StructureProcTixFm_DeleteMasterTixFm_GetFormInfoTixFm_ConfigureTixFm_FindClientPtrByNameTixFm_InfoTixGridDataGetIndexTixGridDataGetGridSizeTixGridDataGetRowColSizeTixGridDataMoveRangeTixGridDataDeleteRangeTixGridDataFindEntryTix_GrDoWhenIdleTixGridDataCreateEntryTixGridDataSetInitTix_GrCancelDoWhenIdleTix_GrGetElementPosnXFillRectangleTix_GrFreeUnusedColorsXCopyAreaTix_GrAddChangedRectTix_GrScrollPageTix_GrFreeElemTixGridDataDeleteEntryTixGrDataFirstRowTixGrDataFirstCellTixGridDataDeleteSearchedEntryTixGrDataNextCellTixGrDataNextRowTixGridDataSetFreeTix_GrFormatTix_GrSelectionTix_GrSetSizeTix_GrSortTixGridDataUpdateSortTixGridDataConfigRowColSizeTix_GrConfigSizeXDrawLinestrtolTix_GrGetCellTextTix_GrGetSortItemsTix_GrFreeSortItemsqsort__printf_chkTix_GetCharsstrtodisspaceTix_HLAllocColumnXDrawRectangleTix_HLFreeHeadersTix_HLComputeGeometryTix_HLComputeHeaderGeometryTix_HLResizeWhenIdleTix_HLCreateHeadersTix_HLResizeNowTix_HLCancelResizeWhenIdleTix_HLFindElementTix_HLElementTopOffsetTix_HLElementLeftOffsetTix_HLDrawHeaderTix_HLItemInfoTix_HLMarkElementDirtystrrchrstrncpyTix_HLColumnTix_HLHeaderTix_HLItemTix_HLIndicatorXRaiseWindowXSetClipOriginXCopyPlaneAddNewLineAddNewBitmapAddNewImageAddNewSpaceAddNewTextTixpXpmDisplayTixpXpmFreeInstanceDataTixpXpmAllocTmpBufferstrcasecmpTixpXpmSetPixelTixpXpmRealizePixmapTixpXpmFreeTmpBufferfopenfseekftellfreadfcloseTixpInitPixmapInstanceTix_DefinePixmapXCreateWindowXRootWindowXGetWindowPropertyXChangePropertyXFreeXQueryTreetkIntStubsPtrXCreateGCXFreeGCXDrawPointXSetClipRectanglesXCreateImageXPutImagelibX11.so.6tclPlatStubsPtrtclIntPlatStubsPtrTclTomMathInitializeStubstclTomMathStubsPtrtkPlatStubsPtrtkIntPlatStubsPtrtkIntXlibStubsPtrlibc.so.6_edata__bss_start_endlibTix.soGLIBC_2.3.4GLIBC_2.4GLIBC_2.2.52ti ^ii jui tk$k$k$k$˭k$ӭk$ܭk$k$k$k$ k$k$k$"k$*l$2l$ l$:l$* l$D(l$ 0l$N8l$X@l$`Hl$ Pl$jXl$ `l$rhl$Xpl$yxl$*l$l$l$l$l$ol$¾l$xl$̾l$Ll$Rl$?l$Dl$l$l$l$m$m$`v$Mhv$<pv$;w$w$w$&w$1w$w$4w$=w$w$x$Fx$Qx$\0x$8x$f@x$pHx$\hx$px$zxx$x$x$x$y$y$ y$ΰ0y$ܰ@y$Py$`y$py$y$ y$.y$;y$Cy$Ty$]y$jy$|z$z$ z$0z$@z$Pz$ɱ`z$رpz$z$gz$fz$|z$|z$z$z${$В{${$0{$ {$@({$p0{$8{$@@{$H{$0P{$@$X{${${$){$*{$1{${$8{${$<|$0|$@8|$A@|$FH|$ܭh|$Kp|$Lx|$P|$|$T|$U|$]|$M|$e|$k|$p|$}$t}$z }$p(}$H}$P}$X}$`}$}$}$}$}$*}$}$}$}$}$}$~$~$ (~$0~$8~$@~$ `~$h~$p~$Ѷx~$*~$~$~$Ѷ~$ ~$~$~$~$ $$$ $@$H$(P$9X$Xx$$($9$ $J$\$m$ $J$\$m$ $~($0$8$*X$~`$h$p$$$̷$߷$ Ȁ$Ѐ$̷؀$߷$ H$P$X$`$*$$$=$*$$ȁ$Ё$$$$/$9$($C0$M8$V@$`$_h$fp$ux$*$$$Z$*Ђ$؂$$$@$P$X$`$`h$p$@x$К$$$P$$p$@$$$$$)$*$1$ $8($X$<`$$e$k$p$Ȅ$tЄ$z؄$p$$$$$*8$@$H$P$p$x$$$ $$$$ $$$Ѷ$*$ $($Ѷ0$ P$X$`$h$ $$$$$Ȇ$(І$9؆$X$$($9$ 0$J8$\@$mH$ h$Jp$\x$m$$~$$$*؇$~$$$$$̷ $߷($ H$P$̷X$߷`$ Ȉ$Ј$؈$=$*$$$$8$_@$иH$۸P$*$$0$؉$$$$E$ $*@$LP$X$$$$`$p$p$p$ $Ȋ$0Њ$؊$$$$$$ $($)0$*8$1@$`$8h$$<$Ћ$@؋$A$F$ܭ$T$U$] $M@$eH$kP$pX$x$t$z$p$$$$Ȍ$$$$$* $($0$8$X$`$h$p$ $$$$ ȍ$Ѝ$؍$Ѷ$˭$$$Ѷ$ 8$@$H$P$ p$x$$$$$($9$X$$($9$ $J $\($m0$ P$JX$\`$mh$$~$$$*$~ȏ$Џ$؏$$$̷$߷$ 0$8$̷@$߷H$ $$$$$_$c$z$*$ $($Z0$*P$X$`$h$$κȑ$pБ$$V$$$p$й$P$ $($0$P8$@$pH$@P$`$X$$$)$*$1$$8Ȓ$$<$0$e8$k@$pH$h$tp$zx$p$$$$$*ؓ$$$$$$ $($ H$P$X$`$ $$$Ѷ$˭$$Ȕ$ѶД$ $$$$ ($0$8$@$`$h$(p$9x$X$$($9$ Е$Jؕ$\$m$ $J$\$m $@$~H$P$X$x$~$$$$$̷$߷Ȗ$ $$̷$߷$ h$p$x$$V$_$ܺ$$*ؗ$$$V $($*$v$0$|$Ș$И$$$$$($0$H$`$ҽx$$$|$$p$$$@$L $($0$$*$;$$Ț$К$ٿ$$$$($%0$H$EX$`$x$j$;$$$;$؛$$ $$$ $8$H$P$h$$$$P$$Ȝ$؜$@*$$$P$k($38$0@$8X$Jh$p$k$R$R$ȝ$0Н$g$|$$~0$H$X$F`$kx$$B$$$B$$$$$* $($0$8$X$`$$8$ȟ$П$؟$$$$$$*8$@$H$P$*p$ x$$($*$<$$6$D$Q$$^ $l($y0$P$@X$A`$Fh$ܭ$$$$ $ȡ$С$ء$ $$$$*0$8$=@$H$h$p$x$$*$$$$آ$$$$ $$ $($ H$"P$6X$I`$$\$h$s$$$ȣ$У$$e$k$p$($t0$z8$p@$`$~h$p$x$Գ$$($$˭Ф$ؤ$($$ $$$ $@$JH$\P$X$ x$J$\$$$$$ȥ$$$$$ $($0$8$*X$p$$$!$+$Ȧ$5Ц$@ئ$J$$T$U$$8$[@$kH$lP$*p$zx$$l$*$L$5$` $X8$H$0cP$Xp$$)$*$1$$Ȩ$Ш$ب$*$$$$*0$8$@$H$ h$p$x$$ $$ة$8$$$ $($H$P$X$`$$~$$$Գ$$(Ȫ$Ъ$˭$$($$ ($0$8$@$`$h$p$x$$$$$Ы$ث$$$H$P$X$`$*$$$$$$$8$($0$8$@$`$h$p$x$$~$$$ԳЭ$ح$($$˭$$($ $ @$H$P$X$x$$$$$$$Ȯ$$$$$h$x$`j$$N$`j$Я$$$`m$Y$t($`m0$YH$X$Pm`$Yx$$`m$Y$$`m$Y$$O$ $$8$H$P$h$*x$`$$$P$ȱ$N$$$p$($E8$ @$X$jh$`p$$$`$$Ȳ$в$$$@$$($0$$H$Y`$x$$0$$.$س$$$$ $8$JH$P$mh$.x$P$$$R$в$2ȴ$Gش$$$$$($8$@$h$p$x$$*$$$$ص$$$8$H$P$X$`$$R$]$g$*$q$rȶ$zж$$$L$r$*($0$8$@$*`$h$p$x$*$$$$з$ط$$$*$<$@$@H$AP$FX$ܭx$$$$ $$$ȸ$ $K$L$P$ $($Y0$8$X$`$=h$p$$$$$*ȹ$й$ع$$$$$$ 8$@$H$P$ p$"x$6$I$$$$$$$$$$  $($$0$*P$X$`$h$$e$k$p$$tȻ$zл$pػ$$~$$$Գ0$8$(@$H$Xh$p$(x$$ $$$$ؼ$J$\$$ $J$\ $($H$P$X$`$1$8$9$C$$$Ƚ$н$*$$!$+$($M0$\8$j@$`$Th$Up$x$$[$k$l$*о$zؾ$$l$*P$Lh$L$*$$($U8$@$`$$$$%$$$$=$p$$E($@0$DH$cX$`$D$$$$$$@$($=$@ $ 8$EH$`P$$h$cx$@$$$|$`$$$$$P$/$($0$`H$=X$`$|x$E$P$N$ѿ$$N$|$@$N$($0$`$h$p$x$$$$$*$$$$$~$$ $ȳ$)$$$*$$*0$TH$6h$=$*$$$$$($$$$$*$$$$$D$S$a$*0$D8$S@$aH$h$p$$8$$$$$$$ $($*H$P$̷X$߷`$$$̷$߷$*$<$$o${$$ ($o0${8$@$ `$@h$Ap$Fx$ܭ$$$$ $$$$ $$$ $*@$H$P$X$x$~$$$ȳ$$$$$$$p$ $($0$p8$X$`$!h$+p$$T$U$$$$@5 $8$*H$@5P$h$x$$$$E$$E$ E$$j$@5$($8$@5@$X$h$PDp$$$ C$$$ $$$$ >$$($:0$H$X$P@`$x$J$P($k$.$>$$$R$p2$2$$ ! $8$H$ !P$p$L$$$$$ $*@$H$P$X$x$$$8$$$$$* $($0$8$X$`$h$p$$R$]$g$*$$L$r$*$$$$*8$<@$p$@x$A$F$ܭ$$$$ $$$$ $ $=($0$P$X$`$h$ $$$$ $"$6$I$$$$$0$8$@$H$kh$ep$kx$p$$t$z$p$$~$$$Գ$$( $($XH$P$(X$`$ $$$$$J$\$$ $J$\$$($0$8$@$1`$x$$$$$*$$!$+$$T$U$ $@$[H$kP$lX$*x$z$$l$*$)$ $<($X$@p$*$$$$*$T$M$e$8$tP$p$$*$$$$h$$$T$($)@$`$$e$$t$H$)`$$$$$*$8$$$*($<0$`$h$p$x$*$e$$t$H$)`$$e$$t$($0$8$@$*`$h$p$x$$$$8$$$ $@$<H$x$@$A$F$ܭ$$$$ $$$$  $e8$X$tp$$~$ϳ$$$$$U$`I$O$`J$M$$v$0}$pd${$cH$L$$$$$$*$$=$$$T $U($0$n$n$n$so$o$jo$o$ o$e(o$0o$a8o$@o$Ho$Po$Xo$ `o$ho$cpo${xo$o$o$o$o$o$ o$%o$o$o$+o$o$o$/o$`o$3o$o$tx$x$y$hz$y$(y$Lxz$L8y$Hy$Xy$ hy$xy$6y$Cy$y$y$y$y$y$y$mz$z$i(z$8z$pHz$rXz$$($А$$$x$ $$`$$ȗ$X$x$=$$E($ر$X$$$p$ p$(p$0p$?8p$9@p$Hp$Pp$Xp$`p$hp$pp$xp$p$p$p$p$<p$p$p$p$dp$ p$8p$p$ p$qp$ p$vp$]q$q$ q$q$ q$(q$0q$8q$ @q$Hq$Pq$yXq$`q$hq$pq$xq$q$bq$q$q$Nq$q$q$wq$lq$gq$q$q$q$q$q$q$@r$zr$Zr$r$ r$(r$0r$8r$@r$Hr$Pr$GXr$F`r$hr$pr$xr$r$r$r$nr$r$r$Ar$r$Yr$r$r$;r$r$r$r$hr$s$s$s$^s$ s$M(s$D0s$o8s$}@s$Hs$[Ps$_Xs$P`s$Bhs$ps$>xs$s$s$s$Vs$s$s$s$Hs$ s$s$Ss$ s$ks$s$s$s$t$t$t$t$ t$(t$0t$Q8t$@t$Ht$Pt$WXt$T`t$ht$pt$xt$:t$ut$t$ t$t$t$|t$!t$"t$t$t$#t$t$t$$t$t$Ou$u$xu$u$ u$(u$0u$8u$@u$Hu$&Pu$'Xu$(`u$Xhu$)pu$Ixu$*u$u$~u$Uu$u$u$u$,u$fu$u$-u$u$.u$u$5u$u$/v$v$0v$1v$ v$(v$0v$28v$@v$Hv$KPv$4HHy#HtH52z#%4z#@%2z#h%*z#h%"z#h%z#h%z#h% z#h%z#h%y#hp%y#h`%y#h P%y#h @%y#h 0%y#h %y#h %y#h%y#h%y#h%y#h%y#h%y#h%y#h%y#h%y#h%zy#hp%ry#h`%jy#hP%by#h@%Zy#h0%Ry#h %Jy#h%By#h%:y#h%2y#h %*y#h!%"y#h"%y#h#%y#h$% y#h%%y#h&%x#h'p%x#h(`%x#h)P%x#h*@%x#h+0%x#h, %x#h-%x#h.%x#h/%x#h0%x#h1%x#h2%x#h3%x#h4%x#h5%x#h6%zx#h7p%rx#h8`%jx#h9P%bx#h:@%Zx#h;0%Rx#h< %Jx#h=%Bx#h>%:x#h?%2x#h@%*x#hA%"x#hB%x#hC%x#hD% x#hE%x#hF%w#hGp%w#hH`%w#hIP%w#hJ@%w#hK0%w#hL %w#hM%w#hN%w#hO%w#hP%w#hQ%w#hR%w#hS%w#hT%w#hU%w#hV%zw#hWp%rw#hX`%jw#hYP%bw#hZ@%Zw#h[0%Rw#h\ %Jw#h]%Bw#h^%:w#h_%2w#h`%*w#ha%"w#hb%w#hc%w#hd% w#he%w#hf%v#hgp%v#hh`%v#hiP%v#hj@%v#hk0%v#hl %v#hm%v#hn%v#ho%v#hp%v#hq%v#hr%v#hs%v#ht%v#hu%v#hv%zv#hwp%rv#hx`%jv#hyP%bv#hz@%Zv#h{0%Rv#h| %Jv#h}%Bv#h~%:v#h%2v#h%*v#h%"v#h%v#h%v#h% v#h%v#h%u#hp%u#h`%u#hP%u#h@%u#h0%u#h %u#h%u#h%u#h%u#h%u#h%u#h%u#h%u#h%u#h%u#h%zu#hp%ru#h`%ju#hP%bu#h@%Zu#h0%Ru#h %Ju#h%Bu#h%:u#h%2u#h%*u#h%"u#h%u#h%u#h% u#h%u#h%t#hp%t#h`%t#hP%t#h@%t#h0%t#h %t#h%t#h%t#h%t#h%t#h%t#h%t#h%t#h%t#h%t#h%zt#hp%rt#h`%jt#hP%bt#h@%Zt#h0%Rt#h %Jt#h%Bt#h%:t#h%2t#h%*t#h%"t#h%t#h%t#h% t#h%t#h%s#hpH #H=#UH)HHw]H|l#Ht]@H#H=#UH)HHHH?HHu]Hl#Ht]H@=#u'H=l#UHt H=j#h]#fffff.H=h#t&Hl#HtUH=jh#H]WKf.USHHHhH-k#HtHEP0HEHH@0H[]ffff.ATHW1UHH5zSHqH:H5c1HL`@UHHAHtH@[]A\fD1@AWAVAUATUSHhHk#dH%(HD$X1Ht$ H|$Ld$@HHt$HHD$HD$HhH}HtHP0H} HtHP0U(E1E1H}0@N<7MIHtHH9tHR0IHtHrH9tHR0IHtHWH9tHR0I HtH<H9tHR0I(HtHR0HLR0H}0AID;m(YHtHP0E8E1E1~HU@HAJ<2IP0D;m8|H}@HtHP0Lm`LYLLH|$Ht$fDLL%LL:H|$HuLLLLLt$HMtCfDLLHI~P0HI~P0HLP0LLLt$HMuH}XHt-HHP0HH|$pHH|$HHD$L|$HLxHLP0HD$XdH3%(uHh[]A\A]A^A_\fff.AVA1AUIH=ATUHH5`SHHdH%(HD$1CH H551HL`H'HT$HHAԋT$IPHHH@DpH{`HCHC C(HC0C8HC@LkHHCXCxHI\$HHL$dH3 %(uKH[]A\A]A^fL%Qg#HI$M $1E1H XHH5ZHA@1ffffff.AWAVAUATIHUHSH(dH%(HD$1Hf#HL$HT$ HAu~D$ E1E1#QfDt[uAID9t$ ~0HD$LHJ8Ht\uǀAID9t$ HVf#H|$HP0AHL$dH3 %(Du)H([]A\A]A^A_Hf#H|$AHP0AWAVAUAATUHSH(HL$HD$H5HL`LsHtFHe#E1H %LH5֟HL1A@AH(D[]A\A]A^A_@L=ie#HKAHLHIIHK AHLHIHKAH|LHIE1HH)e#LHHD$HHD$AED$K(E1E1Dl$EMfAID;k(HC0J 0uLAA$LHHtfDHsH ۞E1E1H$LHtAuuC(E1E1.DT$Hl$AID9s(HC0J,(EtIHULH|$H|$IHLHt@A/DDl$T$?AHD$Lt$AINl( 7MFE1$HLHHIM9IHHHu@HT$H(H[]A\DLjA]A^A_fDDT$Hl$IDT$LHPDT$MHcD$H|$E1MH H5!HTH1A@<@AWAVIAUIATUSHHLaLdH%(H$1HHD$HIb#HXLLHLHD$MHHT$.D$hHD$pE1HtDm8B<Dk8DT$hHC@EX IE1E1Lc@HD$pMAJ<8ID;t$hI$|McIE9~2@D+T$hHE@ML{@AIHcHD$\HD$h1HL$H q(Ɖt$HC(D$H<DL$\HC0ELt$pHL$`1L%\#Lt$ HL$L4$Dl8R IH@0HD$pH8IEHD$pHxIEHD$pHxIE HD$pHx|$`IEIE(H|$pHtI$P0MM/EH9D$\HC0LNs(Lt$pL%W#E1Lt$DHC0H{N4IvSH<$H5 11HH<$H511LxHHT$HHALpI$HP0C(AUI9|~B1 EH9C(~1HC0L$A$tIT$H<$HID$0EH9C(HD$(HP@Ht : HD$(HP8Ht : HD$(HP(Ht : HD$(HkHpHh >L%V#HD$(HHHH I$AHHt$@H<$Lt$@L<$AI$HאLLLHl$(I$AHLLHMI$HM AHLLI$HM(AHLLI$HMAHpLLI$HM0AHXLLI$AHM@H?LLH}XI$AH &HڑLLT$I$A L4$H HHt$@LI$HsE1HHPU#LHSH<$H H5E11OLt$pCxH`LLHDHl$xL$$Hu@H}XHtHEXLH_LHtHl$xHHMXHuHLtzHD$HL$H@0L,8HAEI} ˆAE ˆAE ˆAE HHH9HCI}HHH9HCI}HHΡH9HCI} HHH9HC I}(HajHC(HcD$LHC0H\HD$0H(L$8L$LH(HD$`M $E1H<$H jH5J01A@I$H|$hP0H|$`HtI$P0fDE1L%R#HL$hHT$\H<$I$uD$\H{0D$C(D$I$Dt$B4P8Dk(HC0E9McHLt$pHD$`IDMLt$ HD$DAID;l$OS(DI$L)HT$hH<$HcH4HT$HL$ 1҅uq|$`uj8OIAHD$pH8IFHD$pHxIFHПIF(IF0IF IFI$H|$pP0LHUHk0J|=3I$H|$hP0zD$H L4$Ht$@H HٌLI$HsE1HH Q#LH1HC HC(HHC uHHC?HHC C(D$LNI$HL$`HT$XH<$HLt$pHLKLHL|$xMtkHH\$HLMIǿI|$IGI|$IE91IELHLHLd$xMuH\$ML$X*HD$h1Ll$pHH\$0HHD$ HD$\HD$DHT$`I$L4HL$ H<$H4HT$|$\[LMILHHl$L|$xMuTD3L|$xMt@HD$hIwH8hLHuI$IP0I$IP0I$LP0oIHD$hH8IGHD$hHx1IGLH\I$H|$hP0CH;D$XH\$0I$H=H$H$I$H=H$I$H=H$LH|$LLl$xMHL<$LI7DH$H|$LHl$xHI$H='M $1H$HHU1Hs AI$H}H$H$LLI$0 YH$4I$%H<$H/H<$1HH<$HD$H|$hC(I$P0H lH Ht$@H<$)I$AH HHt$@H<$L%qL#I$dH$H$H$~eH|$`H>I$P02I](LH}~HH9uI$HLt$pHD$I$I$mI$GDAWAVIAUATIH='UHSH(H1Ly dH%(H$1AA)ՃEuyH5bLHHK#AE1H LH5džHL1A@H$dH3%(D%H([]A\A]A^A_DLpLH'AfpHHIvHKhHChHS`HHCHHCHCHC HC(HC@HC0HC8HCPHCHHCXH7J#HNHcS` )ȃlHKhLAA HA HAL\HHHL9%HPLLHtH=HLuHHSf.H=HLuHHSfDH=yHֹ u HHS@H=ރHֹH=KHLXHHS(FH I#E1H H5HLHChHT1A@H{hHtHH#HP0HChHH#HAHP01ELHD$ HIhEuxEuXHsHHt >IEHHLLyH߉A|IEX>HHS JH H#HHHG#E1H LH5HL1A@HAH=HֹufHHS0H%HxxIE4Hx`1LHqG#IuE1LHG#HHI]XbH=xHֹ u HHS8bH=cHֹu/HHS@CL$ LLHHIzH=)HLu HHSHH=Hֹ HHSXHCHHHHD$HHF#HT$ HHHT$H Ht$H҂11HHt$HHD$H.F#HHt$H HD$H{HsHL$ LHH_HE#E1H -H51HL1A@HE#Ht$HH USHHHwH=##HtqH-E#HHUpHEHsH;t(H{HEtMH5H; HEH;pHEH{P0HEHH@0H[]fH[]fH5 H; fffff.AUATUSH(dH%(HD$1>t!HD$dH3%(H([]A\A]fL%D#HHH=#II$HuI$LHtHXH;kuI$HpI$HH=I$H{P0I$HP0>t fAUIHLATUSHHC#HHIuH=##HH-C#t HUHpI]Hu%cHELcH;P0HEHP0MtCLHEH3I}tHEI}H5 HEI}pfDHELH@0H[]A\A]HDH H=#$Dκ1?#H#u!Ht u0HuHS#Hfffff.*H(dH%(HD$1fYD,*AYDOfDD$,*ɁYOft$ H,сNfD$ H B#HH|$dH3<%(uH(Dff.AWAVAUIATAUSHH #dH%(HD$1H+HHH=HNHH9AL%H^A#LHHxHsHLHHKL5LA#A|$HsIHT$IHH=@##T$IIP(HL(L`HhHIGt?L%@#HHHI$I$HHH0IHH=1HL$dH3 %(H[]A\A]A^A_f1AL~DHDLLP01fDH1@#1H=@#Hŷ#MaAWAVAUATUHSHH(dH%(HD$1t=L~HH>HL$dH3 %(,H([]A\A]A^A_L5i?#HILxHuHHAHI#L=P?#tTHT$LH=#7#H‹D$u\LbIP(H}HHID$HCI\$1CIH=##IHT$P(HT$IHLhH@LLHBIHx0]DYfAWAVAUATUHSHHt%HHH[]A\A]A^A_L~|1L%>#HI$II$H}I $HLHHHH P Lp}} HIM U Lu]}HIL==#HIIAU Au A}H8HL$6HL$HHAV Av A~IL8 HHAI$H0I$L0I$L0H1[]A\A]A^A_f.H[]A\A]A^A_fff.AWAVAUIATUSHHHdH%(HT$81҃HD$(HD$0~2HqH=z HHD$HtALzHډLH\$8dH3%(HH[]A\A]A^A_DH<#HL$0HT$$HsLHtKLt$(MtH;#LHP0H|$0HtH;#\$HR0D$nfDH;#HL$(HT$ HsLHuHcT$  )ȃLt$(HD$f.D$$HL$HT$0HHL$I, ILd IM9I7H(uH:#HT$E1HsLHILHLt$(HD$HD$D9D$ o1D$=L$D$$HL$(H\$0HlLdfHL9H3HxuHE:#H "vH5%vE1HLL1A@*DD$1E5A9~(MHu11H̆LHA@A9MHt$L11HsA@H[]A\A]A^A_fHH4#HE1H pH5pL1A@Hff.AVL54#HE11H tAUIATIH5sUSMA@A|$81H51 fH5ID$@M1LH(1HA@AD$8P9̃~I1H5L1@AD$8~ID$@IHc1LH41@[]A\A]A^1fUSHHH-3#HHEP0HEHH@0H[]f>t f.USHHGtH[]f.HwH=#?#HH-]3#t HUHpHEKHH5dH0H[]DATUSGHt []A\fDHGHHwH?HrE1HHX15L%2#uJHH=p##Ht I$HpI$KH[]A\H0H5fI$H;H5r I$H;pffff.USHHGtH[]f.HGHwH4rH?E1HHX1ptH-2#H;H5krHE HEH;HpH[]ff.AWAVAUATUHSHHdH%(HD$1t=LoHH.HL$dH3 %(4H[]A\A]A^A_L5Y1#HHqHIxHI̩#L%M1#HT$LH=Ω##INjD$tmI$ P(LhH(IH{ID$ILAd$H5F8#LMgILH,L01IoI$H}P0H{訿HE1DI$H=##&AAUATUHSHH(dH%(HD$1t9L0pHH袽H\$dH3%(H([]A\A]L%/#HHqHI$xHItI$HL$HULHPtfI$HL$HULHPuI $D$ LT$t$D$ OLfff.AUATUHSHH8dH%(HD$(1t9LLoHH袼H\$(dH3%(H8[]A\A]L%.#HHqHI$xHItI$HL$HULHPtfI$HL$HULHPuI$HL$ HU LHPuI$HL$$HU(LHPuM $D$ LDD$$L$ T$t$AD$ IHʃtL@nLSH-#HHqLHxHǸHt H1[IHʃtLmLHHe-#HHqLHxHt H8h1҉Hffffff.IHʃtLpmL鯺SH,#HHqLHxHǸHt H1[AUH5um1ATUSHH8dH%(HD$(1eHH5Cm1H;HrH-,#H&mH5%mHHEH#bL%;,#HEHlH5mHxHEHlH5lHxHEHlH5lHxI$HH55#1HH貳I$HH##H#H#H#LE11H3#$L #HHAՉ¸;HEHLl$AH }#H"lH5$lDj#H y{L 1WHELHAHkH5kHEHAH #HkH5kHEHAH #HkH5kHEAH #HkH5ikHI$HL`1HH5#H=2#AHEH51#H( HL$(dH3 %(H8[]A\A]@L%)#H=j#I$HO*#H={jHI$HD*#H=ejHI$Ha*#H=HI$H)#H=3jHI$H)#1H=)#HI$8I$H=2*#@I$H=Q)#@ָ ff.HH )#1HkH5lL1A@Hf.DHGHGfHFHt6H9t/Hc DH9t HHuHFHHVH HVHVHc@gff.HFHtHBHBBfBHHBBHBHtJuHcHHHBfDJÐHBHt=Bu7HNLFL9t4H9tOL9tbHcH<HH<HHHB.JHFHFHBfDHcHHFHBH@HcHHFHHBfff.UHSHHt>HIHt+HvH;stKH9t^HcHuHHuH4 HUH[]1 HCHEHEH[]fDHcHSH4 HUHUHc7HSH 2HUHUAWMAVIAUIATUHSHH8dH%(HD$(1MAGIGD$ Ht^E1+fEu"M9wtELHHwIGHt.L9uLHH˲D$ M9wAuf.HL$(dH3 %(D$ uf.@AUIATUSH(H-4$#dH%(HD$1HIHEHHt6@H{HtHUR0HEHpHELHHuHELxHELP0HD$dH3%(u H([]A\A]臭AUIH]ATUHSHL%u##I$HHtHH[]A\A]I$HM $E1H LH5sfH1A@f.AUIHb^ATIUSHHH-"#HEHt38tIE1H[]A\A]DIEH1[]A\A]HEHLM1E1H eLH5eHA@AUIATUHSH軫HI谫HQ"#B| McHR(LHH-J|#:HfB#HH[]A\A]AUATUHHHSHXdH%(HD$H1HH!#IHLHHAt=HLP0H11HPHL$HdH3 %(DuNHX[]A\A]fDH5d11LH貳uHH1uPE1A&fDAVAUATIHUHSHLH dH%(HD$1pHH5wd1HIHH5\d1HLhHHT$ LHAIH #LHP0D$ u(IEHL$dH3 %(uH []A\A]A^MLd$tVLLd$"@Ht$LHpu,Ht$Ht"HHtH|$Ht4 f1@1IEqATHʃUSHHiHqtHLmc[]A\]DHHmHtHHHH-#IHHEHMH11L@HELP0[]1A\ÐHq#1H5mHHPfAWAVIAUATAUSHdH%(H$1H|$6H\$ L= #H\$AD$E1H,HD$f.IK<.J+II9uIcLt$DHIHHL0 AILHD$LlfHL9t'H}IHL9ufDH;\$t IHP0H$dH3 %(D~H[]A\A]A^A_@L=#<IP(HHD$ HD$H#HcLt$HD HT$ HL0 AHLh胧AWIϹAVIAUEATIHWLULSH(He#H|$HH HNHHD$HLAHWLH|$LLE}pIHB<P(IL0L`1E~fDHTITHA9Ll$LDLT$LmHl$AHAHWLLHHHP0LT$HLP0HLP0DH([]A\A]A^A_@H([]A\A]A^A_Lt$HLL 1E1H tLH5]_LA@랐AWAVAUATAUHSHHLiLq~lH#H$VLHHHILHHPHt[HLKH[]ED$LLA\A]A^A_HHHH[]DL^A\A]A^A_بHA#HHH.#H ^LH5^L YMHL1H$A@H#HHHxHH5^HH[]A\A]A^A_fH#HHH#E1H LH5]HL1A@뫐AWAVAUATAUHSHH(LiLydH%(HD$1LHMHIHT$HH1Ht$HLH蠪HtCLKED$LLHHAHL$dH3 %(H([]A\A]A^A_fDH#HHLH 9]LH5^]L WMH1H$A@HHHxHH5]H@]fDL\HDH螦8fH#HHL 1E1H ^WLH5\HA@諢ff.AWMAVEAUATIUHSHHLl$PHT$H1Mt 1HAUHt+HT$HH[HEM]A\A]A^A_H@L-A#HIEMUMHL VH [H5[HH$1A@IEHHxH߹HH5[H[]A\A]A^A_ffff.AWHAVIAUATUSHHS8~]H[@E&ALlHL9t7H+D8euLLHuHH[]A\A]A^A_f.1f.fSH@dH%(H\$81t^HAH$HA0ufWF f.wNVf.HC H{HT$HHLd$IL$H P$dL谟L-a #11HsLHMEA0t!IEHH5P IEHpHD$xdH3%(ugHĈ[]A\A]DXf.A\V 3@Fx!VN99)щN C菕ffffff.AVAAUATIUHSHH L-y #dH%(HD$1EtIEHT$H18tfIEHH #HL$IT$AvLD$ HHp;~>fuFA;*D$C $f.uCYD$C 1H|$dH3<%(H []A\A]A^D~efuCD$ CD*D$ YC(XC C 뙐*D$ YCXC C fT$Sn@_*CYD$,CHCD$ C8˓f.黛ff.HHH=A#ܖfff.ۘff.HHH=#nfffff.HHH=#龙fffff.HHH=#fffff.HHHH=#{ff.HHHH=#ff.IHHHH=m#ȏHHHH=P#f.1ATIUSH H#dH%(HD$1HHHHt'f.HHpHHHuHLxHLP0HD$dH3%(u H []A\HcɃ< ww HAMHcH@HLHLHLHLHLHaLHEATMcHIUK,SHFH辐HH=LHHHNH9HH=KHNHH9HHH=KHNHH9HH=KHHNHH9HH=KHHHNH9HH=KHHNHH9H#HLE1H CLH5bKL1A@[]A\fDE1[]A\fffHCTf ffAWDAVAUIATỈUSHH;GHT$0DD$uHHt${Ht$AA8uHT$ L讌uT$<A;VAFt9HL$(IFHfDH#MEL .CH =VH5ILLHD$(H$H1A@HH[]A\A]A^A_If.IF(H7L|$(T$8LH|$0IoHЅML5.#E11H BLH5BLMA@AmHcH@HH|;I11H5HLE1D}@ED$2(fH.UL1A@AH0A9E91D9l$MHsuHTL1A@fD_I1H54IL1@HD$(HhIFT$8HH|$0HHL[]A\A]A^A_H#L xTMH5GLLLH lHD$HD$IF H$HD$(H1A@MHSE1H AH5GL1A@MHSE1H @H5@fL1A@f.AUATUSHHHu7t%L%$#I$H5/GH( WtL%#I$HtL-#HFH1I}UI$HߺH5uEI}HFH1"affff.AVAUIATIUHSHHPdH%(HD$H1z#t^H3Ht0L57#IHSHMLHH3HuHD$HdH3%(uiHP[]A\A]A^fL5#7z#HH5IIt<$p z#aIH=FR OxUSHHVdH%(H$1fAAA)V DA)V )E9AMȉ9L`E9DAN9OA)A))H-"fDL$HfDD$ ft$ HHEHHD$tD$pHT$HD$ HEH$dH3<%(uIHHHD$1膋H莁IxR(H >HHD$IH1PIINAHG2HHIIN AH12HHIINAH2HHIAHHF>HHIAHL$H,>HHIEAT$IvH >H$H߉T$0AIHHD$jILd$@HL IHHIVHH"HHHxH{H"L(HHIHt$HHIHt$HHIHHMt1LkIuIH߻L H|$HtIR0H|$HI\$R0D$IHD$0yH"IVHHHHxHHD$(AV(E1E1ۅDd$4Ll$8MMH\$ E@AIE;u(}gIE0J uHv"HS HsH|$(HHHIH|$ $AHHL蜂tMH\$ MH\$ Dd$4Ll$8D$0tiAD$LT$HMd MfIULHA~HMEE1$HHLHIM9uHI"HT$HHt$HqIE1LH"HHIvH E;E1E1H$HH蓁)IvH ';E1E1H$HHgIvH ;E1E1H$HHE18t IE9f(IF0N,AEtIIUHHLIHLH~t{DLC#HcD$0HT$E1MH \H5-HHT1A@9IHt$HHIHt$HHIHH }IHߺH1PHcH HtH1ffff.HIl#H=Bl#Hf.ATIUHSHl#Hu0HHtH3H~uH[]A\D1MtHr"HLE1H [H5V9L1A@H[]A\ffffff.McHSKtHHȃHtH1[@1@[fSHH蓃HtHHPH[1[fff.HH@HH@0HH@8HH@ HH@(AUATIUSHG~*L-]"11ېI$H|(IEHP0A9\$I<$IL9tH&"HH@0H[]A\A]H[]A\A]ffff.AWMcAVAUMATUSHHAH|$ HT$t=H"KTE1H ,H5,L1A@HH[]A\A]A^A_ÃH$H$HۉYHD$0H~SH-b"HL$0CF$\$HHDIHHEADIP(IFI9u\$EAGH|$ImLl$(HIDHD$8CHDHHD$.yILLt$0Ll$D$fDM}A?t,fDIwHtH]LH0wtTI8A?uIIL;l$uD$trHD$(HL$8HD$(H9H8HxIoAINIID$HcƒHAVINL;l$HUHTCHmH"E1H ,XHH5a-H|$ L1A@H$|zH-"HEP(H$HD$0HY1AWAVIAUAATUSLHdH%(H$1MH<$Ht$LD$RLwEH~YAME1HHD$O,&A}t/Mf.IwHtHHutxI8A?uIL;d$uH"E1H WHH5?,H<$L1A@H$dH3 %(H[]A\A]A^A_$Ht>HL$J !HtH)"D$@ILHt$H<$HHL$J !HvH"D$@ILHt$H<$HJH-"Ld$ 1E}LHEE(tHEH51>LHHD$H Ht(Ha"IE1D$@Ht$H<$HHEH<$HIuHMLLL9tH$HEHHELHHEL1_uf.HHdH%(HD$81ILD$(LD$ HT$ HT$HL$H@pD$HD$D$P$~HL$8dH3 %(uHHdu@HHdH%(HD$81ILD$(LD$ HT$ HT$HL$H@pD$HD$D$P$N~HL$8dH3 %(uHHt@AWIAVIAUIATULESHH$Ld$0L$dH%(H$1HD$HT$HT$ HHL$ HDHEH@pL$$HD$(yuMHD$0~sHO"L@L$LL$LLL$At=ALuDH$dH3%(u{HĘ[]A\A]A^A_DHD$0p$E1tHP$HDmDu+vuD;mtE1|D;uuE1esHH0dH%(HD$1HHDHHDHHDA@t%HHAu+A@AtbH AHtոHAHHHu"HHD$dH3%(HfHH@A u:AtTHHbDAu At$1냸yfDHH.Hr@HOrffffff.A9ɋD$7D)ɃAAIAAtwHL$1D9TA)wHDuu7HD$ADDDDAAA)AufHD$DDAAAHt$Dsfff.HD$8tDD9JtMHB0L1Mt,HBT$ D $EAHHT$H8LTpHf.D$ 9BuD$( D$0uD$8t@AWIAVAUEATILUSHHXdH%(HD$H1DD$(HBHt$8D$L$,HL$@1D$H("y$DD$(EL$,LDt$HLD$$D$$$smIG0D$DT$(t$,HD$(HD$HD$,HD$AG$EO"pDt$(D$Dl$,Dt$(Ew$Dl$,Eo $Dl$$Eo(E,tIHT$8Ht?HHuHT$8DD$$LHD|$D,$EHnHT$8HHwHT$@Ht?HHiuHT$@DD$$LHD|$D,$EHwHT$@HHEwHD$HdH3%(uHX[]A\A]A^A_oUHSHHH"HP(H(HXH@0H@@@H@8@@@DH@HH@P@X@\H@hH@`@p@tǀǀǀH[]fDHs+HHM"PHP(Hǀ@ǀHǀ<ǀ8Hfff.H"SHHWpH1H=e"HH`H"H[HH@0DAWAVAUATUHSHL@dH%(H$1uEL%n"HhIIH"I$ $HupPH@@L%)"LI$LLl$HD$tHD$hH @H}pLHHD$(HHHD$ I$HHtHMpI$HD$H9PHD$HH@H}pLHHD$ I$HHtHMpI$HD$H9PHD$HHH}pnHHtHMpI$HD$H9PHD$HH(L91Mt H}xHusH$dH3 %(uHĨ[]A\A]A^A_kfAWAVAUIATUHSHtHH@L="Ht IHII}PHPHupH}hHH@AEt AUHt AULL5+I1AtLI$L="Ht I0II|L@HupH}hHAI$AEHI(HuL5*0IAtHI$L="Ht I0II|L@HupH}hHAI$HI(HtAEAuHI(HuHH[]A\A]A^A_11@USHHHPH-"Ht HEXHs0HtHHb-HD8H@LKtLCpbSHK0CCp9St֋MstH{PPC C$SS(FCC,t@CXH)‰C S([DHs8Hu?Hs`HC0HXH5,ZfH{8tʋC@H)‰C S([fDH"H{HS@HKDHH?pHC0S@HSSDSfDSH0HtHCH@Ht H[D[fDSH5"HHH1aHHC0[ffff.AUAIH"ATUSHIHL%$"HGLo0M$HpHx $DAH{0H{PHtI$XHCPHSHHt*HCM $IH HpHxAHHCPt@Mt#L9k0tHH[]A\A]HXH[]A\A]H[]A\A]fDH{H5"1H`HC0t fff.GdHtÐkff.S_duR[fDH)"HHH5o1H 1@[fffff.>t f.AVHH=tD#AUATUSD#HIthLpL%"I^`Hu)f.HH{HkI$HR0HuI$LP0[]I$LA\A]A^Hp[]A\A]A^ffffff.AWIH5AVI1AUI1ATMUHSH(H?dH%(HD$1 VH}H511HXHVHT$LHID$u@IYMtD$A$HL$dH3 %(H"H([]A\A]A^A_fLL$LLI7H}AVPL{"HHLHLH}IL$HHELHChILsxHCp=XLL$L$HHǃǃǃC`CdHǂHǂH(HǂHǂHǂuIL $H{L $IYqRA#t@HHm"H=A#A#HH="RH={"RH="RH="HRfHHH2fAWAVAUIATLcUSHHxdH%(HD$h1AoHqIHpYHHD$AhAM}H\$Dd$HD$LAMMfH H=HNLH9A9tIcM,HITAH9l$LkLyP H H=-HNLH9uH"LH3H|$HxHIuHT$hdH3%(Hx[]A\A]A^A_fDHLl$HLHD$pHQH"IE1H IH5LL1A@H|$H\$MuqHl$@D?#H d(HA@?#1\YH511HRH511HLx@RHHAHuHl$IHL$Ht$0HT$H|$(E1H\$(Lt$0HD$ aHIH@x1IUAt$LPXtBLLbLDHRlH"LHLH0L%"HI$I $1Ht$H1@H"KTE1H H5H߽L1A@NDAWIAVIAUATIUSHHHwH=>#dH%(H$1?>#HtzH@H@`HukH@Ht_H;uHhHtQMt LLQLHfH$dH3 %(HH[]A\A]A^A_f.L-"HT$0HHH$IEIEH5HH,$IGHhXHLIMHH,$HIEH5HH,$H+HLIMHH<$HL$0IwILD$(HT$(HŅIGHD$IEP(HT$,IHHhHt$H=<#<#IËD$,uXMSI2HtHChHtLT$HLT$IB`H<$IGIEMz`d111HSXMdgIEL\$hP(HH@`HiHD$H5"H|$HH0LT$L\$MSpLffffff.AUATIUHHH=;#SHdH%(HD$1HT$;#IŋD$IEHPHX`HHUHHPHUHPHUHPHUHP HU HP(HU(HP0HU0HP8HU8HP@HU@HPHHUHHPPHUPHPXtHH@hHt H{HH[HuHD$dH3%(H[]A\A]H!"hHP(H@`HH@LHHHELHCHEHCHEHCHEHC HE HC(HE(HC0HE0HC8HE8HC@HE@HCHHEHHCPHEPHCXHs"H0I]7dJ@ATIH~USH H-b"dH%(HD$1HHHEHt DHxAT$@HEHHuHD$dH3%(u H []A\IAWAVLAUATUHSHHL%"dH%(H$1D$dIH H}pLHHD$HHHD$I$HIHtHUpI$H:PHLH}pLHHD$I$HIHtHUpI$H:PLHH}pJHIHtHUpI$H:PLH(L9H$dH3%(uHĘ[]A\A]A^A_HHHH}"HHP(Hǀ@ǀ<ǀ8HfDH!"SHHWpH1H=E"HH`H"H[HH@0DAWAVAUATUHSHL@dH%(H$1uEL%"HhIIH"I$ $HupPH@@L%i"LI$LLl$HD$tHD$hH @H}pLHHD$(HHHD$ I$HHtHMpI$HD$H9PHD$HH@H}pLHHD$ I$HHtHMpI$HD$H9PHD$HHH}pSHHHtHMpI$HD$H9PHD$HH(L91Mt H}xHMH$dH3 %(uHĨ[]A\A]A^A_ FfAWAVAUIATUHSHtHH@L=ϻ"Ht IHII}PHPHupH}hHH@AEt AUHt AULL5I1AtLI$L=V"Ht I0II|L@HupH}hHAI$AEHI(HuL50IAtHI$L="Ht I0II|L@HupH}hHAI$HI(HtAEAuHI(HuHH[]A\A]A^A_11@UHPSHHs"HP(H5"HHhH1HH0AHCHC0HCCC C$C(C,C@HC8CDCHCLH[]SHw0HHtJH"HSHH=Y"1HH`H"H[HH@0AWAVAUATUDSHHxdH%(HD$h1HFET$H HDHC0LKHLCDC@8H@>HC0KHSDC C$rASCS(C,[H5SH0Ht`HCH@Ht H[D[fDSH5"HHH1>HHC0[ffff.ATIAUSHIHHm"HGLg0LHpH"Hx $DAu8H{0tAMHtL9c0t>H[]A\H[]A\H[]A\H{H5M"1H[=HC0DUHSHPHH"HP(H(HXH@0H@@@H@8H[]fffff.HG8HtGX\HG0G G$VAWGW(G,f.11f.HCSH0HtHCH@Ht H[D[fDAT>USHt4HߋkDcE9kt0HCH@Ht)H[]A\f.HG8fDD9cu[]A\DSHHCH@Ht H[@[fffff.ATUSH8HL%/"HHHG8HBHI$I$11HHCHpH;u@t I$HI$HHOHCH@HtH[]A\f[]A\ff.H"8HH@(ff.Hq"SHHWpH1H="HH`Hj"H[HH@0DATUSHHDu5H"HhIIH"H $Hsp¸uHC9tH{xHRD1H[]A\D9u1AWAVAUIATUHSHt VHt AULL5I1AtLI$L=T"Ht I0II|L@HupH}hHAI$AEHI(HuL5Z0IAtHI$L="Ht I0II|L@HupH}hHAI$HI(HtAEAuHI(HuHH[]A\A]A^A_112fSH5p"HHH18HHC0[:f.AWAIH"AVAUATUSHIHL%"HGLw0Lo8M$HpHx $DA)H{0~L{8M9Mt>I$HHLI$11LI$LL{8MHCIO@HPH9H "LJXLHxIWXH51LH$H SA@HC8H[]A\A]A^A_fDI$HH"L0I$HH5"LL{8MHt!L9s0t@f+fAtH"HxE1LAXH5>H !1LIWXA@-H{H5]"1H6HC0dfUSHHH8H-$"Ht9HEHH9HEH{811HEH{8Hs0HtH@HEHSHH=;"1H`HѮ"HHH@0H[]AWIAVAUATUSHT$LHVdH%(HD$x1H~8L$HHD$HD$0DD$HT$XI11LDLt$`@$AWE1H|$0E1LLl$\$T$(AWDT$ T$HT$T$L$HT$X9$DD$HAًL$LDl$LLL,$D$$D$Z9IW0EOAt$LًHT$HHT$HT$LHT$AW$T$H7IO0EG$B/E,xAD wA|)9A< DL)9|$HDL΅ۋt$LmIWI8H"HrH;w@t HI8HHT$XH|$0LL"HEHCH;H0H;w@t HEH;HEHH[]offffff.ATUHSH}#dH%(HD$1tiu=HH=##HH@HL$dH3 %(H[]A\HT$HH=##IċD$uPID$빐L%"H=m##I$I$H=#UfDH"HP(1HH(H@H@HID THB IA@8A@PHBXB\AǀHǂD UHBA@<A@TB`BdAǀHǂDŽKDŽKHHRH"I\$HH$"HH0Hc1\@ff.AVHAUILATUSHHH1dH%(HD$1HF"HxH1HHIL57"HT$HsLI8H[HdHH=3HNHH9HH=HNHH9k@H"E1H /HH5LL1A@fDH\$dH3%(VH[]A\A]A^1HHc׋L$M H4B| TLF(C I|$G0u떐HH=LHNHH9HH=0HNHH918tME1H HH5L@A@@IHcLJ HALH>ILHI9t HtHDŽHBLfD11f.AWAVAUATUHSH~ DrAt?H"H1HH5ML1A@H[]A\A]A^A_DH"L)HIIHHLxH'HHD$AIHL$IG8-xixnxH"IwLHHxHHDs%I_IIEL9HtAH"11I}HIEI}H0H;w@tH"HLLLPYfDHy"E1H OLH5HL1A@H[]A\A]A^A_f.I}I_tME~IDHLLLtI}G0t1H[]A\A]A^A_@1Hy@HtIffff.UHSHHH"HxHt1H%HtH[]f1Hm"E1H HH5]HL1A@1fffff.~iAULlATIUHSHHHHL9t'H3HLHuH[]A\A]@H1[]A\A]1AUHcHcHATUHSHH(dH%(H$1HDT<H<<ukL, Ld$H 1FD@LHF"L VMH H5HHLJD HHPXH$1A@H$dH3%(H([]A\A]fDL, Ld$H &1FD@LH"L MH -H5HLJD HHPXH$1A@eUHY"H5ZH89@HLd$DL@DD H /L1[H "1HLHL1A@ ffffff.AWAVMcAUMATIUHHSHHH"dH%(HD$81Ht$L$HT$,HHL$0LAD$,PvnLH H5zE1LH1A@H|$0HtHP0H\$8dH3%(D9HH[]A\A]A^A_HT$0H2&~b.ynaH=MHcD$IcH1IDDTdA`D#t%uFHHHT$(H8LcL$McK IJDBDTT$(AH"HHL$$Ht$HHPLcL$McH|$0K IJTBDTD$$Ax&H8-x0xID$1BT(KDHAZLcl$AMK,ADTKD.AAfDHA"HT$HHxHHI|$HILcL$McK I JTBDTM,n@Hр"HHT$HHxHubHUI|$HIuLcL$McK I JTBDTM,ԃ|$,t;KDHH|$01A-fDLE1H LH5H%"HT$0HL$$LD$LL$HHt$HHRPLL$LD$T$$KDHH|$01AKDH1A ATAUSHHLHdH%(HD$1H"HT$H8IcHc͋t$HL H< B| TLG(B4t H\$dH3%(H[]A\H AMLI AN\(C4tHuELLIHH9t HtHDŽHBHjf^AWAVAUATAHUHSHHH8H1dH%(H$(1EHHD$AHD$H-i~"HD$ L-|"L={"E1HD$E1LE1Kt1HHA@Ht$DDHRLEK411HHA@HD$H|$H BFDX1ILE11HQHt$HA@I_AIIHD$A@E1H$(dH3%(D4H8[]A\A]A^A_HmL-z"L%z"E1E1K4HD|$W tnKtHF t~IIuAIIAuH|"E1H =HH54HL1A@A>A2Ht$DDH߉D$DL$Lc|$HL$McD$Hl$ HKDwDDH 1HZ|"1HHH1@DL$ AWAVAUATUSH(dH%(HD$1AMxLt$HIHHMlf.IW-8H=HfH=HCH=HH=HH=HyH=HH= HH= HSH=mHH= HH=G H=H= HfH=% Hr5H=^HYH=HCMLLT$LT$HHH=$HNH9L HH={LHNHH9WHH=HLHNH9HH=LHNHH9DžDžjfDJiznH=H}zrzMA1HLHmTIM9G1H\$dH3%(H([]A\A]A^A_flvzlME1DzUHx"1H5HH1@댐zu ME1Of.zttH=Htzb zMAzp8z.Hx"LILHHPuL1HLLHm"E1H =HH5,HL1A@gAWAVIAUATE1UHSHxH dH%(HD$h1HD$PT$dHT$Tt$`HL$(Ll$LHHD$WHLt$0D$8HD$HD$HHD$B%0|H|$B'~oHE1LLt$`I@HL$D9<)~DI$ LL$DLD$T$8LL,$Al)+\$HA,0+\$LD9A.LIHpH|$B'9HD$0P@ID$8HD$0 HD$ It B\$`HD$(@ H|$(W9~W HD$(@,H|$(W(9~W,HD$hdH3%(Hx[]A\A]A^A_DzAA9ELt$`1\$HArB4A H\VHLTH1P HL9AuHcHT3 APIItEt$A,fD98H(IUAAGf.T$Pt#QQQ HL$dH3 %(uZH[]A\A]A^A_ÐEtAH(HBDEAH\11A1H1AVAAUIATIUHSHHdH%(H$1HHH=•HNHH9tyHH=HNHH9AHUAvLLH$dH34%(HĠ[]A\A]A^fDAuHMHULL$LD$LLm@HMHULL$LD$LL;uҋT$I t$HHC"HH5LP5@HQC"E1H HH5́LL1A@^IEAAHL$ E1E1D$$LoDL$(D$,Hl$0DD$ H dHD)ȃD$D$$D)$1HB"1HLH1@TH5!LP?IfAWAVIAUATUSHdH%(H$1<tƒ<u/H$dH3%( H[]A\A]A^A_fDL<Atڍ<AV0ڍ4AW|4Ax& APA9} APAT9~ ATEGxAXD)9| JAXEO|A\D)9| SA\))Iw(AD$LBD$TCH@"HD$8AA~8H\$8IV@L؉|$A~0AD $F Aȉ|$LAA<@t3A~(/ IHD$8IO(LLAAdžP'AdžT'AdžXAdž\(H$L$<HG1H HVMHD$@1IHD$(HD$xHD$0HD$|HD$8El(\$HEu $Dh1EA~IE1fDHD$8I DLL$0LD$(LT$HAH$Sl$xl$|E9A,uAAG0HD$( DEAHHhHD$@$M9Xu;\tH>"$H|$@HA<pLM(EEAE~KAC1LA@HtHfDE~HII1fHd H(H9uHL9uA0A4D1D)H)HA9DOA9DOEEEACL$L$LDD$(DŽ$$A@LLD\$HDŽ$$DŽ$DŽ$iA4A0DD$(DL$HAAA4L$L$LDŽ$$ALDŽ$‰$$T*$Lt`A0AtLLщ$LD$A4$A$$L)$eA<SLA<A<+DT$LEEG L$TT$LI>'I;G(HD$@^D$TIVpE1DL$LHt$@1ɉ$I>I(HIFH\$@An0H;X(A+;A+TA+P$$HD$@DA8H$H$EI`~sDIACE1LAAH|HE~BLHq1f.HHH(` H9@@@ @uIM9uIYA0IDA41)H)HA9DO9NȅEA~Dt@At@LDŽ$D$$A$A0~?t;I`AT$LP$AA4@ P(T*P,E~4E~/I`AA1L@ D`$@(Dh,tHtDAtA0I`LP TP$AA4P(T*P,6I(An0ADEDTwH9"HAE11L|$`EIH\$8LC<:HA;X|$HH\$(D ADA;P0y%JHAD|$P1L\$XEH\$01DIE,/IE;\BT ADA;TH|$0HqHH4>H4~ @u THQH|$0H:HHtkH0HxLHQHD$(HA$H|$@DJ T$P$D@D$D$$JI(HASHBl ;QEL\$XD|$PHAH\$(AsID| 9zL|$`I ~E1E1@A~a1DEH;A}LHQHDJ4"HHHtH0HxuAHPI(EH;A|DAID;)|AHHD$8HI>HhEO|EGxIw(AtL$L$LDL$(DŽ$LDŽ$$T$$AP$LA0DL$(wHD$8Iv@LHP AHH 5"HD$8D$TAPIVpDL$LHt$@$ETI>_$$$$$MV$D$$))AI4$Ht$@I:DHH]4"I HD$8Offffff.AWAVAUATUSHHHdH%(HD$81H(T$HD$ LvIHAE1HD$HDL$HL$L)AHAD$$u\tTD$ 9P~ PAD$$9X} XAD$(9T~ TAD$,9\|DHAfEt HDHD$8dH3%(u"HH[]A\A]A^A_D\A ffff.AWAVAUIATIUSHHiHt$T$dH%(H$1H1HH=yHNHH9H H= HNHMH9I8LEM<$LͻAHH=JLLHNH9)ۅBHLH=FHNLH9|$H2"L gLIEHPXH$IH zH5H|$1A@H$dH3%(Hĸ[]A\A]A^A_M@HH=HNLH9)ۅ9|$AAV^D$0D$8D$4T$t'HD$HL$ HT$4LTHIHPIhXHA9}IT$ AH|$P0HD$HL$(H A9|T$ 9t1H|$8dH3<%(uHH[]A\A]A^A_HcËT$ HD$( fff.AWMAVMAUIATAUSHcHHHCHƉHP@HHhE`~t1teAtvAGAW HL$@AAWH[]A\A]A^A_ÐA*YEx,UlH|$@AUpH[]A\A]A^A_fDM,u1AGEdE,HDsDHDAW AGH\$@AAWH[]A\A]A^A_ff.AUIATIHUS1H8dH%(HD$(1H$HL$LD$LL$HHcthme~n~d~I$ H,HlEA09HtHt${1H|$(dH3<%(H8[]A\A]~auJ~xuD~u>I$ H,HlEA09}UЅyEvfDH"HlLH H8uEƸ\eDAWHcAVEAUIDATUHSHHHdH%(HD$81H L$H|$DD$L$HAL$LL$ HHT$4HPHHD$4DD$LL$ uPHAH|$L@`L$$LDL)MtT$4A $H\$8dH3%(uZHH[]A\A]A^A_DDLL$(HL$ DD$HHL$ DD$LL$(HAD;zDn=ffff.AWAVIAUIATUSHHW,dH%(HD$81D$D$t uCMtD$AMtD$AEHD$8dH3%(HH[]A\A]A^A_H\$L%"Hl$ IHCHD$I$HLHt(fDH@@X;|I$HHuIXHH;\$uO5DHA"SHHvHHHC tH@H1[@H[fH"SHHHHHC tH@H1[@H[fH"SHH?HvHHHC t H@H1[ÐH[fH"SHHHHHC tH@H1[@H[fUSHH-;"HHEH{pHEH{HpH[]ff.AWAVAUATUSHhdH%(HD$X1H|$8Ht$ HEAIA9D$ ~ Dt$ L$ Hc1ɅHE1HPHT$ HIcH$HD$HD$HcHD$(HHD$0HD$H4$H|$P@HIHL$(HO"Ld$@HT$0HhLHHQHL$ H<HtIH@HHP@HIt HxHt AHLpHLHuHLpHHxHHP0H$$9D$ /EtH|$8{HD$XdH3%(uHh[]A\A]A^A_WAWAVAULcATUSDH(dH%(HD$1EE1҅IAHEIEIЉD9E~DAωEAGD9DLLN迣ED$D;|$tlKDDIDEM$HD$MHD$fDDLAU@Ht-H"LpHHA^XpHT$LAUHLpAD9|$uHD$dH3%(H([]A\A]A^A_DDD)LL9OD@D$D$A9|ۍ EDED9DLLDN踢AGAD$讠f.@SH`L\$H\$LT$ A1 AE@0t'tt4[f.tA)t)A)A)[tA)t)[DAVEAUATUSLd$0Hl$8H\$@L\$Hx:LwE11MEj IA9|9t~D9uHHEl AD+Ex9LG11Lz HA9|9t:D9uHHA| A;HPA$PP U@ A[]A\A]A^É}E,$yDAWAVAUAATIUSHL$,H$Ht$0HT$8DD$$DL$(HL$hD$dH %(H$1E9D$IcMcHIHHD$`H$HD$@H$HD$HHD$|HD$PHD$xHD$X\$$D9UHl$`Y@I$(HH@J0B Hu)D;l$,D;l$(;\$$D9H(A9EtHD$@I$(I$`AىEDDT$ HD$HD$HHD$HD$PHD$HD$XH$I$(DD$|D$L$xI$`HT$8H@I|$J0D( H"HDT$0E)AL$D $D$D$H6)DHAI$(DT$ H@J0L( H(A9 AID9l$($H$\$(Dt$,I$(L$$I$`HT$H$EAHT$HT$|HT$HT$xH$DA9H"$DD$|$L$xI$`L$\$$D)ƒI|$)ȉ$HT$0\$DHH6AH$dH3%(HĘ[]A\A]A^A_D9|$$jI$(HcL$,Lc|$$HPKH4H@ >$t!$E$$DŽ$HL$h9PMPEfDHL$hQ 9PLPDHL$hQ9P#PHL$hQ9P P :f.AWIAVAUATUSH(Ht$Lt$`~vL%"LI0LD$ILLI$8LD$tH([]A\A]A^A_f.I$IpHUL8LD$t:H(LIP[]A\A]A^A_qLgI$IpHULD$L8LD$uI$IpHU L8LD$uH"I LKILH$IuPEM9~EMȋMu 9~uM HL$H q$9~ DEy A9|D]DI,E9DU I(A9|9}}D9}uA9}ME9DM fAVIAUIHATUISH dH%(HD$1H%"HHPHL HH莟HD$Hu2fHHHD$HtL;`uA8P>@H"(HP(A8LpH@ L`HP181HL$dH3 %(u H []A\A]A^t@AVHIȉHAUATII$`USHK"HLt$PH$D$PdH<%(H$1I|$MD$TD$XD$\HD$`D$pHD$hD$tD$xD$|DŽ$DŽ$DŽ$xT$xL$Xt$PuD$|)D$x$DD$\T$TuDDŽ$)Ѓ$HD$"H=7?"鲕fHH"H11H5]LH]A@Hfff.AVIAUAATMUSH HHdH%(HD$1,HLH\$Hu6uDH{ H7"HHP0HLH\$HtAEu A89C}HL赕{ H"HuH{ 0fHD$dH3%(u H []A\A]A^螎f.@AWAAVE1AUATIUHHSHHL-~"H1dH%(H$x1HAHT$88cIEA8H;薍IUHD$ HHD$ HH=1@HHHNH9jL\$@LKLCH ]\,L1L\$(McL\$(HD$" HEP(DpHLpHEI7LL8t8HEHP0AHL$HdH3 %(DHX[]A\A]A^A_fHEHSIwL8AuACC CCHD$HZ"HH;KS 9H"H;SC9t$*HD${s KSH|$ t$$L$(T$,D@D9~DD$ D@ D9}DD$$D@D9~DD$(D@D9}DD$,xH|$p Ht$ HP1DL$訒HEHP0DL$HD$< HD$E1D$EH!1H5bXLH1@AafHQAuLQL軌A+CPwhKuSu{ pf.t>H|$1LDL$跑DL$DSCgDK S9HD$1HDL$H"DL$렉D$HEHS IwL8DL$tDIG8mTxaJxx@x6HELDL$C HEDL$HSIwL8DL$`IG8mxaxxxHELCDL$DCC )CC4{Ld$0DL$L;HD$LLLčHD$8DL$Ht>LLDL$HD$HD$HUHR0LLHD$8DL$Hu‹Cf.LIDBHHH5="H=>"鯌f.DAUATUS1H(H.5w"dH%(HD$1H?HH)qKx"#YL%Z!HD-Pw"H=Aw"I$I$HH=)w"I$H5w"H=w"v"I$DH=v" v"H-w"Ht$1H}茈HT$H9UIt:tyI$HDI $1H5TUH=uw"1@cv"HL$dH3 %(H([]A\A]uԸ DHpv"؅DI$H5TH=v" fDL%!HHT$H=v"I$ uLI$HT$HH=v" u/D$L$f.g1f.WI$H5SH=^v"1 Lu"L%h!HHT$H=1v"I$8u:I$HT$HH=v"8uT$9T$I$H5SH=u"1 t"`˃ff.HH HtHH@tt1HÐHB`HHB8HAW1AVAUATUSH9~vHi!I)AEƃHP(HD$I"fDDLItIG9|%EA_tۉDLIOIG9}HD$H[]A\A]A^A_H!HHH@0ffff.AWAVAUATLcUSHHHdH%(HD$81H=tt"tJH!1H5jRHHPH\$8dH3%(,HH[]A\A]A^A_fDL1HIL藁HH=KHNLH9HH=SYHNLH9cIULD$$E11HHzIULD$(E11HHASD$ Ht$0H HV΅D$(T$$9HcL$ 19T09T$(AILAH*s"BDs"r"r"D$,AHD$,Mu AHD$IHD$Ol%0L%Qf.HH=QHNLH9fHH=QHNLH9H H=QHNLH9)IEr"HD$IM9#M~LHLHNLH9IIH=PHq"IMLL$$E11HH臅thfIMLL$(E11HHWuE1D$ T$(D$$H!E1H PLH5+PHL1A@@IH=CP Hp"H=OHuep"fDT$ LL$IE11HH|to"Hp"DDH=OHgp"*f.H=yO HCo"f.E1LD$1IWHD$D=p"QD|$(Dl$$HDD$,t$ DDB~HIE)H ,EHE1EuIIIc{E~&DCT<H5;^1ItM9uH L$(MT$$t$ tjHcDLH赁?n"t[=,o"tg,n"HH!KTE1H /H5 /HL1A@3<HH!HHH!H=m"HL%!H=m"I$I$Ht$H=m"wH!H LH5fME1LH1A@Ho!E1H LH5aMLHR!E1H LLH5CL|f.fAVAUIATIUHHSH Ht$dH%(HD$1nzH\$D$H9u!HKHL$CH˄t |uH=RHAA)EEu7HCHD${@tzH@H\$H{@t^y|uHV!AE1H ZHH5[LLL1A@HT$dH3%(Du,H []A\A]A^DfWf.D$wL$AMzAWAVAUATIUSHH$LD$HD$ dH%(HD$x1WHD$ҋHL$(\$ X\$X\$4X \$0X\$ HD$DILyH$HD$HHHlHD$8NIH=jKH~H=0,HD$D$ II9MwL6yHH5FKLHOHH9tH54KLH%H5%KLHHq!IuLH $IHPD$DII9D$sH|$ tTH\$|$;{HT$d$(f.bztH\$K9L$0E9L$EHT$ HD$\$ \$(\$XX\$4X\$0X \$X1H\$xdH3%(HĈ[]A\A]A^A_D$D$ Ha!IuLH $IHPD$DD$0^DH)!IuLH $HPuD$DD$ D$%@H!LHHT$8I7L |fT$HD$ T$(@H!1H5HH @HD$${HD$Hl$PH H(H@誀H 1HL1@H 1H5HL1@Lt$H =(H1EF \H 1HL1@H 1H5EHL1@EFH 5=(H1H 11HL@1H!E1H (HLH5:LL1A@ueH 1H5GL1Hl$P@ 1;T$ HC!HcE1HTH5GH zUL1A@GH 1H5!(L1Hl$P@HD$Hl$PH 8<(HD@1cuH!ILHwHE1H1"LHHHGHt'HX!HGHHHffffff.+w8+HPt+1;r\}GHR0HuDJ\9|HR(Htu9}B\fBX9}HHHA8HttH@ Hu1H9HEHHt/HB0Ht&ufDtH@(Hu1fffffff.ATIUHSt F@t0H^0F@Ht fHHLH[(Hu[]A\@AVIAUAATIUH-!SHHEXH5+"H=9"MELH|yAHEH[]DA\A]A^AWIAVIAUIATUHSHdH%(HD$1MLrHIH:!HP(MHtHT$HL@HXMtAEDHHvMH(LwMHCH$LwHCPH,!HH[HkLkHHC HC(HC0HC8C@CDL`MHǃCXC\HS`HChCpCtID$HHL$dH3 %(H[]A\A]A^A_HMǃHHǃHHǃMHCHHCPfDE1GHe1^[qff.AWAVAUIATIUSHT$ u xMPA$M9D$ I$AD$XA$HFHrHzAUDDHEHH0:DDAECLA|8EXEt M;T$AL$tAT$xAD$pA|$|Am<AD$p1OAL$tAT$xAD$|A~`E11 AmLpMtLvANI$AnJ>A9l$X}Al$XI(A;H |D$ F AEDD$ Il$0AD$XHAD$\t~ugu AxtT$ HLA~7M$LLL1IAL A9L }AL H(L9uE\AD$\Hm(HuH[]A\A]A^A_AAD$XADŽ$;I$H HB(H fH(H9B HuAIADADEAEDЉAD$x1 AD$t1AD$p1HxPt^PXDH\D@E9@DD)ʉуAɃAAIPA;AEDVHx8P@DHDD@E9xu HWufDHxHu!H=,HHf.> uHht fDH1!xHH=H,HHfff.ATHIUHSHu#L@HS0Ht LHH[(Ht+<uH!HsHHH8@[]1A\fHFp@VP@u3.HH9u&@H9tH@x@WP@tfff.F@F@u~ HH9tHFp@VP@u؃H9u(fDH9tH@x@WP@tfff.AVAUIATIUStHPHvNM9XQM9`dM9h'A11MWoH(A9~;I$H|HtHzuHLiI$H|fDI$HtHx)oI$I$H!H9tHP0It$HHtIA8Ht HHpI|$PHtHP0I|$HHtHP0I|$hHtHP0HL[]A\A]A^H@0f.IDžhM9`IDžXIDž`IHHhI$9|,t(**^*^AP$HAff.AVAUIATUSHHdH%(H$1HGL5L!pxP|C8Ћt$D$Hl$0Ld$ IL&LEt$IL$H\$@\$8H |/T$(PL$0D$ H߸qI11HL@1H$dH3<%(~HĠ[]A\A]A^Ð+D$:L5Q!Hl$H1HL$LHI8HL$t DIHUHqL8u܋t$T$gfffff.ATIUHDSHĀLD$HH\$dH%(HD$x1L$H M9$dH߸pH}11HLot(Hj!H}H5;H HH}pHD$xdH3%(u H[]A\gAWAVIAUIATEUSHxHHt$0L$(DL$DD$ HD$Pt D$ I}M9PGxDW|D$H/E9E~XEEftAXD$(AFpDd$XAuDt$(|$(9NljD$@In8Hu@Hm HuI^0HtvD$@ED|$`Lt$8MIEЉD$dl$d@u+k|CxDE9~S\D9T$ L9XDc\H[(HuELt$8MD|$`AX I^0HDd$ Mk\K|DE9A9HHM9PDFDND$@DD)9D$HDDDAD)A9|UB A9LHzH|$0D$D$$AL\$(DT$ hDT$ L\$(DH[(HHx[]A\A]A^A_ÐANXF!IUPEDT$@DL$hHD$Au< $L$Dt$Ht$0ADT$@<t$Lt$`d$Ld$`D$LPD$`PM;XD$DD$lfDIPI9~8t$(AUD4Vt$(,H[(AHAHD$8I9P9l$ }|$drD$H9D$@dD$XAL$@HT$PHt$0ADID9AO,$I?k,@L$(DL$DEHt$0HLD$LAD$LHt$8I9P9l$ D9t$(,$AL$@HT$PI?D 0Ht$0dkED$XD$@AEDAE8AA+D$DAUIHH1[]A\A]A^A_LX{@|$ tYH!L }IH H5BLLHEHPX1H$A@H[]A\A]A^A_IT$HLKHtcI;tVIRfDH!LLE1LH H5L1A@H[]A\A]A^A_1shfD1H9PSHt;HvJHSBXHR0Hu fDuB\HR(HtH9u[@AWAVAUATAUHSHH8DdH%(HD$(1t~HHHIJHHHJL= !$A9tH߉1HBIH1HL$(dH3 %(cH8[]A\A]A^A_ÐH\$H EHQH!1HHH1@1띐L=q!HI6HI8u $LIHH!IVHL$At$LD$HHpt6~tn&륃u*YD$,$HCS8L$@|ڍPڍPt+$1HDd$KHt@XA$rHPH@0Hu1HGAWAVAAUIATUHSHHAHLAH3HA9~ HLIE1LP*fEL9t[LC0MtjLDAuEAAD9tEuEAtHsALDjL9uDHD[]A\A]A^A_fDLC(MuHPfDH9tHHSLB(MtH9`HL@AVIAUIATAUHSHHdH%(HD$1H]EHH=a HND$HH9H H=HNHH91HH=HHHNH9AIVAt$L LHD$tTHJfDAtbIVHLFHHAD$1ۅuH\$dH3%(H[]A\A]A^ÐHPHT$H1D$@HH=HHNHH9ulAD$6IVAt$LH IVHLEHt^Hf!HtTH5L1@/DH9!E1H OHH5LL1A@D$H5 HsHP1D$pHPHLHP0ËD$IVHL E1HpHHH 1ۉD$]DIVHLDHH7At""t.D$1IVHLDHHPH_BHPSHH9tHv1H9tFCD[1[@AWAAVAUATUHSHHDDFFHHACHHQHlDBHSK8}XrxJ|t+A9D9~()9))99@A9EDtzH1D$ jHD$ H[]A\A]A^A_jDE9|G0BA9TD)ƉA)E=1H[]A\A]A^A_1E9N))ȉA91fDDA 4)9ODAWAVAUATUSHH(HpHoxLgHHtOHLBH1HH1H/L-p!IEHpP0HCHǃpɋK8DtpxDߍ4~9@|EED+D+HPtDM|UxHu(DE H;g@IċE|DMxHSxH;E11L$?DK8DED+HPDLH\C89DMxDC@L-D!HSHH{MUDD$D$AAu|4$LA~%xHMELHAHU(I9tED$D$LE|H;E1HE1D$Ex$BIELH;h@s8ExDDHhEڍ,PIEIEHhHhH;DHp(D@ >HSxH;E11AHD$$I=HE11D|$D$$ALHFHhHP(I9t@H;HLD$D$E1Dd$,$E1AIELH;hHHtH-!H{HEH(H[]A\A]A^A_:IEHhD(DL-!@IEHsHH{P HfDHEH{H5I HEH{pXL-Ѳ!LIEOUHSHHHHH>Htaxt8HpHt H}!HP0H}vAHpH1[]fDHߺHH1[]H[]@AWAVAUATAUHSHH8DdH%(HD$(1t~HHHI]=HHH?L=ʱ!$A9tH߉1jHIH1HL$(dH3 %(H8[]A\A]A^A_ÐH\$H EHDHP!1HHH1@1띐L=1!HI6HI8u $LIHHݰ!IVHL$At$LD$HHpt6~tI&륃u*YD$,$HSD$Bx$D$\$Q:AWAVAUATUHSHHXdH %(HL$H1ɃtEHUpL=H\$HdH3%(HX[]A\A]A^A_fL%!IHT$(HuI$8tI$HuHT$,H8uIPXAxJDl$,LD2HID$(E^8AAD$AE)A)E҉D$ LLL$D\$ !LHEHM1H5L1@|$IVLLr0HaHPH@ Hukf.HHP8HuOIPLLHP0MHP(HIPH@HP(HH9u1I;PHHHu"fHvHt tDUHHHSHHQ/HøHtHsH.H,1H[]UHHHSHHQ8/HøHtHsH.H0,1H[]UHSHHHdH%(HD$81HLT$4HwHH@H $H !DL$DD$ALT$HI$0uPT$4D$,u$HlD$,H\$8dH3%(u/HH[]ÐHH-H}+D$,,@AUIHATIUHLSHH.Htxt*HSH[]IL$E1AA\A]H@HHuH !ML$LLB$Hc,H[]A\A]H[]A\A]HHuH ^!E1LLB$H,AWAAVIAUIATIUSHH;au {lH +AH7HH=HNHH9}H H=HNHH9t_H H=HNHH9tAHB!HLE1H bH5L1A@H[]A\A]A^A_HH!E1H H5LL1A@H[]A\A]A^A_f{l{HP+I$PLHV8H0L )H1[]A\A]A^A_IULL+HIIUHHNH=hH9HH H=PHNHH9tiH H==HNHH9HL*IGHX0Ht I9t HLHH[(HuLG(1HL*IW8Iw0LHpLt*LLfDAWAVAUATUSHHH$H|$Ht$ LD$0LL$PH\$XD$ldH%(H$1ۅ҈D$G-HeLaHD$lD$@HD$8DlHD$(HD$1E1HD$HMfHH=HNLH9HH=HNLH9HH=HNLH9D9tHcLdIHTAIE9toMgLY' H H=HNLH9GIHD$DIHt$ H|$6)HHD$(AD$@IE9u|$@HD$XH|$Ht$H|$/HH|$0Dt$GH\$0H'HXLpH)؃HxHD$0T$G8D$GL%!H\$pD$qD$pHt$ H|$H`(HHWE1HT$0Ht$ H|$=(HtHD$(Ht H9hHD$8Ht H9hI$H|$LD$HT$0LH|$ HHIHE0T$lHT8Hu Ht HI(HH|$(HD$(H;E8HD$(H@(Lp HT$(IF(IV Lr(L|$ LL&Lf$Et6I$H|$0P0(IHt$ H|$'HHD$81E1Ht!HD$pH9tH;\$PtHv!HHP0H$dH3%(L?H[]A\A]A^A_fH1!HT$HI7H|$H8cvH|$(H|$8+H;D$8HD$8H@ Lp(IF HD$8IF(Lp HD$XHD$8HD$(HD$ HHHD$L%!}HcI$P(Ht$0HHH"H+dHD$ E11HPoM $E1H HT$0H5H|$1E1A@JH|$PHT$PHt$ H|$p%HHD@DL$H /(1L -H|$P#L1H! tL%!€DHqHDI$HL)|R(DL$GLD$PH HD$0HL4$H1,H\$PAUxL%!M $HPHE1H VH5H|$1E1A@Lt$0Hۘ!1H*H5+H|$1L1A@M $HPHE1H H58H|$1E1A@H}!HcE1HTH5YH HL1A@HD$ L$H (LHP1DEDh+L 'L%!HD$0Lu8H@(Lu0Lu8IF IF(HD$8Lu0H@ HE8Lp(IF IF(Lu8H\$pHt$0HcHH.D,pL%!Lt$I$LM $H &E1HH5L1A@HL$8JH9!Lt$HLL E1H H\$P AUATIUHSHL T$ Mt A9LDȋD$ LiE1HLLPHD$ H$T$ ^HHT$ ~JE1ALHHuIH!HsHL1H1@H1[]A\A]H111Hx"tHHH[]A\A]H[]A\A]AULiE1ATIHUHLSHLLHD$ T$ H$xHHT$ ~DE1ALHHuCH!HsHL1H1@H1[]A\A]ÐH111Hx!tHHH[]A\A]H[]A\A]SH_Htt?tt [@H[HtH{HH{[yfH{x@u[fAWAVIAUEATIUHSHHHdH%(HD$1HIHp!HT$It$HH8DL$D9EEu*ELHL$dH3 %(H[]A\A]A^A_ÐIcIHHHxuH!E1MD$H )I$H5sHL1A@1H!IT$E1H `H5HL1A@1YhATAIUHHSHHHHHL$dH%(HD$1H¸Ht>HcD$It$E1HLHNH!IHLEHHHRpH|$dH3<%(u H[]A\ffff.ATHIAHUHLSHHL$dH%(HD$1HHHcD$ttHHHHxHx HcD$HHHHHH@(H1Ht$dH34%(umH[]A\DH!1H5pLH1@볐HHHHcD$HHHHxMfff.AWE1AVAUATUSHHH8T$ HL$HHL$$H|$HdH%(HD$(1HImD$ +D$ HT$E1 LrHLd I.HUH H=HHOHH9uMnIM9uMH|$L6HHHcD$$t$ 1H߃HIHHT$HCHHcD$$HIHHxHt&HxHcD$$HIHHXH\$LHH@DH !HT$E1H H5HLHcD$ HT1A@H\$(dH3%(uZH8[]A\A]A^A_@HD$HL(HD$HHHNHcD$$IHHHxLfff.AVIAHAUIATALUSHLHHL$dH%(HD$1_HHAAtcHHHHcD$HIUAt$HHHxH\$dH3%(H[]A\A]A^@HcD$HE1MELHHHsHHHK!HHHRp뜐fHcD$HE1HsE1HHLHHH!HHHRpJf.AWAAVAUIATILUHSHL5э!H1dH%(H$1HT$I8HcD$A9$AA|AHuH=`Hu>D$ HHHI$9Q tQQ I$9T t@A$xL-@ME1H HUH5L1A@H$dH3 %(YHĨ[]A\A]A^A_@HUAwLL I$Pu A$xtLLHcD$I$HHl$H HHºD@ 1[I1HL1@,HU:Hċ!HL$ It$LHPL$ xMHcD$xIHT$ L8T$ HcD$NA$\T$ 7D$ HcD$%@SHHE1HHHHL$dH%(HD$1rHt]HcT$HH!HHHHztC1H5H@1Ht$dH34%(u5H[ff1H5\H@1DUHSHHH!H<R(~7HH HL(fHZHBB HRH(H9uH[]LIDBHHH5!H=t!ffffff.LIDBHHH5!H=$!f.DAWAVAUATUSHHH(T$HH|$HHL$HHD$KD$ hD$HT$H-hE1 LzHLdfDM7LH LHHOHH9uMoIM9uMH|$LzHHHxLt$HT$1ɋt$HHLsu~IHtHxHD$HH\$HH~H?@Hq!HT$E1H FH5IHLHcD$HT1A@H([]A\A]A^A_@HD$x.HD$HL(HD$HHHHD$H.ffff.AVIHAUIATAUHLSHHHHHtvAAt6HHkHHAt$IU[]A\A]A^H!!HE1HuMEHHRpH[]A\A]LA^H!E1H IUH5LL1A@[]A\A]A^H!HE1HuE1HHRpHfff.UHSHHHHxHdH%(HD$h1HtiHHteDHD@H dH1HC!1HHH1@1HT$hdH3%(uHHx[]ېH!E1H HUH5HL1A@fSHHHH.Ht9HH!Ht0H1H5$@1[f.[fH1H5 @1[f.ATIUHSHHHHHtkHHt4H!HLE[]H HE1It$A\LHRpHAH!E1H HUH5qHL1A@[]A\ff.AUIATIHUHLSHHHHtgHHtkHzt2HHHǃGH 1H[]A\A]fHHH HDH[]A\A]H!E1H IUH5LL1A@fffff.LIDBHHH5K!H=d!f.DAWEAVIAUIHATUHSHHL%q!dH%(HD$1HT$I$8uVHcD$A9E~SxOIEHu#HL$dH3 %(u[H[]A\A]A^A_@HxuM $E1H :1@M $H E11HH5HA@1 ff.UASHHHHHH HHtPHxHxt+HEx@H H1[]fDHHH H}H[]@AWE1AVAUIATUSHHHHHL$0H T$,HHWHHD$8D$,}D$,HT$0E1 HjHLdL}L H H=LHOHH9uLuHL9uMRLL HHHxHD$8HCHxHtHxzHD$0HT$8H )!IuI}IHHZHD$H$D$,D$D$DH tHH[]A\A]A^A_@Ax@LD$,< D$,HH[]A\A]A^A_fAx5IHH. HD$8Hx1HQ!HT$0E1H &H5)HLHcD$,HT1A@MDIL0AUIAATIHUHSHLHHH dH%(HD$81,Ht^L@HT$4HsIDMH !HT$D$HD$L,$LD$4] t)HL$8dH3 %(HH[]A\A]DT$4tԀx@H߉D$,D$,MML@H !Hs$HL 덐L@HsH !$E1HLcfATIHAUHHSHHHH H¸Ht#LBML$H !Hs$HP H[]A\SH HHHE1HHt3HxH~!Ht%H1H5@1[[ÐH1H5@1[f.UHHASHHHHH dH%(H$1HtjH@HtqDHD@H H1HO}!1HHH1@1H$dH3%(uQHĘ[]DfH}!E1H 6HUH5HL1A@fAWAVAUATUHSHL-|!H|$IE<P(HH 1 HHHH9uE1L5.|!@AGI9I$H8N$IEP(HHuHCHhE1H@@ 1H@(@0I@4IH!$H|$kI$H[]A\A]A^A_x@H1[]A\A]A^A_AWAVAUIATUSHHHL5B{!LE11fDJ'HtGH{HtHxt]h Hz!1IUHH=!H`IHP0IIA9IH@0H[]A\A]A^A_HLuH{H[]A\A]A^A_L5z!AWAVAUATAUSHHHG8D+$Ht$ DD$(DL$0D$4D$4x1D$,f.Dl$,AO0Hy!EIW(Ht$ LL$AO4H{DD$(L$ $DAIwHttH>EG4D$(C B HDAEEFD7 H|$ D$D$$xyIGHzEEH9LTHHN49LHNHH9HH='HNHH9+AFIT$AvLLauf.AIL$AVLL$LD$HLHD$Ht/HT$` H9tH` H9uHT$H1H\$dH3%({H []A\A]A^@HHt@` HHuHH H=bHNHM$H9I$8LEH7!E1LH DLH5>LL1A@D1 lfff.ATUSHH0HwhH-B7!dH%(HD$(1Ht HEH?PHspHt HEH;PHsxHt HEH;PHHt HEH;PHHt HEH;PHzH{HL$LL$HIHD$HAH$HD$HD$L%6!H{I$H4$HtHT$HtHHHtI$P0HE1HHH=/!`I$HP0HD$(dH3%(uH0[]A\fDL%6!fAUAATIULSHHdH%(HD$x1tIPqLJL7HUHL$ E1LHHAJtAȹAAAT$ AEx D9T$ AH\$H md1HKH4!1HLH1@ H|$xdH3<%(uqHĈ[]A\A]H4!LHT$ D)A[Au"T$ AA)?T$ D/E1);ff.AWIAVIAUATIUSHxHdH%(HD$h1HlAHH=%{LHIHNH9CHLH=vHNHH9cIH=SHHINH9IHH=݁INHH9IH=INHH9I H=INHH9AA)EEI1IHuDH g LA1BI1LL1@HHtIC tL52!tI1H5ML1@f.ILLAHt$hdH34%(DHx[]A\A]A^A_DILLAfIH=HINHH9AA)EEIH=INHH9H1!E1H HH5ipLAL1A@-MMGLLAMMGLLAMMGLLiAMMGLLIAEH Hd1^H1!1HLH1@dںf.ATHE1UHSHĀdH%(HT$x1HHL$ t$HT$xdH3%(uNH[]A\@Ld$DD$ H Հd1LHd0!1LHH1@2fSHHH0dH%(HD$(1tXH!0!LAL H H5ЅLHCHPX1H$A@1Ht$(dH34%(uQH0[@LL$ LD$Hu*HT$HtHH߉D$ D$ lfff.UHSHHHHwHdH%(HD$81HD$4DL$H $DD$H !AHD$LCHuZT$4D$,u&H6D$,H\$8dH3%(u9HH[]HSHJKRSD$,f.褸@AWAAVAULcATIUHSHHxHUHL$dH%(HD$h1uNHhAHHD$Au_HP.!JTE1H %jH5(jLL1A@H\$hdH3%(Hx[]A\A]A^A_AELuHHDH$fM>L% H H=vHNLH9u IFHD$IL;4$uL|$LL4H[H|-!(HP(` H@LH@HIǶHIFPHXD|$D;AV@AF}zHD$ HHD$HHT$HH=!H4$ܸH|$(u%afHT$H4$H=Ȋ!A'H|$(t>EuHL$H4$H=!LHH=!1LHH$豹HMAUE1ALHt%H4$H=N!1LlLHHH\$@DD$H |(H1_H,!1HLH1@1ٵfAVIHAUAպATIUSHLH0LL$ LD$dH%(HD$(1u6Ht$HAtyAtCIL$AUE1AHH\$(dH3%(H0[]A\A]A^@ML$LFHC$H !HLH?LFHCE1$@H*!E1H {I$H5|LL1A@a諴ff.AUAATIUHSHHHH8LL$ LD$dH%(HD$(1mu0HT$HtGLMLBH Ћ!It$$HHUI$L@XMHL H :H{H5[H$1AHEH{H5; HEH;L I$XH{HAHEH{H5 HEH{1pHH[]A\A]A^fffff.fffff.SHp$!HHH1H=!HHR H`Hg$!H[HH@0fUSHHG<<tq<uJHw@H- $!HtHHEHHR H:PHHE1HH=3!HHR H`H#!HHH@0H[]f.H(H-#!Ht HEXHHE1HH=!HHR H`랐uHwPH-Y#!HtHHEHHR H:PHHE1HH="!HHR H`JDHH#!H1H=r!HHHR H`f.AWAVAUATIUSHH %L5"!IXA$tILHH[]A\A]A^A_L=|"!ADŽ$LI|$ HiIIl$8Ht4H]LmHtHH[HuHMtLAD$|It$I$Ht(II|$IID$HI|$HIt$pHtII|$PIIT$1LH=ڒ!`H[]A\A]A^A_ILH=hSHHx!!H[HH@0USHHHGH?Ht/H(!!HHXH{HH[H]fDH[]Ð>t f ff.AUATIUSHHo8G(G,HL- !H]E,E0HuNn@<fDtVS CK$P SCSE,9U0E,}U0H[HC<uIEHSHsH{(xH{(tH{HHK8Hs(LKLCC0DqI|$ IEHKHSHs(H?pGDM0U PU$A;D$(E,QU0~AD$(AT$,HmHAT$,AL$(AD$HAt$0I<$AD$4 q1AL$(ADBIE1ED$,D$AD$|H[]A\A]@I|$`11`11L- !AWAVIAUATUSH8HL$,D$\GxIDÅEf4M~8EfHA)M3DMAN0T$xAv(AD$$+T$,DNAL$(AT$ E+T$,w&HHDEI\$AAt$0HuMDEStnDSH[A)EH`DCKڋ{ DVE)ÃF<wHDHtDASAuH!S$ߋKA1MHڍ yEPH{(1D\$D<${ At$0AD$$YHK(HLHSHHHsPDC0IF AEHt$ s !SHPHtHUH=s1R HsHHtHEH{LHH{HAԋCHtH{@HtHEP0HC@H !HH=!11H`HEH[]A\H@0fffff.+ff.ATIUS/H@ud@H+@tT@su@mu)Ct9Yt-A$HC)@gugk@4t;@uA$1[]A\f@tA$HCCttA$HC@cu"Ct轔tA$HC@sy{@l菔_HCA$[]A\fDAWAVAUIATIUSH8HT$dH%(HD$(1 DIA$/uH5+rLL1tIu""/XHt't1Ҁ"XH@{_IA$uIl$E10"tK蓓u7,t2}]HLuEtE1"AE fAXH)*=X HH@ UHH@ :*ux/uH HA YAH!HL$ HT$LLHudT$uLH|$ 1HukHt$HL$(dH3 %(u\H8[]A\A]A^A_f.A\$IHD$ H*!fH 11H5@pL@1HP0AWAVAUIATUSHHwLdH%(H$1HIE1LH臔IE(HEG8E^H !11HL$8IH|HtHQ!H0IE(A<tI$H|R0IE(HA9o8HL$8HHR0I}H(IGH$H$LHDŽ$HDŽ$D$|HD$PG D$`HGLxD$h莔Ld$8AG8I$<@R(HHD$AG8F1AG8H9}.HCA<tI$HP(HCAG89|҅H$HD$L$L|$@Ll$HHL$(L$hHD$01L$gHT$@HHHD$XL$lHHB@Lcjf.HL$XI$Ht$`LHt$ HH18CHT$ HL$XLI$HHq8HL$XI$HT$TLHq8HL$XI$HT$PLHq8EtD$dD$T;D$L{HtH{@HtI$P0D$`DsHE1L{@C0D$dC4D$PCv!xv!HLxfDI$LP0GI$LL@pE1IH *cHT$8H5ccL1ALԂH|$(HtI$P0I$H|$ E1W@HT$LHL(I;HQ E1E1111H;H$/H[LkHD$XI$L@LpE1IH cbHT$8H5pbL1AHD$(+I$LL@pE1IH bHT$8H5qbL1AI$LL@pE1IH aHT$8H5 bL1AHD$(I$LL@pE1IH aHT$8H5aL1Aff.AWAVAUIATAUSHH$H|$Ht$LL$HD$(dH%(H$1 AH\$0L= H\$ ~/AD$E1H,@IK|5 J3II9uIXP(HHD$H|$LHHHt$HEIH}1HEHEHE HE(HHE@EHDHEPH;uGH;\$ tID$HR0D$HL$(H)H$dH34%(ujHĘ[]A\A]A^A_fHxH;\$ tID$HR0D$fL= <IP(HHD$0HD$ UDAWIAVAAUATIUSH8dH%(HD$(1HYI+H~cru1H H=_HNHH9@)@H E1H ^HH5YLL1A@Ht$(dH34%(H8[]A\A]A^A_HH=eYHNHH9uJHvA2H[ E1H \IH5?:L@L1A@xH H=(_HNHH9HAAIWAvL@IUPE1Ht@DHR HuH DH1هH HLHPfHa E1H tWIH5E9LL1A@|@H HHI_LE1LH=i!IHLՉ;H HHH LHHE1E1LHh!HLӉ}USHHH?HGtIH-Z HHEHt/HEH;HXH{HH[H]fH[]fAUATUSHH~H[]A\A]DHHwHH軀HS(HHCH8L- 1E1H|*HtH H0HS(HCx<tIEH|*P0HCHS(AHD;`8|IEHP0HCHPPH9u WDHHB H9uHC HB IEHH@0H[]A\A]DH HHT$HhHT$HS HPP@L- L- mATIUSHHHFPHu'H@ HtH9XuH[]A\DH 8HP(HL`HXH@HID$PLHE(HE Il$PTHLH} t HH[]A\I|$@t+H ED$41AL$01I<$HD$AH E1E1111I<$H$ffff.ATIUHSHH l!dH%(HD$1tEHT$HH=l!l!T$tXHh1HL$dH3 %(uvH[]A\fHQ H=]l!3l!HH! E1H YHH5YLL1A@zyH SHHHW1H=ef!H`H H[HH@0HHt Hy HHHHfDUISHHH-E HED$IH6He!t H[]HMD$ S$s H;D$ H[]fffff.AWIAVIAUATUSHqL- IIEXI^H!x;ctLMMHLE1H XH5R1A@IELH[]A\A]A^A_H H=xXHNHH9uRIINUALLIULH[]A\A]A^A_HH=QHNHH9"t)HL[]A\A]A^LLJA_B{fH MFLI4$LE1H1d!HHH[]A\A]A^A_Hq ILE1H ~PH5R2L1A@H[]A\A]A^A_fH MFE1HLHc!I4$LH E1E1Hfffff.>u[ATUSH?HtVH- HwHHHELHH{HAHEHH5[]A\H0ffDH-y ffffff.AWAVIAUATUHSHXdH%(HD$H1T$<L% HQH1HI$hIŸML= 8IP(L(HIELHkC C$HC(H5UHCI$C0 L+AIHb!I}@Hw(HLHa!EM|EExAMtAUpHD$(HD$ HHD$D$D$$I}zIMHT$DHIE(HLhI$HHH;IDžADžIDž(0HIL#HHHrXHT$H5KOE1HPX1vALT$QnHa HH=HHHfff.AWAVAUATUSH(dH%(HD$1>t-HD$dH3%(H([]A\A]A^A_f.H L0IHILHHHtKLeHI|$P0HI|$P0HLP0HHpHLHHuHLxIvH=_!0`!Ht HHpAuHLP0HLH=Alfffff.UHH0SHHdH %(HL$1HT$PxHŋD$uHEHL$dH3 %(u4H[]fH (HP(HH@H@HE`lAWAVAUATIUSHHdH%(H$1{IHyD/kHD$0H LIt$HHxHI=l^!H$LH=r^!HD$8H^!$5LxMt~AdIT$Ai ApAtu'HD$0 H=MHH HNH9H] E1LLH LMH5LHL1A@A0fDH! AIt$1HKHL1A@H$dH3%(DV H[]A\A]A^A_f.H E1H KI$H5%HAL1A@DHD$0 H=KHH HNH9AA)EEIGHD$xpH8HsHH IH5KHHT$xIIGL$$E11HT$(HT$pAHHT$ HT$hHT$HT$XHT$HT$`HT$H8LqL;d$`)H|$xHtiH 1HH5L3H1@HD$HH| HD$@HP(I~(IHLpLHT$HH! HT$HH56JHIG(HD$@I0HLH HT$HLLHLzH0%H H=][!H*[!DHD$0 H=IHH HNH9AA)EE MID$L$0E1D$0It*JA G#AGAID9d$0eI6HH IvHHT$8HA$uA#GufHD$0 H=4IHH HNH9=A:Il$HfHH=HNHH9u A>H H=HHNHH92AHH=a(HNHH9u AH E1H HHH5HAL1A@H DmIH5KHHEHAeHt It$LHHxHAIH(E1A !HHw(D$H$H?jE1@fDH HIHT$Hf~AGH H=GHNHH9AH It$ IHLH` AdLE07f|$X H|$hHD$xLD$8H$H$LL$\H1D`IGH8dt>T$\t6H$DH;THHHH;H9H9u1H|$xHtDeH$Ht2e0H 1HH5g$H1@IGIOIW(AGE1A Hp(H $HD$H8iIGxAjL(]HT I0Ht$8HD$@HH6@Lt$@H@HIHp8IH|$8HuH Hcl$0E1H 9CH5:5HAL HT1A@LL$0t4It$H.gAGH HEGH$H D(1HAAlL%J HHI$8EGH WD(H1AA[lI$HH8EGH ,D(H1AA$lI$HH8EGH C(H1AAkI$HH8EGH C(H1AAkI$HH8EGH CH(1AAkI$HH8$H Ml$ IIl$(HLLHHxHHt H HP0H{HfHHCH1K HHAHKXLE1+qaHb It$ IHLHmH A H' It$ IHI0HAWpHHt6H L`HI|$P0HI|$P0HLP0HHpA;LeHCfDAUATUSHH>!t1H[]A\A]ÐL%q Hv H{I$HHtLk(I$H5@HI9uH HHHDAWAAVAAUAATAULSLHdH%(H$1Au H[@tH HT$Ht$HHhD$Sxs|L$D9 D9uH}hIH}HL$ LֺLT$HD$0DŽ$D$ dLT$D<$EH}EDHHLhH}HrfH$dH3%(u@Hĸ[]A\A]A^A_DD9WD9LLS(A)A)A)A)F^f.AWAVAUATUSH(AH|$L$E1|$`AkIIDDDIAD9~-EtD$H|$ALLAB 8I]D9Ӊ؉AŋD$l$D(DD|$`D$AA9~*EtL$H|$DDLLA\A9֋D$`l$ADD$D$D(D$DEAAE9~,tL$DD$LH|$LD)AE\E9ԃ|$`AtFD$`L|$lA9t%EtL$ALLLA[9uH([]A\A]A^A_ÐUHHDDSDT$(D;T$8DD$T$ D\$0\$@|A9|@[]DfDfP@h AHfDPIfDXD$[]bFu HHЋNV I$AHbHfDH(DVdH %(HL$1EtEA NH11A NfDD$LD$fT$ft$fDL$$A1HbHD$dH3%(uH([@HcSDT$ LD\$(\$0LHT$0T$8DD$DL$\$ D\$T$(DT$H[ Yffff.DD$EDL$D$ZAUEATUHSwLL$(DT$0DD$8thDE9}DD)DD)EwE, E$0E9~E)B DGD9}D)AD)DwF$A<0A9~A)FH5 HEH6D$0DT$(H[]A\A]fDAVHLESL$ DT$(D\$0\$8Lt$@DL$L$HD\$(DT$ HLt$8\$0[A^CXDD$EDL$D$XbH1 SHHP(HH@HC0[DAWIIAVIAUATU SHH8HFP L1 @ō,HpC4L׉l$E1E1D$L\$(D$C0LT$ $aL- Iċ{4A|$,IEP(L\$(ID$E1LT$ E1ICLHpC4l$D$D$C0$aHŋ{4IE},P(HEM'I.H8[]A\A]A^A_fff.UHSHHHtH HzHP0HEHU`Ht+H H{HP0HCHC`HH[]H[]fAUATEUSHHMLl$0t4HI DHPpHCpHH[D]A\A]fDH1DSpAEH[]A\A]AWEAVAUATUHSHHL% Lv0dH%(H$1HFHT$ M $W0HL$(O4L(D@ Hp(LAXHCI$11H{I‹E4HL$ HsE1E1LLLT$ D$E0D$$D$]LT$ I$LLPEudI1H$I$HT$0DŽ$H{IFH$dH3%(H[]A\A]A^A_HsI$AM4U0LHv(X11HLI5\INjE4HL$(E1E1LLD$E0D$$D$I6\LL]IHHHH /Vffffff.ATAUHSHH_0H3HuNHsHtH HH PHCEtH HHP0HE0H[]A\@H HHT$H hHHT$fAWAVEAUATIUHSHHH_0D$HT$0DL$8D$HsD$D\$,HADDD)D)HDD$<\DD$option ":AutoLoad": may not contain substring "::"bad subwidget default format " (idle event handler executed by tixWidgetDoWhenIdle) (idle event handler executed by tixDoWhenIdle) (event handler executed by tixDoWhenMapped)interpreter does not have a main window" must be a window pathname or IDtixTmpLine x1 y1 x2 y2 ?window?#%4x%4x%4xtixWidgetDoWhenIdlecommand window ?arg arg ...?command ?arg arg ...? pathname commandcolorName-nounknownw validOptions argList"."; must be one of "unknown option "window parentoptionNameACTIVE_BG#ecececCTL_FONTHelvetica -12 boldDISABLED#a3a3a3HIGHLIGHTBlackINDICATOR#b03060MENU_BG#d9d9d9MENU_FGNORMAL_BGNORMAL_FGSELECT_BG#c3c3c3SELECT_FGTEXT_FGTROUGHTIX_EDITOR_BGTIX_BORDER_WIDTH2TIX_HIGHLIGHT_THICKNESSffffff?333333?wrong # of arguments, should be "": must be -lostslave -request pathname reqwidth reqheightpathname x y width heightpathnametixGeometry (geometry request command executed by tixManageGeometry)8.48.4.3Tixnormalcellrowdisabledtix_versiontix_patchLeveltix_release-bindingtix_priv-debug-fontset-scheme-schemepriorityTixBindingTKtixDebugTixDebugtixFontSetTixFontSetWmDefaulttixSchemeTixSchemetixSchemePriorityTixSchemePriority20tixCallMethodtixChainMethodtixDisplayStyletixDoWhenIdletixDoWhenMappedtixFlushXtixFormtixGeometryRequesttixGet3DBordertixGetDefaulttixGetMethodtixGridtixHandleOptionstixHListtixInputOnlytixManageGeometrytixMapWindowtixMoveResizeWindowtixMwmtixNoteBookFrametixTListtixTmpLinetixUnmapWindowtixWidgetClassinterppreter. Modify tixInit.c at your own risksTix has not been tested for use in a safe invalid object reference ""; invalid class "auto_load tixMethodTabw class methodw method ..." for context "cannot call method "errorInfocannot chain method "no superclass exists for context " {config%sconfigcannot assigned to readonly variable "cannot assigned to static variable " %f %f (scrolling command executed by tixTList)?raisedflatsunkengrooveridgesolidbad relief type "wrong # args: should be " Must be %s exit.tixsw:tcl_rcFileName,̲,ܲ,,,,,,,,,,,,,,,,,,,,,,,,, ": must be flat, groove, raised, ridge, solid or sunken This command does not take any options.cannot find the "image" commandpathname ?arg? ...invalid widget name "" already existswindow name "errorCode::%s::%s:rootw:rootrootCmdCreateRootWidgetInitWidgetRecConstructWidgetSetBindingsunknown display type "bodyimagetext-anchorAnchor-bg-fg-fontFont-gapGap-justifyJustyfy-padxpadXPad-padypadY-wraplengthwrapLengthWrapLength-backgroundWhite-foreground-activebackgroundActiveBackground-activeforegroundactiveForegroundActiveForeground-selectbackgroundselectBackgroundSelectBackground-selectforegroundselectForegroundSelectForeground-disabledbackgrounddisabledBackgroundDisabledBackground-disabledforegrounddisabledForegroundDisabledForeground-bitmapBitmap-image-itemtypeitemTypeItemType-showimageshowImageShowImage-showtextshowTextShowText-styleimageTextStyleImageTextStyle-text-underlineUnderline-1 @imageStyleImageStyle @DItem is already associated with styleDItem is not associated with styleCannot delete default item style?option? ?value? ?option value ... ?tixStyleTab style but got Needed Style type mismatch style" not foundDisplay style "itemtype ?option value ...-refwindow-stylenametixStyle%ddelete?option? arg ?arg ...?textStyle @can't use as a window item of can't manage toplevel windowtixWindowItemwindowStyleWindowStyle-widget-window in a window item of the master widget: must be a child @tixForm grid master ?x_grids y_grids?Wrong # of arguments, should be Grid sizes must be positive integers" is not a tixForm master window(TixForm) Error:Trying to use more than one geometry manager for the same master window. Giving up after 50 iterations. " is not managed by the tixForm managertixForm configure slave ?-flag value ...?"in a form: it's a top-level windowWindow "circular dependency. circular dependency-top-bottom-left-rightUnknown option "can't put "checkmasterslave ?-flag value ...?forgetslave ?slave ...?gridmaster ?x_grids y_grids?slave ?-flag?slavesslave side strength??MbP?none{%%%d %d}} {&Malformed attachment value "": it's a top-level windowcan't attach to "-padleft-padtop-leftspring-topspring-fillbothbad fill style "Wrong option "-padright-padbottom-rightspring-bottomspring"-in " must be the first option given to tixForm": must be none, x, y, or both%s %s %d %d %d %d edit set x ytixGrid:EditCell edit applytixGrid:EditApply", must be apply or set{%f %f} {%f %f}" does not exist,x y ?xbdWidth ybdWidth?x %d %dy %d %dbad state value " pathName ?options?"wrong # args: should be "TixGridbbox": must be bbox or existsdragsite clearmust be clear, get or set", wrong option "option ?x y?bdtypeoption from ?to?dropsiteentrycgetx y optioneditoption ?args ...?entryconfigureformatgeometryinfo?width height?moveoption from to bynearestoption x1 y1 ?x2 y2?x y ?option value ...?sortunsetxviewargsyviews-marginx-marginy-marginmain-bdborderWidth-borderwidth-cursorCursor-editdonecmdeditDoneCmdEditDoneCmd-editnotifycmdeditNotifyCmdEditNotifyCmd-floatingcolsfloatingColsFloatingCols-floatingrowsfloatingRowsFloatingRows-formatcmdformatCmdFormatCmd-heightHeight10-highlightbackgroundhighlightBackgroundHighlightBackground-highlightcolorhighlightColorHighlightColor-highlightthicknesshighlightThicknessHighlightThickness-leftmarginleftMarginLeftMargin-relief-selectborderwidthselectBorderWidth-selectmodeselectModeSelectModesingle-selectunitselectUnitSelectUnit-sizecmdsizeCmdSizeCmd-state-takefocustakeFocusTakeFocus-topmargintopMarginTopMargin-width-xscrollcommandxScrollCommand-yscrollcommandyScrollCommand (format command executed by tixGrid)wrong # of arguments, must be: (scrolling command executed by tixGrid) (size command executed by tixGrid)": must be normal or disabledtixGrid: mappedWindows not NULLx y ?option? ?value? ?option value ... ?dimension start end ?args ...?Haha@ba@b@b@b@ba@b@b@b@ba$@333333?Grid hash entry leaked: %d : %d Inconsistent grid dataset: (%d,%d) : %x %xx1 y1 x2 y2 ...?option? ?arg ...?-bordercolorborderColorBorderColor-filledFilled-xoffXoff-xonXon-yoffYoff-yonYonby the -formatcmd handler of the tixGrid widgetthe "format" command can only be called x1 y1 x2 y2 ?option value ...?%s %s ?option value ...?index ?option value ...?option index ?arg ...?"; must be an integer or "default"?selection list is emptyadjustincludestoggle (converting list element from string to integer) (converting list element from string to real) (user-defined comparison command)comparison command returned non-numeric resultcan't invoke the tixGrid sort command recursively": must be ascii, integer or real": must be increasing or decreasing": must be -command, -key, -order or -type", should be row or columnwrong dimension "-typeasciiintegerrealwrong type "-orderincreasingdecreasingwrong order "-key-commandbad screen distance "-size auto%fchar -pad0 -pad1 value missing for option "-size-pad0-pad1"; must be -pad0, -pad1 or -size %g %gwrong # args: should be "TixHListTixHListHeaderEntry "Item " set entryPathmust be clear or setchildrenhiddenitementryoffspringssiblings-after-before-atand -at options can be usedparent element "cannot add entry after "cannot add entry before "%s%c%saddchildparentEntryPathoption ?entryPath??option? ?args ...?entryPath optionhideoption entryPathseeoption arg ?arg ...?show-data-browsecmdbrowseCmdBrowseCmd-columnsColumns-dragcmddragCmdDragCmd-drawbranchdrawBranchDrawBranchtrue-dropcmddropCmdDropCmd5-header-indentIndent-indicatorIndicator-indicatorcmdindicatorCmdIndicatorCmdbrowse-separatorSeparator-wideselectionwideSelectionWideSelection (scrolling command executed by tixHList)tixHList: mappedWindows not NULL (size command executed by tixHList)Cannot change the number of columns ": must be anchor, clear, get, includes or set (size command executed by tixHList)exists, hidden, item, next, parent, prev or selection": must be anchor, bbox, children, data, dragsite, dropsite, wrong # of arguments, should be pathName delete " must be all, entry, offsprings or siblingsNo more than one of the -after, -before entryPath ?option? ?value? ?option value ... ?`````````Column "-charcolumn ?-char? ?size?entryPath column optioncreateentryPath column" does not have an item at column Cannot delete item at column 0entryPath column ?option? ?value ...?entryPath column ?option value ...?" does not have an indicatorentryPath ?option value ...?entryPath ?option? ?value ...?" does not have a headercolumn ?option? ?value ...?column ?option value ...?headerBorderWidth-headerbackgroundheaderBackgroundheaderRelief.p.H/.H/H/H/H/.H/H/H/H/.Unknown tab "gray50 option ?arg arg ...?" name"unknown tab " add name ?options?wrong # args: should be pageidentify identify x y"pagesactivefocusnextfocusprevunknown optionwrong number of arguments or pagecgetpageconfigurepage ?option value ...?bad option "TixNoteBookFramecenter-label-backpagecolorbackPageColorBackPageColor-focuscolorfocusColorFocusColor-inactivebackgroundinactiveBackground-slaveSlave-tabpadxtabPadX6-tabpadytabPadYgeometryinfo, identify, move, pagecget or ": must be activate, add, configure, delete, TList list entry is invalidverticalhorizontalbad orientation " set indexenddownuplist entry "TixTListoption ?index?insertwhere ?option value ...-orientOrient": must be vertical or horizontal (size command executed by tixTList)expected non-negative integer but got "": must be anchor, clear, includes or set": must be anchor or selectionindex ?option? ?value? ?option value ... ?IILJILJLJLJLJILJLJLJLJIImage "")type ?option value? ...spacespace, text or widget cget option"be changed.The -window option cannot itemconfigureunimplementedlineconfigure": must be cget or configure-showbackgroundcompound" can only be assigned to window " (while configuring image "no value given for -window option.", must be bitmap, image, line, tried to delete pixmap image when instances still existmust specify one of -data, -file or -id": must be cget, configure or refcount/* XPMFile format errorblackunknown pixmap ID "": couldn't read file "couldn't fseek file "couldn't ftell file "error in reading file "error closing file "refcount" is already definedpixmap "pixmap-file-id": must be cget or configureTixInputOnly-all-border-resizeh-title-menu-minimize-maximizeunknown decoration " f.send_msg %d _MOTIF_WM_MENU_MOTIF_WM_MESSAGES _MOTIF_WM_MESSAGES {;}wm protocol option pathname ?arg ...?" is not a toplevel window._MOTIF_WM_HINTSdecorations-border %d-resizeh %d-title %d-menu %d-minimize %d-maximize %dismwmrunning_MOTIF_WM_INFOprotocoldeactivateWM_TRANSIENT_FORor transientforunknown or ambiguous option "" should be add, activate, deactivate or delete": must be decorations, ismwmrunning, protocol This interpreter does not support stubs-enabled extensions.Tclmissing stub table pointerepoch number mismatchrequires a later revisiontcl::tommath, actual version (requested version error loading ): TkThis implementation of Tk does not support stubs;,H'pH''X*+`,(0h4h48GM0MhNOPP RpXTU@8YZ\(\]]^^H_p_X`` hbphcdexe(eHiijXjhjjjk0(lh8mmxnH(ooHppPqrhs(uhvHxPz{{Px|xH}}H`  8 ȁ!h!!8!"(H""""("H"h# #8#ȉP#h####8#،($x$H$8%X0%hH%X%(%X &h&H&&x&'h'؟'''Ƞ'(((@((X(8p(H(ȡ(H()ئx)H))(*h(*H@*ȫ`**X*h*+(+x+x++@,h,(,X,x-(-P-p--غ--(-h.8.8.h./0////x00H0X00x0018p1X1x11x28h222283Hx33(484x04P44845(85(5555@6(h6666(6X7H7(`7h7788h(8hx888(9h9H999X:p:(:::;@;hx;8;;(<x<<0=H=(`=x==x>HH>x`>x>(>(> ? ? ? (@h@@@@A8AxAAB@B8!B"BH%(C)xC*C+CH, D.pD.D/D6@E8ExhFAF8AF8E GIGJGhJGK@HMHhPHh^(I_xIcIfJihJiJhjJkJXl(KlhKHmKXnKnLo`LpLrMsMHuMxvNxwhNwNwN8xNxxNxOXz`O|O|OX}PxhPHP8Q`QQ(QRؐ`RxRRȕRR8S8`SؙSSTءXTT8TxTxTب U8`UXUVhV0VHV(xVVVV8WشHWWWHXؾHXxxXXX8YxXY(YYY8Y8ZZxZ0[[X[h \p\\\@]]]X ^p^h^^_8(_X__h8```HapaHaa(0bhbbhc(@chccc c Pd dx dd0e(Heee8fxfxffgHhg8gx h8h(PhXhh(h(hh#0i#Hi$iH%ih%i% j8'pj8*j5k8kH8kx8k8lH:Hlx;l(mh>@m>`m>xm(CmHD@nDxnEnJnL(oLpoRoTp(VXpXpH[p\(qx^hqaqxbqHcrdHrfrhrh siHsj`smsn8t(nPthnptot8quXq(uq`uqxusuvvv vw8vxyvx{vh|(w}pw~wxHHxxx(y8(yh`yȋyzPzXz(z({x{{آ{|H0|h|إ}XP}}H}Ȫ} ~8~X~~ȯ~H pPXЀ8X@hh8 p`xXzRx $8 FJ w?;*3$"$D3AAG fAA,l\BJK w ABG LBBB B(A0A8D 8A0A(B BBBA D8QBGL A(K0G@ 0A(A BBBC L4PBBB B(G0D8F` 8A0A(B BBBA d\BBB E(A0D8D`b 8D0A(B BBBE I 8D0A(B QBBK L=BBE E(A0C8J 8A0A(B BBBE $<!D\ A g A Ld`";BBE B(A0A8J 8A0A(B BBBH LP4BDE B(K0D8G 8A0A(B BBBF 49AAG  AAD D AAJ <<h:BBA A(DPm (A ABBC <|:RTA A(D0(A ABB;rD m<Q0 A L<BBB E(D0A8GP\ 8A0A(B BBBC LDP>BBB B(A0D8I`D 8A0A(B BBBD |?BBB B(A0D8IPI 8G0A(B BBBQ ) 8C0A(B BBBK D8F0A(B BBBL@2BDB E(A0A8G 8A0A(B BBBF LdCtBBB B(A0D8IPJ 8A0A(B BBBF DDLBBB D(D0FPL 0A(A BBBH \EBJA A(D@_ (F ABBD D (K ABBL p(A ABB\XF'AeD|hFBDL E(D0F8DPy8F0A(B BBBF5Dp<FBXE K(A0 (A BBGA $G.AAG aAA4DG{QAG J AAK GAA<|GBAA J ABG \ ABY 4hHuAAG J AAK QAALHBBB B(A0F8GPD 8A0A(B BBBD <DIBBA D(IPD (A ABBD <J8BBA D(I`D (A ABBD K]isKaltHL]is< LBKA A(G` (A ABBE \ P1Dlt @P HPL P xP= P/ P4 PQADG ~ AAD W AAG L< QBEE E(A0D8Gp 8A0A(B BBBF L xRBED D(G0B (F ABBE D (C ABBD < RBED D(GPW (A ABBE < (SBEA A(DP (A ABBA <\ SvBQA D(D0] (D ABBA L SBQD A(G0e (A ABBF L (C ABBD 4 (ThBEA D(D0N(D ABB<$ `TBBA J(Dh (A ABBG Dd T(BBB G(D0JP 0A(A BBBH < UBIA Z ABO Q ADB L HVBBE B(D0A8G* 8A0A(B BBBE d< WBJE E(N0D8D` 8A0A(B BBBE D 8F0A(B BBBA | XBBB B(D0D8GPR 8H0A(M BBBK D 8G0A(Q BBBM ~ 8F0A(B BBBC L$YBBB B(D0D8G` 8A0A(B BBBG \t`[BEE B(D0D8GPq 8D0J(B BBBL s8F0A(B BBBL\BEE B(A0A8G@Q 8D0A(B BBBK $$@\ADP\ AF DL\BFB I(D0C8F`8C0A(B BBB4]]BEA D(D0C(D ABBd]BBE E(A0A8GPc 8A0A(B BBBD z 8A0A(B BBBD 44^zBGA G ADJ QAG,l(_aBGD PABLh_BHE E(A0D8G 8A0A(B BBBK L` BBE E(D0D8Gp 8A0A(B BBBF l<xbJBB D(D0D@q0F(A BBBP@L0C(A BBBcM@cq<caBBA D(J (A ABBF DdBEB D(D0GP 0A(A BBBF dPf|HfPfHfPfXf`f hf$pf<xfTf 4lxfBDA D@{  AABA f<HgBJE  AGG K ABJ dhBHB E(F0A8DG 8F0A(B BBBA n 8D0A(B BBBB $dkBBA C(G0DlBBE D(D0Gf 0A(A BBBJ ,0mAAJ AAD  nLnBEB E(D0A8G 8D0A(B BBBA LlnBLJ G(A0I8G` 8A0A(B BBBA 48o'BAD G  AABA D0pBEG D(D0D@Y 0A(A BBBE <p"Tp8AD pALtpBBH B(G0J8D` 8A0A(B BBBA $q3ACD eDALqBBH E(D0A8J 8A0A(B BBBG <HxTPx4lXxBDD u ABF uABx7G\ E Nx$A\ C Cx x x ,x Dx L\xsBBD A(D0P (A ABBE D(A ABBLxBEB E(A0A8DB 8A0A(B BBBA L{BBE E(A0A8J 8A0A(B BBBH LX}lDPb A l}lDPb A L}iBEE E(A0G8G 8A0A(B BBBF 1D  C 8|D Q K L4`BEB E(G0A8G 8A0A(B BBBA $ADL AAxpDD;HjLȃBBB B(A0D8G 8A0A(B BBBA LLhBBB E(A0D8D@]8I0A(B BBB$jAAG ]AALBBB B(A0D8G| 8A0A(B BBBF $@jA F A G <*A` G A\#A`\|BOA A(J@ (C ABBI L (C ABBD D (F CBBG h"AY F A$xhADL TAA$yAi F D \*A` G A|("AY F A8@;Hj4`BAA G0i  AABH L >BBB E(A0D8D@8I0A(B BBB\&A`\|BOA A(J@ (C ABBI L (C ABBD D (F CBBG $xjAAG ]AALBBB B(A0D8G| 8A0A(B BBBF T`.4lxBAD  ABL QAB,0mADK0| AAB p,xTBED | ABF < `BEE D(H0}(A EBB\ ȒUV<t @BAA H ABA O ABN L ZBEE D(DPp (A ABBF  (F ABBG <!^BBD A(DPE (A ABBA D!\!ȕt!ЕBAP G iT!RLB A(A0X (A IBBP A(A BBBL!XBLG G(D0D8D`t 8A0A(B BBBJ <"ȗnTUT" Ll"[BBB E(D0A8G0 8A0A(B BBBG L"(BEE B(D0A8J 8A0A(B BBBK < #hBBD N(D@ (A ABBD 4L#ȞyBHA D@`  AABA L#XBBI B(A0D8J* 8A0A(B BBBA # #:Du$@;HjL$$`BBB B(A0D8G 8A0A(B BBBA Lt$BBB E(A0D8D@]8I0A(B BBB$$@AID AA$IAL %BBB B(A0D8G| 8A0A(B BBBF \%A{ D |%*A` G A%#A`T%(BGA J0R  CABD I  CABA D  FCBA $&RADL ~AA<&VT&l&*A` G A4&[BDA j ABL WAB&0"AY F A4&@BAA  ABK AAB'4';Hj4T'BAA G0i  AABH L'8>BBB E(A0D8D@8I0A(B BBB'(&A`L'8BOB B(A0A8JP 8C0A(B BBBG $L(AAG AALt(`BEB B(A0A8G 8A0A(B BBBD 4(OAAG u AAH DAA<(BED A(GPr (A ABBE 4<)(BDD D@  AABA 4t)BDD D@  AABA )d) BBB B(A0C8GP 8A0A(B BBBF l 8F0A(B BBBE ,*X4D*PZADL q AAD OAA4|*xYAAG o AAF UAA*!*,*BGA  ABE 4+fBAD F0W  AABH DL+BBH D(G0I 0A(A BBBK ,+pBNG [ ABA 4+AJI X CAH VCAL+X BBE B(D0C8D] 8A0A(B BBBC LL,_BBB B(G0I8G` 8A0A(B BBBC d,(BBB B(A0A8Gz 8A0A(B BBBK  8D0A(B BBBE -`-hb<4-ABEA  ABF ` ABA 4t-lBAA O ABJ AAE4-AAG d DAN DAA4-`ADD J AAK  AAB .-4.5$L.8aAIG FDA4t.BAD F0S  AABD D.HBEH A(A0G@ 0A(A BBBI |.CBBB B(A0D8FPx 8F0A(B BBBF V 8F0A(B BBBK y 8A0A(B BBBE ,t/`rADG h AAJ T/pFJD D(G0q (F ABBE D(C ABB</BKA D(J (A ABBG L<0xBBE E(D0G8D 8A0A(B BBBH 40(BDC M0j  AABD L0BBB B(G0D8M> 8A0A(B BBBH L1@BBB B(A0A8D` 8A0A(B BBBC d12|1-<1`BEE D(H0}(A EBB<1BEA J(GJ (A ABBG L2]BEB B(A0A8J 8A0A(B BBBH Ld2BEB B(D0D8G` 8A0A(B BBBA D2yBEE D(D0G  0A(A BBBB L2BBE B(D0D8F 8A0A(B BBBH DL3BBB A(D0JD 0A(A BBBG 43 BID MPE  AABK $3AM@E AD L3 BBE E(H0A8G`N 8A0A(B BBBJ <D4BBD A(D0c (A ABBB <4BHG G(GPE (A ABBF L4BIE B(A0A8JV 8A0A(B BBBA L5@BBE E(A0A8J_ 8A0A(B BBBE Ld5BEE B(A0A8Jy 8A0A(B BBBC 5i$5AGPz AE D5pDBEH G(G0GPE 0A(A BBBG L<6x+BEB B(G0G8G`_ 8A0A(B BBBG 6XL6`BBB E(A0A8M 8A0A(B BBBE |6VBBE B(A0D8DP 8A0A(B BBBH R 8F0A(B BBBG n8F0A(B BBBt7{7XCAZ E bd7yWEA D ABL P ABM  ABM AABD L8BBB B(A0A8DP 8A0A(B BBBB Dd8`gBEE D(D0G 0A(A BBBG L8 BBE B(A0A8GS 8A0A(B BBBG L883BBB B(A0A8G 8A0A(B BBBF LL9(bBBB E(D0A8GO 8A0A(B BBBH L9HBBB B(A0A8Dt 8A0A(B BBBD L9BBE E(D0D8J 8A0A(B BBBF <:%A[4\:(BDJ D0E  AABC 4:sBDA D^  AABA ,: fBIH OAB<:(!BHA A(IPl (A ABBA $<;x!_AFD NDALd;!BEE E(A0A8D` 8A0A(B BBBA ,;p"dBFA @ ABD L;"BEE B(A0C8F 8A0A(B BBBH T4<#BBE F(A0G@r 0D(A BBBD \ 0D(A BBEF L<($BBB B(D0A8D 8A0A(B BBBA |<%%BEE E(D0A8K@S 8A0A(B BBBB g 8A0A(B BBBG b8A0A(B BBB<\=H&kBEG A(F` (A ABBH L=x'#BEE H(A0D8L 8A0A(B BBBF L=X(BBE E(A0A8Db 8A0A(B BBBH <>)>Hc E M\>()>Hc E M|>H)>Hf B M>h)>Hc E M$>)5AAD kAAL>)BBB B(A0A8D{ 8A0A(B BBBA L4?*BBB E(A0A8G` 8A0A(B BBBF $?P,{At K d D R<?,BEB A(A0 (A BBBA L?8-BBB E(D0A8G 8A0A(B BBBA d<@1BEB B(A0A8F`F 8C0A(B BBBK l 8H0A(B BBB[ D@p2BEH A(H0DP 0A(A BBBA D@3BMB L(A0Ni 0A(A BBBA L4A5BLB B(A0D8G 8A0A(B BBBA A;dtoDAX;BEE H(A0DP 0A(A BBBA LA<BEE B(D0G8J 8A0A(B BBBB 4Bp>!LB>LdB>BEB E(D0A8D 8A0A(B BBBC BB!<BBBBA A(FPN (A ABBH $ CEIDj B H H HD4CEBDB B(A0C8FP~8A0A(B BBB|C(FLC0FBBB B(D0A8GS 8A0A(B BBBG DCL?BBE D(G0DP 0A(A BBBF L,DxM(BBB B(D0A8G" 8A0A(B BBBH |DXR-DpR2DR,DS\BDD NAB<DS`BEE D(H0}(A EBBL4ESBEE E(A0D8DPk 8A0A(B BBBA LEUBBB E(D0A8DP; 8A0A(B BBBA EYFEHYFPY$,FhYgBGD TADLFYTdFYt<|FXZBBE D(A0[ (A BBBP F[EDF0\BBE A(A0J 0A(A BBBB 4G]BFI D  AABA LTG^MBBE E(D0A8D] 8A0A(B BBBB <Gf_BEE D(A0w(A BQB4G0fAAG C GAL D AAJ ,HfBAA m ABL 4LHgACG  AAK AA,HPiAAG S DAO $HjTAV I A G LH(k4BBB E(A0A8M 8A0A(B BBBF L,IoBBB E(A0A8G` 8D0A(B BBBE |Ixs{IsDAO H gIt6<I8tBBD A(J@ (A ABBC t JtWEA V ABJ N ABO K ABJ a ABL AABD 4J@utADG e AAE K AAA DJuBDD M0C  AABB D  FABC |KuBBB E(D0D8DP 8C0A(B BBBD ^ 8A0A(B BBBH ] 8F0A(B BBBD KPwLJALKwBBB B(D0D8Gp 8A0A(B BBBB LK@y BBE E(A0D8G@ 8D0A(B BBBG DDLzHBEE D(D0D@. 0A(A BBBB L},H\ D CdL(}BEB B(A0D8GP 8A0A(B BBBH N 8A0A(B BBBH LM~BBB B(A0A8G`I 8H0A(B BBBE <dMpADM C CAG T CAH DFALMBBB B(D0D8Gp 8A0A(B BBBB LM0-BDB B(A0D8GF 8A0A(B BBBJ LDNBBE E(D0A8G 8A0A(B BBBK N+$NIAJD wAA$NIAJD wAA,NADG` AAB \,OBHD G(F@_ (G APBL q (A ABBI D (F ABBA |OBEE E(D0A8D@ 8F0A(B BBBD s 8A0A(B BBBC D 8C0A(B BBBH L P(IBBB B(A0A8G 8A0A(B BBBJ \\P(BBD D(D@ (C ABBH i (F ABBD D(F ABB\PțBLG G(D@f (C ABBB i (F ABBD D(F ABB$QHgA[ L Z N VLDQ8BBE E(D0D8GP 8A0A(B BBBB 4QBJG M0y  AABA 4Q$BPG D0  AABF LR4BEB B(A0A8Jp 8A0A(B BBBE DTRVBNE G(A0J@ 0A(A BBBE LRBEB E(G0D8G) 8A0A(B BBBE $RHAS q AJ $SmADG ^AA 8F0A(B BBBE \ 8A0A(B BBBJ < VxNBKK J(Jp (A ABBF ,LViBQK J0| AAB$|VȭvAO H F B U,V AQT AAF dVPBBB B(A0D8DP 8F0A(B BBBH K8C0A(B BBBdAt,DdVAAG y AAL dtd hBBB B(D0A8D@x 8A0A(B BBBB  8A0A(B BBBA d(AS4d(OAAG o DDH DAA4e@<LeHBBD A(D@ (A ABBE LeBBE B(A0A8Dpu 8A0A(B BBBH e$eL fjBDB B(A0A8J 8A0A(B BBBG L\fBBB E(D0A8G 8A0A(B BBBB LfBED I(D@ (A ABBG L (D ABBK Df8qBEE D(I0G 0A(A BBBH DDgpBEE D(I0D@ 0D(A BBBE Dg(BEE D(I0D@| 0D(A BBBD DgBEE D(I0G3 0A(A BBBE h#BEB B(A0D8GP 8D0A(B BBBI  8E0A(J BBBJ D 8G0A(B BBB\  8A0A(B BBBK ,hBAH ABh4h*BDA | ABJ ABL4iXBBB E(D0A8Dp 8A0A(B BBBK LiBBB E(A0A8G 8A0A(B BBBA LiBBE E(A0C8J 8A0A(B BBBD L$j@ BBB E(D0A8G< 8A0A(B BBBC Ltj!BEE B(D0A8Dp 8A0A(B BBBD 4j0$gAAG D DDK DAALjh$MBBA A(G@O (A ABBF  (A ABBG DLkh%BDA G0h  AABF _  DABA 4k0&BDD G0Q  AABJ k&8Hgk&*4l'bADG0l FAA _AA:P@JP(k.>$Rp22 ! !L*XX8*@@0R]g* Lr* *<@AFܭ P P=,  "6Ihk0ekptzp ~Գ8(XH( H4J\ `J\`1*(!+XTU([kl*xzl* )<@*H*@ TM4e t$*(<8T )0e t$ )*88*(<*0e t$ )(e t$*PP8H<@AFܭ` h he0t4 ~ϳXx U`IO`JMv0}pd{cL (i *(=$TU libTix.so.debug&J7zXZִF!t/QZ]?Eh=ڊ2NDB vk).+; o^|u;(F OC Jڿ̉#)ZBt>^|:*ۓb&eƞ#MTDK)7ܕ@iV A(>Axъ)" ךqhm_a~+uFӵPZă,W#!5Tl$AY(6PmEfk̪h6+͟8c 6IPP$سcJj} Qˏ'T;`z{]04e* ^CobCj\6yzި-#oK;uRenlK'fntTqj:엮[JrE8oQok.†dRۇ`Ťec-A~ 2|zW6H dfћ -X~y\^B7 . q@H~kzuZgLmM~66R0KV$MtY \/X}p*c vU.[OiHT.T-eYYjs/ɷ D\6-jscj 0̢ya1~qLm_e+MVCaE&UAQQY^3م&R>H3INրf;@N7lIkP@- IIΕ^CuDŽ6PcJ _GSӫHåUZ~Aw$=qXx^>;C?6F(ǚ]!%6tɺ+QwUqWrdGx- T æ懸E:JE ީ!>=AZǚ$-ݛ\ᆪk~RzZyrjjվ-Msd]m=k/Ye:JI.(hI1ΤD%}j 46}/(hh5'W V ْi/Vw*8:Σ')͘}"4]NRJ2g\ tऍ䫛ʝX ŵ#FŪWk;$9y&ԛ 7?9\`Q7 ckt=G>E|r@^=Cq>22w3<="N+ij6Rk{l)Vx*u}O߹X'<&P'{b-]J%#J]Mׅ^Tu)s0$PkDr|G:M-h/92b#6G# `/۷W>tułO+y2qCsDT0P4l4(Q@,>+*p)#i$/|,2bm'_ZFi3ZO#gg+ &j>7t*#a,̂%u)#reEFVBӜX0yKqkg( 6i?-(kW IpZ0[aٿBXWΣ6K2Y%h l*ڌ2HO5һGm98ЖN)oÛU fߠS 7뀀l]tٶzMO=VZq7tIr*. >61ٖFކm9;Ʉ>ÞSyz|hۓ<[0Q K7LHӔy2_z)Jy\ݓD. Yӑ=%{q_F֛ t0Y\fN%(<ՠAX As7"&3'DX+ ߅h6rEy(r< kh, EEū=u0M]|~)LCJ!.t|0$Iv8d*BX@ϫ9=; J> /{0)u2Ǜ[%wϥ{9Cqݿ3Y~ {N6.C 05b:\\4nB;ιP7+EסѿF4俘J1 [sN)~R0-봑;ʨ؀KN煃<ʣSwkn -Y|㵨ĄJ<Ε3 b>7B sT:Ϋ371 ? yG qurQ7G3ecQIJ&瞡b2.7+"@tꏿ=(ޅD,p!;mjnc\Oe ȇ/梣 Լ PS!a+ʴef.P}mn+pq.|cbƐ:[$ a>^f חO6:z;hHjÓr0.B9T`H."ҁVN+q1`tUBVFaXdl:5 I~BfOHBȖKYP/%at:F@rIx!Do޶ڲץJ؏FCˈ͊+: 5|3Q!O7/e](DJ<mi]^uυe@AJלᷬ:h: O .7b֕ ;Ng_Z-ljo*DpX N_i|܁\qc׺9ҥ%6@ef*: 縲D'zU߁ts(4 ͝ێC_>D^QG`uxCw>8۰ŷ:}ǰXPZo|ii`nًtr t~{GƛN 26#6^D`iBDd!P[´o}nEżpM׽Vgûsړp9=u"n *A#4E5,옻E7_#%w9Fpr)>N ޜj擯/J}&%L'1[;UtC˅<T@܇7Mg6*cu8C%Z`-[>-A}Ud8~B7յT4wm_04{ -a]wK STW^/>L,Yx[ I79X/!?mJmZz.jeKTxgJJFc>PFJ54$ }[Վ6~ۓg-R3~%<zxݚ:bO~r LQJ*n,eɔ/:w,'ۢ:: Q+޴%ʄ2}n mb!h<9hķ05d$̻JZL}` VÈ;e/D^ 2%Ԍ1eԦBu U93"IѳLd% ™^xhf-Hށ&q$,Ȣǝ*Ot9؍.7V)QΆv0;JcI.7ZѻF:Md0Q:ֲ=Dzgee5 fAڧ?Fik'; qb ^4[.ή>U#jL#Ed,9@ &f17/<^t.  'CW|0tdQ|u8O0AZfJWc&c{qj?6F1H$^,3>3B%WG)H)Mgb8o:I&W4 kI_K^I((*زp6?Psf )@7\J\ Y8 ˑ 4ZO)Cg-td..3[WP rQN.H,)tWiGq;;*}(Zb#0׿5cȮ$.C+2L8+`/eah>7,`.LgZ$P6d.[8Q3ć>p__M~Ry'k#2d軯!eWWgI;^[Pw@^reb;LY(ۢ45gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.gnu_debuglink.gnu_debugdata $o(  0$$8o@8@8@Eo::@T::0^ hc n``t z  (3HH,xx,tk$kk$kk$kk$kh m$mn$np$pX`v$`v p $ <Tix8.4.3/CObjView.tcl000064400000017072150252220140010057 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: CObjView.tcl,v 1.3 2001/12/09 05:04:02 idiscovery Exp $ # # CObjView.tcl -- # # This file implements the Canvas Object View widget. This is a base # class of IconView. It implements: # (1) Automatic placement/adjustment of the scrollbars according # to the canvas objects inside the canvas subwidget. The # scrollbars are adjusted so that the canvas is just large # enough to see all the objects. # # (2) D+D bindings of the objects (%% not implemented) # # (3) Keyboard traversal of the objects (%% not implemented). By the # virtual method :SelectObject. # # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixCObjView { -classname TixCObjView -superclass tixScrolledWidget -method { adjustscrollregion } -flag { -xscrollincrement -yscrollincrement } -static { } -configspec { {-xscrollincrement xScrollIncrement ScrollIncrement 10} {-yscrollincrement yScrollIncrement ScrollIncrement 10} } -default { {.scrollbar auto} {*borderWidth 1} {*canvas.background #c3c3c3} {*canvas.highlightBackground #d9d9d9} {*canvas.relief sunken} {*canvas.takeFocus 1} {*Scrollbar.takeFocus 0} } -forcecall { -scrollbar } } proc tixCObjView:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(w:canvas) \ [canvas $w.canvas] set data(w:hsb) \ [scrollbar $w.hsb -orient horizontal] set data(w:vsb) \ [scrollbar $w.vsb -orient vertical] set data(pw:client) $data(w:canvas) set data(xorig) 0 set data(yorig) 0 set data(sx1) 0 set data(sy1) 0 set data(sx2) 0 set data(sy2) 0 } proc tixCObjView:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings # %% scan/drag of canvas?? # # $data(w:canvas) config \ # -xscrollcommand "tixCObjView:XScroll $w"\ # -yscrollcommand "tixCObjView:YScroll $w" $data(w:hsb) config -command "tixCObjView:UserScroll $w x" $data(w:vsb) config -command "tixCObjView:UserScroll $w y" } #---------------------------------------------------------------------- # # option configs #---------------------------------------------------------------------- proc tixCObjView:config-takefocus {w value} { upvar #0 $w data $data(w:canvas) config -takefocus $value } #---------------------------------------------------------------------- # # Widget commands #---------------------------------------------------------------------- proc tixCObjView:adjustscrollregion {w} { upvar #0 $w data set cW [tixWinWidth $data(w:canvas)] set cH [tixWinHeight $data(w:canvas)] tixCObjView:GetScrollRegion $w $cW $cH 1 1 } #---------------------------------------------------------------------- # # Private Methods #---------------------------------------------------------------------- proc tixCObjView:GeometryInfo {w cW cH} { upvar #0 $w data set bd \ [expr [$data(w:canvas) cget -bd] + [$data(w:canvas) cget -highlightthickness]] incr cW -[expr {2*$bd}] incr cH -[expr {2*$bd}] return [tixCObjView:GetScrollRegion $w $cW $cH 0 0] } proc tixCObjView:PlaceWindow {w} { upvar #0 $w data set cW [tixWinWidth $data(w:canvas)] set cH [tixWinHeight $data(w:canvas)] tixCObjView:GetScrollRegion $w $cW $cH 1 0 tixChainMethod $w PlaceWindow } proc tixCObjView:GetScrollRegion {w cW cH setReg callConfig} { upvar #0 $w data set x1max $data(xorig) set y1max $data(yorig) set x2min [expr {$x1max + $cW - 1}] set y2min [expr {$y1max + $cH - 1}] set bbox [$data(w:canvas) bbox all] if {$bbox == ""} { set bbox {0 0 1 1} } set x1 [lindex $bbox 0] set y1 [lindex $bbox 1] set x2 [lindex $bbox 2] set y2 [lindex $bbox 3] set bd \ [expr [$data(w:canvas) cget -bd] + [$data(w:canvas) cget -highlightthickness]] incr x1 -$bd incr y1 -$bd incr x2 -$bd incr y2 -$bd if {$x1 > $x1max} { set x1 $x1max } if {$y1 > $y1max} { set y1 $y1max } if {$x2 < $x2min} { set x2 $x2min } if {$y2 < $y2min} { set y2 $y2min } set data(sx1) $x1 set data(sy1) $y1 set data(sx2) $x2 set data(sy2) $y2 set sW [expr {$x2 - $x1 + 1}] set sH [expr {$y2 - $y1 + 1}] # puts "sregion = {$x1 $y1 $x2 $y2}; sW=$sW; cW=$cW" if {$sW > $cW} { set hsbSpec {0.5 1} } else { set hsbSpec {0 1} } if {$sH > $cH} { set vsbSpec {0.5 1} } else { set vsbSpec {0 1} } if $setReg { tixCObjView:SetScrollBars $w $cW $cH $sW $sH } if $callConfig { tixWidgetDoWhenIdle tixScrolledWidget:Configure $w } return [list $hsbSpec $vsbSpec] } #xF = xFirst # proc tixCObjView:SetScrollBars {w cW cH sW sH} { upvar #0 $w data # puts "$data(xorig) <--> $data(sx1)" set xF [expr ($data(xorig).0-$data(sx1).0)/$sW.0] set xL [expr $cW.0/$sW.0 + $xF] set yF [expr ($data(yorig).0-$data(sy1).0)/$sH.0] set yL [expr $cH.0/$sH.0 + $yF] # puts "$xF $xL : $yF $yL" $data(w:hsb) set $xF $xL $data(w:vsb) set $yF $yL } proc tixCObjView:UserScroll {w dir type args} { upvar #0 $w data $data(w:canvas) config -xscrollincrement 1 -yscrollincrement 1 case $dir { x { set n $data(xorig) set orig $data(xorig) set s1 $data(sx1) set total [expr {$data(sx2)-$data(sx1)}] set page [tixWinWidth $data(w:canvas)] set min $data(sx1) set max [expr {$data(sx1)+$total-$page}] set inc $data(-xscrollincrement) } y { set n $data(yorig) set orig $data(yorig) set s1 $data(sy1) set total [expr {$data(sy2)-$data(sy1)}] set page [tixWinHeight $data(w:canvas)] set min $data(sy1) set max [expr {$data(sy1)+$total-$page}] set inc $data(-yscrollincrement) } } case $type { scroll { set amt [lindex $args 0] set unit [lindex $args 1] case $unit { units { incr n [expr int($inc)*$amt] } pages { incr n [expr {$page*$amt}] } } } moveto { set first [lindex $args 0] set n [expr round($first*$total)+$s1] } } if {$n < $min} { set n $min } if {$n > $max} { set n $max } # puts "n=$n min=$min max=$max" case $dir { x { $data(w:canvas) xview scroll [expr {$n-$orig}] units set data(xorig) $n } y { $data(w:canvas) yview scroll [expr {$n-$orig}] units set data(yorig) $n } } set cW [tixWinWidth $data(w:canvas)] set cH [tixWinHeight $data(w:canvas)] set sW [expr {$data(sx2)-$data(sx1)+1}] set sH [expr {$data(sy2)-$data(sy1)+1}] tixCObjView:SetScrollBars $w $cW $cH $sW $sH } # Junk # # proc tixCObjView:XScroll {w first last} { upvar #0 $w data set sc [$data(w:canvas) cget -scrollregion] if {$sc == ""} { set x1 1 set x2 [tixWinWidth $data(w:canvas)] } else { set x1 [lindex $sc 0] set x2 [lindex $sc 2] } set W [expr {$x2 - $x1}] if {$W < 1} { set W 1 } $data(w:hsb) set $first $last # tixWidgetDoWhenIdle tixScrolledWidget:Configure $w } # Junk # proc tixCObjView:YScroll {w first last} { upvar #0 $w data set sc [$data(w:canvas) cget -scrollregion] if {$sc == ""} { set y1 1 set y2 [tixWinHeight $data(w:canvas)] } else { set y1 [lindex $sc 1] set y2 [lindex $sc 3] } set H [expr {$y2 - $y1}] if {$H < 1} { set H 1 } $data(w:vsb) set $first $last # tixWidgetDoWhenIdle tixScrolledWidget:Configure $w } Tix8.4.3/IconView.tcl000064400000013736150252220140010135 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: IconView.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ # # IconView.tcl -- # # This file implements the Icon View widget: the "icon" view mode of # the MultiView widget. It implements: # # (1) Creation of the icons in the canvas subwidget. # (2) Automatic arrangement of the objects # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixIconView { -classname TixIconView -superclass tixCObjView -method { add arrange } -flag { -autoarrange } -static { } -configspec { {-autoarrange autoArrange AutoArrange 0 tixVerifyBoolean} } -default { {.scrollbar auto} {*borderWidth 1} {*canvas.background #c3c3c3} {*canvas.highlightBackground #d9d9d9} {*canvas.relief sunken} {*canvas.takeFocus 1} {*Scrollbar.takeFocus 0} } -forcecall { } } proc tixIconView:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget } proc tixIconView:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings set c $data(w:canvas) bind $c <1> "tixIconView:StartDrag $w %x %y" bind $c "tixIconView:Drag $w %x %y" bind $c "tixIconView:EndDrag $w" } proc tixIconView:StartDrag {w x y} { upvar #0 $w data global lastX lastY set c $data(w:canvas) $c raise current set lastX [$c canvasx $x] set lastY [$c canvasy $y] } proc tixIconView:Drag {w x y} { upvar #0 $w data global lastX lastY set c $data(w:canvas) set x [$c canvasx $x] set y [$c canvasy $y] $c move current [expr $x-$lastX] [expr $y-$lastY] set lastX $x set lastY $y } proc tixIconView:EndDrag {w} { upvar #0 $w data tixCallMethod $w adjustscrollregion } #---------------------------------------------------------------------- # # option configs #---------------------------------------------------------------------- proc tixIconView:add {w tag image text} { upvar #0 $w data set cmp [image create compound -window $data(w:canvas)] $cmp add image -image $image $cmp add line $cmp add text -text $text set id [$data(w:canvas) create image 0 0 -image $cmp -anchor nw] $data(w:canvas) addtag $tag withtag $id if {$data(-autoarrange)} { tixWidgetDoWhenIdle tixIconView:Arrange $w 1 } } # Do it in an idle handler, so that Arrange is not called before the window # is properly mapped. # proc tixIconView:arrange {w} { tixWidgetDoWhenIdle tixIconView:Arrange $w 1 } proc tixIconView:PackOneRow {w row y maxH bd padX padY} { upvar #0 $w data set iX [expr $bd+$padX] foreach i $row { set box [$data(w:canvas) bbox $i] set W [expr [lindex $box 2]-[lindex $box 0]+1] set H [expr [lindex $box 3]-[lindex $box 1]+1] set iY [expr $y + $maxH - $H] $data(w:canvas) coords $i $iX $iY incr iX [expr $W+$padX] } } # virtual method # proc tixIconView:PlaceWindow {w} { upvar #0 $w data if {$data(-autoarrange)} { tixWidgetDoWhenIdle tixIconView:Arrange $w 0 } tixChainMethod $w PlaceWindow } proc tixIconView:Arrange {w adjust} { upvar #0 $w data set padX 2 set padY 2 tixIconView:ArrangeGrid $w $padX $padY if {$adjust} { tixCallMethod $w adjustscrollregion } } # the items are not packed # proc tixIconView:ArrangeGrid {w padX padY} { upvar #0 $w data set maxW 0 set maxH 0 foreach item [$data(w:canvas) find all] { set box [$data(w:canvas) bbox $item] set itemW [expr [lindex $box 2]-[lindex $box 0]+1] set itemH [expr [lindex $box 3]-[lindex $box 1]+1] if {$maxW < $itemW} { set maxW $itemW } if {$maxH < $itemH} { set maxH $itemH } } if {$maxW == 0 || $maxH == 0} { return } set winW [tixWinWidth $data(w:canvas)] set bd [expr [$data(w:canvas) cget -bd]+\ [$data(w:canvas) cget -highlightthickness]] set cols [expr $winW / ($maxW+$padX)] if {$cols < 1} { set cols 1 } set y $bd set c 0 set x $bd foreach item [$data(w:canvas) find all] { set box [$data(w:canvas) bbox $item] set itemW [expr [lindex $box 2]-[lindex $box 0]+1] set itemH [expr [lindex $box 3]-[lindex $box 1]+1] set iX [expr $x + $padX + ($maxW-$itemW)/2] set iY [expr $y + $padY + ($maxH-$itemH) ] $data(w:canvas) coords $item $iX $iY incr c incr x [expr $maxW + $padY] if {$c == $cols} { set c 0 incr y [expr $maxH + $padY] set x $bd } } } # the items are packed # proc tixIconView:ArrangePack {w padX padY} { upvar #0 $w data set winW [tixWinWidth $data(w:canvas)] set bd [expr [$data(w:canvas) cget -bd]+\ [$data(w:canvas) cget -highlightthickness]] set y [expr $bd + $padY] set maxH 0 set usedW $padX set row "" foreach item [$data(w:canvas) find all] { set box [$data(w:canvas) bbox $item] set itemW [expr [lindex $box 2]-[lindex $box 0]+1] set itemH [expr [lindex $box 3]-[lindex $box 1]+1] if {[expr $usedW + $itemW] > $winW} { if {$row == ""} { # only one item in this row # $data(w:canvas) coords $item [expr $bd + $padX] $y incr y [expr $itemH+$padY] continue } else { # this item is not in this row. Arrange the previous items # first # tixIconView:PackOneRow $w $row $y $maxH $bd $padX $padY incr y $maxH set row "" set maxH 0 set usedW $padX } } lappend row $item if {$maxH < $itemH} { set maxH $itemH } incr usedW [expr $padX+$itemW] } if {$row != ""} { tixIconView:PackOneRow $w $row $y $maxH $bd $padX $padY } } #---------------------------------------------------------------------- # # Widget commands #---------------------------------------------------------------------- #---------------------------------------------------------------------- # # Private Methods #---------------------------------------------------------------------- Tix8.4.3/Console.tcl000064400000035717150252220140010017 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Console.tcl,v 1.5 2008/02/27 22:17:28 hobbs Exp $ # # Console.tcl -- # # This code constructs the console window for an application. # It can be used by non-unix systems that do not have built-in # support for shells. # # This file was distributed as a part of Tk 4.1 by Sun # Microsystems, Inc. and subsequently modified by Expert # Interface Techonoligies and included as a part of Tix. # # Some of the functions in this file have been renamed from # using a "tk" prefix to a "tix" prefix to avoid namespace # conflict with the original file. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "docs/license.tcltk" for information on usage and # redistribution of the original file "console.tcl". These license # terms do NOT apply to other files in the Tix distribution. # # See the file "license.terms" for information on usage and # redistribution * of this file, and for a DISCLAIMER OF ALL # WARRANTIES. # tixConsoleInit -- # This procedure constructs and configures the console windows. # # Arguments: # None. foreach fun {tkTextSetCursor} { if {![llength [info commands $fun]]} { tk::unsupported::ExposePrivateCommand $fun } } unset fun proc tixConsoleInit {} { global tcl_platform uplevel #0 set tixConsoleTextFont Courier uplevel #0 set tixConsoleTextSize 14 set f [frame .f] set fontcb [tixComboBox $f.size -label "" -command "tixConsoleSetFont" \ -variable tixConsoleTextFont \ -options { entry.width 15 listbox.height 5 }] set sizecb [tixComboBox $f.font -label "" -command "tixConsoleSetFont" \ -variable tixConsoleTextSize \ -options { entry.width 4 listbox.width 6 listbox.height 5 }] pack $fontcb $sizecb -side left pack $f -side top -fill x -padx 2 -pady 2 foreach font { "Courier New" "Courier" "Helvetica" "Lucida" "Lucida Typewriter" "MS LineDraw" "System" "Times Roman" } { $fontcb subwidget listbox insert end $font } for {set s 6} {$s < 25} {incr s} { $sizecb subwidget listbox insert end $s } bind [$fontcb subwidget entry] "focus .console" bind [$sizecb subwidget entry] "focus .console" text .console -yscrollcommand ".sb set" -setgrid true \ -highlightcolor [. cget -bg] -highlightbackground [. cget -bg] scrollbar .sb -command ".console yview" -highlightcolor [. cget -bg] \ -highlightbackground [. cget -bg] pack .sb -side right -fill both pack .console -fill both -expand 1 -side left tixConsoleBind .console .console tag configure stderr -foreground red .console tag configure stdin -foreground blue focus .console wm protocol . WM_DELETE_WINDOW { wm withdraw . } wm title . "Console" flush stdout .console mark set output [.console index "end - 1 char"] tkTextSetCursor .console end .console mark set promptEnd insert .console mark gravity promptEnd left tixConsoleSetFont } proc tixConsoleSetFont {args} { if ![winfo exists .console] tixConsoleInit global tixConsoleTextFont tixConsoleTextSize set font -*-$tixConsoleTextFont-medium-r-normal-*-$tixConsoleTextSize-*-*-*-*-*-*-* .console config -font $font } # tixConsoleInvoke -- # Processes the command line input. If the command is complete it # is evaled in the main interpreter. Otherwise, the continuation # prompt is added and more input may be added. # # Arguments: # None. proc tixConsoleInvoke {args} { if ![winfo exists .console] tixConsoleInit if {[.console dlineinfo insert] != {}} { set setend 1 } else { set setend 0 } set ranges [.console tag ranges input] set cmd "" if {$ranges != ""} { set pos 0 while {[lindex $ranges $pos] != ""} { set start [lindex $ranges $pos] set end [lindex $ranges [incr pos]] append cmd [.console get $start $end] incr pos } } if {$cmd == ""} { tixConsolePrompt } elseif {[info complete $cmd]} { .console mark set output end .console tag delete input set err [catch { set result [interp record $cmd] } result] if {$result != ""} { if {$err} { .console insert insert "$result\n" stderr } else { .console insert insert "$result\n" } } tixConsoleHistory reset tixConsolePrompt } else { tixConsolePrompt partial } if {$setend} { .console yview -pickplace insert } } # tixConsoleHistory -- # This procedure implements command line history for the # console. In general is evals the history command in the # main interpreter to obtain the history. The global variable # histNum is used to store the current location in the history. # # Arguments: # cmd - Which action to take: prev, next, reset. set histNum 1 proc tixConsoleHistory {cmd} { if ![winfo exists .console] tixConsoleInit global histNum switch $cmd { prev { incr histNum -1 if {$histNum == 0} { set cmd {history event [expr [history nextid] -1]} } else { set cmd "history event $histNum" } if {[catch {interp eval $cmd} cmd]} { incr histNum return } .console delete promptEnd end .console insert promptEnd $cmd {input stdin} } next { incr histNum if {$histNum == 0} { set cmd {history event [expr [history nextid] -1]} } elseif {$histNum > 0} { set cmd "" set histNum 1 } else { set cmd "history event $histNum" } if {$cmd != ""} { catch {interp eval $cmd} cmd } .console delete promptEnd end .console insert promptEnd $cmd {input stdin} } reset { set histNum 1 } } } # tixConsolePrompt -- # This procedure draws the prompt. If tcl_prompt1 or tcl_prompt2 # exists in the main interpreter it will be called to generate the # prompt. Otherwise, a hard coded default prompt is printed. # # Arguments: # partial - Flag to specify which prompt to print. proc tixConsolePrompt {{partial normal}} { if ![winfo exists .console] tixConsoleInit if {$partial == "normal"} { set temp [.console index "end - 1 char"] .console mark set output end if {[interp eval "info exists tcl_prompt1"]} { interp eval "eval \[set tcl_prompt1\]" } else { puts -nonewline "% " } } else { set temp [.console index output] .console mark set output end if {[interp eval "info exists tcl_prompt2"]} { interp eval "eval \[set tcl_prompt2\]" } else { puts -nonewline "> " } } flush stdout .console mark set output $temp tkTextSetCursor .console end .console mark set promptEnd insert .console mark gravity promptEnd left } # tixConsoleBind -- # This procedure first ensures that the default bindings for the Text # class have been defined. Then certain bindings are overridden for # the class. # # Arguments: # None. proc tixConsoleBind {win} { if ![winfo exists .console] tixConsoleInit bindtags $win "$win Text . all" # Ignore all Alt, Meta, and Control keypresses unless explicitly bound. # Otherwise, if a widget binding for one of these is defined, the # class binding will also fire and insert the character, # which is wrong. Ditto for . bind $win {# nothing } bind $win {# nothing} bind $win {# nothing} bind $win {# nothing} bind $win {# nothing} bind $win { tixConsoleInsert %W \t focus %W break } bind $win { %W mark set insert {end - 1c} tixConsoleInsert %W "\n" tixConsoleInvoke break } bind $win { if {[%W tag nextrange sel 1.0 end] != ""} { %W tag remove sel sel.first promptEnd } else { if {[%W compare insert < promptEnd]} { break } } } bind $win { if {[%W tag nextrange sel 1.0 end] != ""} { %W tag remove sel sel.first promptEnd } else { if {[%W compare insert <= promptEnd]} { break } } } foreach left {Control-a Home} { bind $win <$left> { if {[%W compare insert < promptEnd]} { tkTextSetCursor %W {insert linestart} } else { tkTextSetCursor %W promptEnd } break } } foreach right {Control-e End} { bind $win <$right> { tkTextSetCursor %W {insert lineend} break } } bind $win { if {[%W compare insert < promptEnd]} { break } } bind $win { if {[%W compare insert < promptEnd]} { %W mark set insert promptEnd } } bind $win { if {[%W compare insert < promptEnd]} { break } } bind $win { if {[%W compare insert < promptEnd]} { break } } bind $win { if {[%W compare insert <= promptEnd]} { break } } bind $win { if {[%W compare insert <= promptEnd]} { break } } foreach prev {Control-p Up} { bind $win <$prev> { tixConsoleHistory prev break } } foreach prev {Control-n Down} { bind $win <$prev> { tixConsoleHistory next break } } bind $win { if {[%W compare insert > promptEnd]} { catch { %W insert insert [selection get -displayof %W] {input stdin} %W see insert } } break } bind $win { catch {tixConsoleInsert %W [selection get -displayof %W]} break } bind $win { tixConsoleInsert %W %A break } foreach left {Control-b Left} { bind $win <$left> { if {[%W compare insert == promptEnd]} { break } tkTextSetCursor %W insert-1c break } } foreach right {Control-f Right} { bind $win <$right> { tkTextSetCursor %W insert+1c break } } bind $win { %W yview scroll -1 unit break; } bind $win { %W yview scroll 1 unit break; } bind $win { %W yview scroll -1 pages } bind $win { %W yview scroll 1 pages } bind $win { eval destroy [winfo child .] source $tix_library/Console.tcl } foreach copy {F16 Meta-w Control-i} { bind $win <$copy> { if {[selection own -displayof %W] == "%W"} { clipboard clear -displayof %W catch { clipboard append -displayof %W [selection get -displayof %W] } } break } } foreach paste {F18 Control-y} { bind $win <$paste> { catch { set clip [selection get -displayof %W -selection CLIPBOARD] set list [split $clip \n\r] tixConsoleInsert %W [lindex $list 0] foreach x [lrange $list 1 end] { %W mark set insert {end - 1c} tixConsoleInsert %W "\n" tixConsoleInvoke tixConsoleInsert %W $x } } break } } } # tixConsoleInsert -- # Insert a string into a text at the point of the insertion cursor. # If there is a selection in the text, and it covers the point of the # insertion cursor, then delete the selection before inserting. Insertion # is restricted to the prompt area. # # Arguments: # w - The text window in which to insert the string # s - The string to insert (usually just a single character) proc tixConsoleInsert {w s} { if ![winfo exists .console] tixConsoleInit if {[.console dlineinfo insert] != {}} { set setend 1 } else { set setend 0 } if {$s == ""} { return } catch { if {[$w compare sel.first <= insert] && [$w compare sel.last >= insert]} { $w tag remove sel sel.first promptEnd $w delete sel.first sel.last } } if {[$w compare insert < promptEnd]} { $w mark set insert end } $w insert insert $s {input stdin} if $setend { .console see insert } } # tixConsoleOutput -- # # This routine is called directly by ConsolePutsCmd to cause a string # to be displayed in the console. # # Arguments: # dest - The output tag to be used: either "stderr" or "stdout". # string - The string to be displayed. proc tixConsoleOutput {dest string} { if ![winfo exists .console] tixConsoleInit if {[.console dlineinfo insert] != {}} { set setend 1 } else { set setend 0 } .console insert output $string $dest if $setend { .console see insert } } # tixConsoleExit -- # # This routine is called by ConsoleEventProc when the main window of # the application is destroyed. # # Arguments: # None. proc tixConsoleExit {} { if ![winfo exists .console] tixConsoleInit exit } # Configure the default Tk console proc tixConsoleEvalAppend {inter} { global tixOption # A slave like the console interp has no global variables set! if {!$inter} { console hide # Change the menubar to Close the console instead of exiting # Your code must provide a way for the user to do a "console show" console eval { if {[winfo exists .menubar.file]} { .menubar.file entryconfigure "Hide Console" \ -underline 0 \ -label Close \ -command [list wm withdraw .] .menubar.file entryconfigure Exit -state disabled } } } console eval ".option configure -font \{$tixOption(fixed_font)\}" console eval { if {[winfo exists .menubar.edit]} { .menubar.edit add sep .menubar.edit add command \ -accelerator 'Ctrl+l' \ -underline 0 \ -label Clear \ -command [list .console delete 1.0 end] bind .console [list .console delete 1.0 end] } if {![winfo exists .menubar.font]} { set m .menubar.font menu $m -tearoff 0 .menubar add cascade -menu .menubar.font \ -underline 0 -label Options global _TixConsole set font [font actual [.console cget -font]] set pos [lsearch $font -family] set _TixConsole(font) [lindex $font [incr pos]] set pos [lsearch $font -size] set _TixConsole(size) [lindex $font [incr pos]] set pos [lsearch $font -weight] set _TixConsole(weight) [lindex $font [incr pos]] set allowed {System Fixedsys Terminal {MS Serif} {MS Sans Serif} Courier {Lucida Console} Tahoma Arial {Courier New} {Times New Roman} {Arial Black} Verdana Garamond {Arial Narrow}} .menubar.font add cascade -label Font -menu $m.font menu $m.font -tearoff 0 foreach font [lsort [font families]] { if {[lsearch $allowed $font] < 0} {continue} $m.font add radiobutton -label $font \ -variable _TixConsole(font) \ -value $font \ -command \ ".console configure -font \"\{$font\} \$_TixConsole(size) \$_TixConsole(weight)\"" } .menubar.font add cascade -label Size -menu $m.size menu $m.size -tearoff 0 foreach size {8 9 10 12 14 16 18} { $m.size add radiobutton -label $size \ -variable _TixConsole(size) \ -value $size \ -command \ ".console configure -font \"\{\$_TixConsole(font)\} $size \$_TixConsole(weight)\"" } .menubar.font add cascade -label Weight -menu $m.weight menu $m.weight -tearoff 0 foreach weight {normal bold} { $m.weight add radiobutton -label [string totit $weight] \ -variable _TixConsole(weight) \ -value $weight \ -command \ ".console configure -font \"\{\$_TixConsole(font)\} \$_TixConsole(size) $weight\"" } } } } Tix8.4.3/DtlList.tcl000064400000001752150252220140007764 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: DtlList.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ # # DtlList.tcl -- # # This file implements DetailList widgets # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixDetailList { -classname TixDetailList -superclass tixScrolledGrid -method { } -flag { -hdrbackground } -configspec { {-hdrbackground hdrBackground HdrBackground #606060} } -alias { {-hdrbg -hdrbackground} } -default { {*grid.topMargin 1} {*grid.leftMargin 0} } } proc tixDetailList:FormatCmd {w area x1 y1 x2 y2} { upvar #0 $w data case $area { main { } default { $data(w:grid) format border $x1 $y1 $x2 $y2 \ -filled 1 \ -relief raised -bd 1 -bg $data(-hdrbackground) } } } Tix8.4.3/Control.tcl000064400000030162150252220140010022 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Control.tcl,v 1.9 2004/03/28 02:44:57 hobbs Exp $ # # Control.tcl -- # # Implements the TixControl Widget. It is called the "SpinBox" # in other toolkits. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixControl { -classname TixControl -superclass tixLabelWidget -method { incr decr invoke update } -flag { -allowempty -autorepeat -command -decrcmd -disablecallback -disabledforeground -incrcmd -initwait -integer -llimit -repeatrate -max -min -selectmode -step -state -validatecmd -value -variable -ulimit } -forcecall { -variable -state } -configspec { {-allowempty allowEmpty AllowEmpty false} {-autorepeat autoRepeat AutoRepeat true} {-command command Command ""} {-decrcmd decrCmd DecrCmd ""} {-disablecallback disableCallback DisableCallback 0 tixVerifyBoolean} {-disabledforeground disabledForeground DisabledForeground #303030} {-incrcmd incrCmd IncrCmd ""} {-initwait initWait InitWait 500} {-integer integer Integer false} {-max max Max ""} {-min min Min ""} {-repeatrate repeatRate RepeatRate 50} {-step step Step 1} {-state state State normal} {-selectmode selectMode SelectMode normal} {-validatecmd validateCmd ValidateCmd ""} {-value value Value 0} {-variable variable Variable ""} } -alias { {-llimit -min} {-ulimit -max} } -default { {.borderWidth 0} {*entry.relief sunken} {*entry.width 5} {*label.anchor e} {*label.borderWidth 0} {*Button.anchor c} {*Button.borderWidth 2} {*Button.highlightThickness 1} {*Button.takeFocus 0} } } proc tixControl:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec set data(varInited) 0 set data(serial) 0 } proc tixControl:ConstructFramedWidget {w frame} { upvar #0 $w data tixChainMethod $w ConstructFramedWidget $frame set data(w:entry) [entry $frame.entry] set data(w:incr) \ [button $frame.incr -bitmap [tix getbitmap incr] -takefocus 0] set data(w:decr) \ [button $frame.decr -bitmap [tix getbitmap decr] -takefocus 0] # tixForm $data(w:entry) -left 0 -top 0 -bottom -1 -right $data(w:decr) # tixForm $data(w:incr) -right -1 -top 0 -bottom %50 # tixForm $data(w:decr) -right -1 -top $data(w:incr) -bottom -1 pack $data(w:entry) -side left -expand yes -fill both pack $data(w:decr) -side bottom -fill both -expand yes pack $data(w:incr) -side top -fill both -expand yes $data(w:entry) delete 0 end $data(w:entry) insert 0 $data(-value) # This value is used to configure the disable/normal fg of the ebtry set data(entryfg) [$data(w:entry) cget -fg] set data(labelfg) [$data(w:label) cget -fg] } proc tixControl:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings bind $data(w:incr) \ [list after idle tixControl:StartRepeat $w 1] bind $data(w:decr) \ [list after idle tixControl:StartRepeat $w -1] # These bindings will stop the button autorepeat when the # mouse button is up foreach btn [list $data(w:incr) $data(w:decr)] { bind $btn [list tixControl:StopRepeat $w] } tixSetMegaWidget $data(w:entry) $w # If user press , verify the value and call the -command # tixAddBindTag $data(w:entry) TixControl:Entry } proc tixControlBind {} { tixBind TixControl:Entry { tixControl:Invoke [tixGetMegaWidget %W] 1 } tixBind TixControl:Entry { tixControl:Escape [tixGetMegaWidget %W] } tixBind TixControl:Entry { [tixGetMegaWidget %W] incr } tixBind TixControl:Entry { [tixGetMegaWidget %W] decr } tixBind TixControl:Entry { if {"%d" eq "NotifyNonlinear" || "%d" eq "NotifyNonlinearVirtual"} { tixControl:Tab [tixGetMegaWidget %W] %d } } tixBind TixControl:Entry { tixControl:KeyPress [tixGetMegaWidget %W] } tixBind TixControl:Entry { # This has a higher priority than the binding # --> so that data(edited) is not set } } #---------------------------------------------------------------------- # CONFIG OPTIONS #---------------------------------------------------------------------- proc tixControl:config-state {w arg} { upvar #0 $w data if {$arg eq "normal"} { $data(w:incr) config -state $arg $data(w:decr) config -state $arg catch { $data(w:label) config -fg $data(labelfg) } $data(w:entry) config -state $arg -fg $data(entryfg) } else { $data(w:incr) config -state $arg $data(w:decr) config -state $arg catch { $data(w:label) config -fg $data(-disabledforeground) } $data(w:entry) config -state $arg -fg $data(-disabledforeground) } } proc tixControl:config-value {w value} { upvar #0 $w data tixControl:SetValue $w $value 0 1 # This will tell the Intrinsics: "Please use this value" # because "value" might be altered by SetValues # return $data(-value) } proc tixControl:config-variable {w arg} { upvar #0 $w data if {[tixVariable:ConfigVariable $w $arg]} { # The value of data(-value) is changed if tixVariable:ConfigVariable # returns true tixControl:SetValue $w $data(-value) 1 1 } catch { unset data(varInited) } set data(-variable) $arg } #---------------------------------------------------------------------- # User Commands #---------------------------------------------------------------------- proc tixControl:incr {w {by 1}} { upvar #0 $w data if {$data(-state) ne "disabled"} { if {![catch {$data(w:entry) index sel.first}]} { $data(w:entry) select from end $data(w:entry) select to end } # CYGNUS - why set value before changing it? #tixControl:SetValue $w [$data(w:entry) get] 0 1 tixControl:AdjustValue $w $by } } proc tixControl:decr {w {by 1}} { upvar #0 $w data if {$data(-state) ne "disabled"} { if {![catch {$data(w:entry) index sel.first}]} { $data(w:entry) select from end $data(w:entry) select to end } # CYGNUS - why set value before changing it? #tixControl:SetValue $w [$data(w:entry) get] 0 1 tixControl:AdjustValue $w [expr {0 - $by}] } } proc tixControl:invoke {w} { upvar #0 $w data tixControl:Invoke $w 0 } proc tixControl:update {w} { upvar #0 $w data if {[info exists data(edited)]} { tixControl:invoke $w } } #---------------------------------------------------------------------- # Internal Commands #---------------------------------------------------------------------- # Change the value by a multiple of the data(-step) # proc tixControl:AdjustValue {w amount} { upvar #0 $w data if {$amount == 1 && [llength $data(-incrcmd)]} { set newValue [tixEvalCmdBinding $w $data(-incrcmd) "" $data(-value)] } elseif {$amount == -1 && [llength $data(-decrcmd)]} { set newValue [tixEvalCmdBinding $w $data(-decrcmd) "" $data(-value)] } else { set newValue [expr {$data(-value) + $amount * $data(-step)}] } if {$data(-state) ne "disabled"} { tixControl:SetValue $w $newValue 0 1 } } proc tixControl:SetValue {w newvalue noUpdate forced} { upvar #0 $w data if {[$data(w:entry) selection present]} { set oldSelection [list [$data(w:entry) index sel.first] \ [$data(w:entry) index sel.last]] } set oldvalue $data(-value) set oldCursor [$data(w:entry) index insert] set changed 0 if {[llength $data(-validatecmd)]} { # Call the user supplied validation command # set data(-value) [tixEvalCmdBinding $w $data(-validatecmd) "" $newvalue] } else { # Here we only allow int or floating numbers # # If the new value is not a valid number, the old value will be # kept due to the "catch" statements # if {[catch {expr 0+$newvalue}]} { set newvalue 0 set data(-value) 0 set changed 1 } if {$newvalue == ""} { if {![string is true -strict $data(-allowempty)]} { set newvalue 0 set changed 1 } else { set data(-value) "" } } if {$newvalue != ""} { # Change this to a valid decimal string (trim leading 0) # regsub -- {^[0]*} $newvalue "" newvalue if {[catch {expr 0+$newvalue}]} { set newvalue 0 set data(-value) 0 set changed 1 } if {$newvalue == ""} { set newvalue 0 } if {[string is true -strict $data(-integer)]} { set data(-value) [tixGetInt -nocomplain $newvalue] } else { if {[catch {set data(-value) [format "%d" $newvalue]}]} { if {[catch {set data(-value) [expr $newvalue+0.0]}]} { set data(-value) $oldvalue } } } # Now perform boundary checking # if {$data(-max) != "" && $data(-value) > $data(-max)} { set data(-value) $data(-max) } if {$data(-min) != "" && $data(-value) < $data(-min)} { set data(-value) $data(-min) } } } if {! $noUpdate} { tixVariable:UpdateVariable $w } if {$forced || ($newvalue ne $data(-value)) || $changed} { $data(w:entry) delete 0 end $data(w:entry) insert 0 $data(-value) $data(w:entry) icursor $oldCursor if {[info exists oldSelection]} { eval [list $data(w:entry) selection range] $oldSelection } } if {!$data(-disablecallback) && $data(-command) != ""} { if {![info exists data(varInited)]} { set bind(specs) "" tixEvalCmdBinding $w $data(-command) bind $data(-value) } } } proc tixControl:Invoke {w forced} { upvar #0 $w data catch { unset data(edited) } if {[catch {$data(w:entry) index sel.first}] == 0} { # THIS ENTRY OWNS SELECTION --> TURN IT OFF # $data(w:entry) select from end $data(w:entry) select to end } tixControl:SetValue $w [$data(w:entry) get] 0 $forced } #---------------------------------------------------------------------- # The three functions StartRepeat, Repeat and StopRepeat make use of the # data(serial) variable to discard spurious repeats: If a button is clicked # repeatedly but is not hold down, the serial counter will increase # successively and all "after" time event handlers will be discarded #---------------------------------------------------------------------- proc tixControl:StartRepeat {w amount} { if {![winfo exists $w]} { return } upvar #0 $w data incr data(serial) # CYGNUS bug fix # Need to set a local variable because otherwise the buttonrelease # callback could change the value of data(serial) between now and # the time the repeat is scheduled. set serial $data(serial) if {![catch {$data(w:entry) index sel.first}]} { $data(w:entry) select from end $data(w:entry) select to end } if {[info exists data(edited)]} { unset data(edited) tixControl:SetValue $w [$data(w:entry) get] 0 1 } tixControl:AdjustValue $w $amount if {$data(-autorepeat)} { after $data(-initwait) tixControl:Repeat $w $amount $serial } focus $data(w:entry) } proc tixControl:Repeat {w amount serial} { if {![winfo exists $w]} { return } upvar #0 $w data if {$serial eq $data(serial)} { tixControl:AdjustValue $w $amount if {$data(-autorepeat)} { after $data(-repeatrate) tixControl:Repeat $w $amount $serial } } } proc tixControl:StopRepeat {w} { upvar #0 $w data incr data(serial) } proc tixControl:Destructor {w} { tixVariable:DeleteVariable $w # Chain this to the superclass # tixChainMethod $w Destructor } # ToDo: maybe should return -code break if the value is not good ... # proc tixControl:Tab {w detail} { upvar #0 $w data if {![info exists data(edited)]} { return } else { unset data(edited) } tixControl:invoke $w } proc tixControl:Escape {w} { upvar #0 $w data $data(w:entry) delete 0 end $data(w:entry) insert 0 $data(-value) } proc tixControl:KeyPress {w} { upvar #0 $w data if {$data(-selectmode) eq "normal"} { set data(edited) 0 return } else { # == "immediate" after 1 tixControl:invoke $w } } Tix8.4.3/Tix.tcl000064400000023011150252220140007141 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Tix.tcl,v 1.14 2008/03/17 23:01:10 hobbs Exp $ # # Tix.tcl -- # # This file implements the Tix application context class # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixClass tixAppContext { -superclass {} -classname TixAppContext -method { cget configure addbitmapdir filedialog getbitmap getimage option platform resetoptions setbitmap initstyle } -flag { -binding -debug -extracmdargs -filedialog -fontset -grabmode -haspixmap -libdir -scheme -schemepriority -percentsubst } -readonly { -haspixmap } -configspec { {-binding TK} {-debug 0} {-extracmdargs 1} {-filedialog ""} {-fontset WmDefault} {-grabmode global} {-haspixmap 0} {-libdir ""} {-percentsubst 0} {-scheme WmDefault} {-schemepriority 21} } -alias { } } proc tixAppContext:Constructor {w} { upvar #0 $w data global tix_priv tix_library tixOption if {[info exists data(initialized)]} { error "tixAppContext has already be initialized" } else { set data(initialized) 1 } set data(et) [string equal $tix_library ""] set data(image) 0 # These options were set when Tix was loaded # set data(-binding) $tix_priv(-binding) set data(-debug) $tix_priv(-debug) set data(-fontset) $tix_priv(-fontset) set data(-scheme) $tix_priv(-scheme) set data(-schemepriority) $tix_priv(-schemepriority) if {![info exists tix_priv(isSafe)]} { set data(-libdir) [file normalize $tix_library] } set tixOption(prioLevel) $tix_priv(-schemepriority) # Compatibility stuff: the obsolete name courier_font has been changed to # fixed_font set tixOption(fixed_font) Courier set tixOption(courier_font) $tixOption(fixed_font) # Enable/Disable Intrinsics debugging # set tix_priv(debug) [string is true -strict $data(-debug)] tixAppContext:BitmapInit $w tixAppContext:FileDialogInit $w # Clean up any error message generated by the above loop set ::errorInfo "" } proc tixAppContext:initstyle {w} { # Do the init stuff here that affects styles upvar #0 $w data global tix_priv if {![info exists tix_priv(isSafe)]} { tixAppContext:config-fontset $w $data(-fontset) tixAppContext:config-scheme $w $data(-scheme) } tixAppContext:BitmapInit $w tixAppContext:FileDialogInit $w # Force the "." window to accept the new Tix options # set noconfig [list -class -colormap -container -menu -screen -use -visual] set noconfig [lsort $noconfig] foreach spec [. configure] { set flag [lindex $spec 0] if {[llength $spec] != 5 || [lsearch -exact -sorted $noconfig $flag] != -1} { continue } set name [lindex $spec 1] set class [lindex $spec 2] set value [option get . $name $class] catch {. configure $flag $value} } } #---------------------------------------------------------------------- # Configurations # #---------------------------------------------------------------------- proc tixAppContext:resetoptions {w scheme fontset {schemePrio ""}} { upvar #0 $w data if {! $data(et)} { global tixOption option clear if {$schemePrio != ""} { set tixOption(prioLevel) $schemePrio } tixAppContext:config-scheme $w $scheme tixAppContext:config-fontset $w $fontset } } proc tixAppContext:StartupError {args} { bgerror [join $args "\n"] } proc tixAppContext:config-fontset {w value} { upvar #0 $w data global tix_priv tixOption set data(-fontset) $value #----------------------------------- # Initialization of options database #----------------------------------- # Load the fontset # if {!$data(et)} { set prefDir [file join $data(-libdir) pref] set fontSetFile [file join $prefDir $data(-fontset).fsc] if {[file exists $fontSetFile]} { source $fontSetFile tixPref:InitFontSet:$data(-fontset) tixPref:SetFontSet:$data(-fontset) } else { tixAppContext:StartupError \ " Error: cannot use fontset \"$data(-fontset)\"" \ " Using default fontset " tixSetDefaultFontset } } else { if [catch { tixPref:InitFontSet:$data(-fontset) tixPref:SetFontSet:$data(-fontset) }] { # User chose non-existent fontset # tixAppContext:StartupError \ " Error: cannot use fontset \"$data(-fontset)\"" \ " Using default fontset " tixSetDefaultFontset } } } proc tixAppContext:config-scheme {w value} { upvar #0 $w data global tix_priv set data(-scheme) $value # Load the color scheme # if {!$data(et)} { set schemeName [file join [file join $data(-libdir) pref] \ $data(-scheme).csc] if {[file exists $schemeName]} { source $schemeName tixPref:SetScheme-Color:$data(-scheme) } else { tixAppContext:StartupError \ " Error: cannot use color scheme \"$data(-scheme)\"" \ " Using default color scheme" tixSetDefaultScheme-Color } } else { if [catch {tixPref:SetScheme-Color:$data(-scheme)}] { # User chose non-existent color scheme # tixAppContext:StartupError \ " Error: cannot use color scheme \"$data(-scheme)\"" \ " Using default color scheme" tixSetDefaultScheme-Color } } } #---------------------------------------------------------------------- # Private methods # #---------------------------------------------------------------------- proc tixAppContext:BitmapInit {w} { upvar #0 $w data # See whether we have pixmap extension # set data(-haspixmap) true # Dynamically set the bitmap directory # if {! $data(et)} { set data(bitmapdirs) [list [file join $data(-libdir) bitmaps]] } else { set data(bitmapdirs) "" } } proc tixAppContext:FileDialogInit {w} { upvar #0 $w data if {$data(-filedialog) == ""} { set data(-filedialog) [option get . fileDialog FileDialog] } if {$data(-filedialog) == ""} { set data(-filedialog) tixFileSelectDialog } } #---------------------------------------------------------------------- # Public methods #---------------------------------------------------------------------- proc tixAppContext:addbitmapdir {w bmpdir} { upvar #0 $w data if {[lsearch $data(bitmapdirs) $bmpdir] == -1} { lappend data(bitmapdirs) $bmpdir } } proc tixAppContext:getimage {w name} { upvar #0 $w data global tix_priv if {[info exists data(img:$name)]} { return $data(img:$name) } if {![info exists tix_priv(isSafe)]} { foreach dir $data(bitmapdirs) { foreach {ext type} { .xpm pixmap .gif photo .ppm photo .xbm bitmap "" bitmap } { set file [file join $dir $name$ext] if {[file exists $file] && ![catch { set img tiximage$data(image) set data(img:$name) \ [image create $type $img -file $file] }]} { incr data(image) break } } if {[info exists data(img:$name)]} { return $data(img:$name) } } } if {![info exists data(img:$name)]} { catch { set img tiximage$data(image) # This is for compiled-in images set data(img:$name) [image create pixmap $img -id $name] } err if {[string match internal* $err]} { error $err } else { incr data(image) } } if {[info exists data(img:$name)]} { return $data(img:$name) } else { error "image file \"$name\" cannot be found" } } proc tixAppContext:getbitmap {w bitmapname} { upvar #0 $w data global tix_priv if {[info exists data(bmp:$bitmapname)]} { return $data(bmp:$bitmapname) } else { set ext [file extension $bitmapname] if {$ext == ""} { set ext .xbm } # This is the fallback value. If we can't find the bitmap in # the bitmap directories, then use the name of the bitmap # as the default value. # set data(bmp:$bitmapname) $bitmapname if {[info exists tix_priv(isSafe)]} { return $data(bmp:$bitmapname) } foreach dir $data(bitmapdirs) { if {$ext eq ".xbm" && [file exists [file join $dir $bitmapname.xbm]]} { set data(bmp:$bitmapname) \ @[file join $dir $bitmapname.xbm] break } if {[file exists [file join $dir $bitmapname]]} { set data(bmp:$bitmapname) @[file join $dir $bitmapname] break } } return $data(bmp:$bitmapname) } } proc tixAppContext:filedialog {w {type tixFileSelectDialog}} { upvar #0 $w data if {$type == ""} { set type $data(-filedialog) } if {![info exists data(filedialog,$type)]} { set data(filedialog,$type) "" } if {$data(filedialog,$type) == "" || \ ![winfo exists $data(filedialog,$type)]} { set data(filedialog,$type) [$type .tixapp_filedialog_$type] } return $data(filedialog,$type) } proc tixAppContext:option {w action {option ""} {value ""}} { global tixOption if {$action eq "get"} { if {$option == ""} {return [lsort [array names tixOption]]} return $tixOption($option) } } proc tixAppContext:platform {w} { return $::tcl_platform(platform) } proc tixDebug {message {level "1"}} { set debug [tix cget -debug] if {![string is true -strict $debug]} { return } if {$debug > 0} { # use $level here if {[catch {fconfigure stderr}]} { # This will happen under PYTHONW.EXE or frozen Windows apps proc tixDebug args {} } else { puts stderr $message } } } if {![llength [info commands toplevel]]} { interp alias {} toplevel {} frame } Tix8.4.3/TList.tcl000064400000043131150252220140007441 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: TList.tcl,v 1.6 2002/01/24 09:13:58 idiscovery Exp $ # # TList.tcl -- # # This file defines the default bindings for Tix Tabular Listbox # widgets. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # global tkPriv if {![llength [info globals tkPriv]]} { tk::unsupported::ExposePrivateVariable tkPriv } #-------------------------------------------------------------------------- # tkPriv elements used in this file: # # afterId - Token returned by "after" for autoscanning. # fakeRelease - Cancel the ButtonRelease-1 after the user double click #-------------------------------------------------------------------------- # proc tixTListBind {} { tixBind TixTList { tixTList:Button-1 %W %x %y } tixBind TixTList { tixTList:Shift-Button-1 %W %x %y } tixBind TixTList { tixTList:Control-Button-1 %W %x %y } tixBind TixTList { tixTList:ButtonRelease-1 %W %x %y } tixBind TixTList { tixTList:Double-1 %W %x %y } tixBind TixTList { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixTList:B1-Motion %W %x %y } tixBind TixTList { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixTList:Control-B1-Motion %W %x %y } tixBind TixTList { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixTList:B1-Leave %W } tixBind TixTList { tixTList:B1-Enter %W %x %y } tixBind TixTList { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixTList:Control-B1-Leave %W } tixBind TixTList { tixTList:Control-B1-Enter %W %x %y } # Keyboard bindings # tixBind TixTList { tixTList:DirKey %W up } tixBind TixTList { tixTList:DirKey %W down } tixBind TixTList { tixTList:DirKey %W left } tixBind TixTList { tixTList:DirKey %W right } tixBind TixTList { %W yview scroll -1 pages } tixBind TixTList { %W yview scroll 1 pages } tixBind TixTList { tixTList:Return %W } tixBind TixTList { tixTList:Space %W } # # Don't use tixBind because %A causes Tk 8.3.2 to crash # bind TixTList { if {"[%W cget -orient]" == "vertical"} { %W xview scroll [expr {- (%D / 120) * 4}] units } else { %W yview scroll [expr {- (%D / 120) * 2}] units } } } #---------------------------------------------------------------------- # # # Mouse bindings # # #---------------------------------------------------------------------- proc tixTList:Button-1 {w x y} { if {[$w cget -state] == "disabled"} { return } if {[$w cget -takefocus]} { focus $w } case [tixTList:GetState $w] { {s0} { tixTList:GoState s1 $w $x $y } {b0} { tixTList:GoState b1 $w $x $y } {m0} { tixTList:GoState m1 $w $x $y } {e0} { tixTList:GoState e1 $w $x $y } } } proc tixTList:Shift-Button-1 {w x y} { if {[$w cget -state] == "disabled"} { return } if {[$w cget -takefocus]} { focus $w } case [tixTList:GetState $w] { {s0} { tixTList:GoState s1 $w $x $y } {b0} { tixTList:GoState b1 $w $x $y } {m0} { tixTList:GoState m7 $w $x $y } {e0} { tixTList:GoState e7 $w $x $y } } } proc tixTList:Control-Button-1 {w x y} { if {[$w cget -state] == "disabled"} { return } if {[$w cget -takefocus]} { focus $w } case [tixTList:GetState $w] { {s0} { tixTList:GoState s1 $w $x $y } {b0} { tixTList:GoState b1 $w $x $y } {m0} { tixTList:GoState m1 $w $x $y } {e0} { tixTList:GoState e10 $w $x $y } } } proc tixTList:ButtonRelease-1 {w x y} { case [tixTList:GetState $w] { {s2 s4 s5 s6} { tixTList:GoState s3 $w } {b2 b4 b5 b6} { tixTList:GoState b3 $w } {m2} { tixTList:GoState m3 $w } {m5} { tixTList:GoState m6 $w $x $y } {m9} { tixTList:GoState m0 $w } {e2} { tixTList:GoState e3 $w } {e5} { tixTList:GoState e6 $w $x $y } {e9} { tixTList:GoState e0 $w } } } proc tixTList:B1-Motion {w x y} { case [tixTList:GetState $w] { {s2 s4} { tixTList:GoState s4 $w $x $y } {b2 b4} { tixTList:GoState b4 $w $x $y } {m2 m5} { tixTList:GoState m4 $w $x $y } {e2 e5} { tixTList:GoState e4 $w $x $y } } } proc tixTList:Control-B1-Motion {w x y} { case [tixTList:GetState $w] { {s2 s4} { tixTList:GoState s4 $w $x $y } {b2 b4} { tixTList:GoState b4 $w $x $y } {m2 m5} { tixTList:GoState m4 $w $x $y } } } proc tixTList:Double-1 {w x y} { case [tixTList:GetState $w] { {s0} { tixTList:GoState s7 $w $x $y } {b0} { tixTList:GoState b7 $w $x $y } } } proc tixTList:B1-Leave {w} { case [tixTList:GetState $w] { {s2 s4} { tixTList:GoState s5 $w } {b2 b4} { tixTList:GoState b5 $w } {m2 m5} { tixTList:GoState m8 $w } {e2 e5} { tixTList:GoState e8 $w } } } proc tixTList:B1-Enter {w x y} { case [tixTList:GetState $w] { {s5 s6} { tixTList:GoState s4 $w $x $y } {b5 b6} { tixTList:GoState b4 $w $x $y } {m8 m9} { tixTList:GoState m4 $w $x $y } {e8 e9} { tixTList:GoState e4 $w $x $y } } } proc tixTList:Control-B1-Leave {w} { case [tixTList:GetState $w] { {s2 s4} { tixTList:GoState s5 $w } {b2 b4} { tixTList:GoState b5 $w } {m2 m5} { tixTList:GoState m8 $w } } } proc tixTList:Control-B1-Enter {w x y} { case [tixTList:GetState $w] { {s5 s6} { tixTList:GoState s4 $w $x $y } {b5 b6} { tixTList:GoState b4 $w $x $y } {m8 m9} { tixTList:GoState m4 $w $x $y } } } proc tixTList:AutoScan {w} { case [tixTList:GetState $w] { {s5 s6} { tixTList:GoState s6 $w } {b5 b6} { tixTList:GoState b6 $w } {m8 m9} { tixTList:GoState m9 $w } {e8 e9} { tixTList:GoState e9 $w } } } #---------------------------------------------------------------------- # # # Key bindings # # #---------------------------------------------------------------------- proc tixTList:DirKey {w key} { if {[$w cget -state] == "disabled"} { return } case [tixTList:GetState $w] { {s0} { tixTList:GoState s8 $w $key } {b0} { tixTList:GoState b8 $w $key } } } proc tixTList:Return {w} { if {[$w cget -state] == "disabled"} { return } case [tixTList:GetState $w] { {s0} { tixTList:GoState s9 $w } {b0} { tixTList:GoState b9 $w } } } proc tixTList:Space {w} { if {[$w cget -state] == "disabled"} { return } case [tixTList:GetState $w] { {s0} { tixTList:GoState s10 $w } {b0} { tixTList:GoState b10 $w } } } #---------------------------------------------------------------------- # # STATE MANIPULATION # # #---------------------------------------------------------------------- proc tixTList:GetState {w} { global $w:priv:state if {[info exists $w:priv:state]} { # # If the app has changed the selectmode, reset the state to the # original state. # set type [string index [$w cget -selectmode] 0] if {"[string index [set $w:priv:state] 0]" != "$type"} { unset $w:priv:state } } if {![info exists $w:priv:state]} { case [$w cget -selectmode] { single { set $w:priv:state s0 } browse { set $w:priv:state b0 } multiple { set $w:priv:state m0 } extended { set $w:priv:state e0 } default { set $w:priv:state unknown } } } return [set $w:priv:state] } proc tixTList:SetState {w n} { global $w:priv:state set $w:priv:state $n } proc tixTList:GoState {n w args} { # puts "going from [tixTList:GetState $w] --> $n" tixTList:SetState $w $n eval tixTList:GoState-$n $w $args } #---------------------------------------------------------------------- # States #---------------------------------------------------------------------- #---------------------------------------------------------------------- # SINGLE SELECTION #---------------------------------------------------------------------- proc tixTList:GoState-s0 {w} { } proc tixTList:GoState-s1 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w see $ent } tixTList:GoState s2 $w } proc tixTList:GoState-s2 {w} { } proc tixTList:GoState-s3 {w} { set ent [$w info anchor] if {$ent != ""} { $w selection clear $w selection set $ent tixTList:CallBrowseCmd $w $ent } tixTList:GoState s0 $w } proc tixTList:GoState-s4 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w see $ent } } proc tixTList:GoState-s5 {w} { tixTList:StartScan $w } proc tixTList:GoState-s6 {w} { global tkPriv tixTList:DoScan $w } proc tixTList:GoState-s7 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w selection clear $w selection set $ent tixTList:CallCommand $w $ent } tixTList:GoState s0 $w } proc tixTList:GoState-s8 {w key} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 } else { set anchor [$w info $key $anchor] } $w anchor set $anchor $w see $anchor tixTList:GoState s0 $w } proc tixTList:GoState-s9 {w} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 $w anchor set $anchor $w see $anchor } if {[$w info anchor] != ""} { # ! may not have any elements # tixTList:CallCommand $w [$w info anchor] $w selection clear $w selection set $anchor } tixTList:GoState s0 $w } proc tixTList:GoState-s10 {w} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 $w anchor set $anchor $w see $anchor } if {[$w info anchor] != ""} { # ! may not have any elements # tixTList:CallBrowseCmd $w [$w info anchor] $w selection clear $w selection set $anchor } tixTList:GoState s0 $w } #---------------------------------------------------------------------- # BROWSE SELECTION #---------------------------------------------------------------------- proc tixTList:GoState-b0 {w} { } proc tixTList:GoState-b1 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w see $ent $w selection clear $w selection set $ent tixTList:CallBrowseCmd $w $ent } tixTList:GoState b2 $w } proc tixTList:GoState-b2 {w} { } proc tixTList:GoState-b3 {w} { set ent [$w info anchor] if {$ent != ""} { $w selection clear $w selection set $ent tixTList:CallBrowseCmd $w $ent } tixTList:GoState b0 $w } proc tixTList:GoState-b4 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w see $ent $w selection clear $w selection set $ent tixTList:CallBrowseCmd $w $ent } } proc tixTList:GoState-b5 {w} { tixTList:StartScan $w } proc tixTList:GoState-b6 {w} { global tkPriv tixTList:DoScan $w } proc tixTList:GoState-b7 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w selection clear $w selection set $ent tixTList:CallCommand $w $ent } tixTList:GoState b0 $w } proc tixTList:GoState-b8 {w key} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 } else { set anchor [$w info $key $anchor] } $w anchor set $anchor $w selection clear $w selection set $anchor $w see $anchor tixTList:CallBrowseCmd $w $anchor tixTList:GoState b0 $w } proc tixTList:GoState-b9 {w} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 $w anchor set $anchor $w see $anchor } if {[$w info anchor] != ""} { # ! may not have any elements # tixTList:CallCommand $w [$w info anchor] $w selection clear $w selection set $anchor } tixTList:GoState b0 $w } proc tixTList:GoState-b10 {w} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 $w anchor set $anchor $w see $anchor } if {[$w info anchor] != ""} { # ! may not have any elements # tixTList:CallBrowseCmd $w [$w info anchor] $w selection clear $w selection set $anchor } tixTList:GoState b0 $w } #---------------------------------------------------------------------- # MULTIPLE SELECTION #---------------------------------------------------------------------- proc tixTList:GoState-m0 {w} { } proc tixTList:GoState-m1 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w see $ent $w selection clear $w selection set $ent tixTList:CallBrowseCmd $w $ent } tixTList:GoState m2 $w } proc tixTList:GoState-m2 {w} { } proc tixTList:GoState-m3 {w} { set ent [$w info anchor] if {$ent != ""} { tixTList:CallBrowseCmd $w $ent } tixTList:GoState m0 $w } proc tixTList:GoState-m4 {w x y} { set from [$w info anchor] set to [$w nearest $x $y] if {$to != ""} { $w selection clear $w selection set $from $to tixTList:CallBrowseCmd $w $to } tixTList:GoState m5 $w } proc tixTList:GoState-m5 {w} { } proc tixTList:GoState-m6 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { tixTList:CallBrowseCmd $w $ent } tixTList:GoState m0 $w } proc tixTList:GoState-m7 {w x y} { set from [$w info anchor] set to [$w nearest $x $y] if {$from == ""} { set from $to $w anchor set $from $w see $from } if {$to != ""} { $w selection clear $w selection set $from $to tixTList:CallBrowseCmd $w $to } tixTList:GoState m5 $w } proc tixTList:GoState-m8 {w} { tixTList:StartScan $w } proc tixTList:GoState-m9 {w} { tixTList:DoScan $w } proc tixTList:GoState-xm7 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w selection clear $w selection set $ent tixTList:CallCommand $w $ent } tixTList:GoState m0 $w } #---------------------------------------------------------------------- # EXTENDED SELECTION #---------------------------------------------------------------------- proc tixTList:GoState-e0 {w} { } proc tixTList:GoState-e1 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w see $ent $w selection clear $w selection set $ent tixTList:CallBrowseCmd $w $ent } tixTList:GoState e2 $w } proc tixTList:GoState-e2 {w} { } proc tixTList:GoState-e3 {w} { set ent [$w info anchor] if {$ent != ""} { tixTList:CallBrowseCmd $w $ent } tixTList:GoState e0 $w } proc tixTList:GoState-e4 {w x y} { set from [$w info anchor] set to [$w nearest $x $y] if {$to != ""} { $w selection clear $w selection set $from $to tixTList:CallBrowseCmd $w $to } tixTList:GoState e5 $w } proc tixTList:GoState-e5 {w} { } proc tixTList:GoState-e6 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { tixTList:CallBrowseCmd $w $ent } tixTList:GoState e0 $w } proc tixTList:GoState-e7 {w x y} { set from [$w info anchor] set to [$w nearest $x $y] if {$from == ""} { set from $to $w anchor set $from $w see $from } if {$to != ""} { $w selection clear $w selection set $from $to tixTList:CallBrowseCmd $w $to } tixTList:GoState e5 $w } proc tixTList:GoState-e8 {w} { tixTList:StartScan $w } proc tixTList:GoState-e9 {w} { tixTList:DoScan $w } proc tixTList:GoState-e10 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { if {[$w info anchor] == ""} { $w anchor set $ent $w see $ent } if {[$w selection includes $ent]} { $w selection clear $ent } else { $w selection set $ent } tixTList:CallBrowseCmd $w $ent } tixTList:GoState e2 $w } proc tixTList:GoState-xm7 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w selection clear $w selection set $ent tixTList:CallCommand $w $ent } tixTList:GoState e0 $w } #---------------------------------------------------------------------- # callback actions #---------------------------------------------------------------------- proc tixTList:SetAnchor {w x y} { set ent [$w nearest $x $y] if {$ent != "" && [$w entrycget $ent -state] != "disabled"} { $w anchor set $ent $w see $ent return $ent } return "" } proc tixTList:Select {w ent} { $w selection clear $w select set $ent } proc tixTList:StartScan {w} { global tkPriv set tkPriv(afterId) [after 50 tixTList:AutoScan $w] } proc tixTList:DoScan {w} { global tkPriv set x $tkPriv(x) set y $tkPriv(y) set X $tkPriv(X) set Y $tkPriv(Y) set out 0 if {$y >= [winfo height $w]} { $w yview scroll 1 units set out 1 } if {$y < 0} { $w yview scroll -1 units set out 1 } if {$x >= [winfo width $w]} { $w xview scroll 2 units set out 1 } if {$x < 0} { $w xview scroll -2 units set out 1 } if {$out} { set tkPriv(afterId) [after 50 tixTList:AutoScan $w] } } proc tixTList:CallBrowseCmd {w ent} { set browsecmd [$w cget -browsecmd] if {$browsecmd != ""} { set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $browsecmd bind $ent } } proc tixTList:CallCommand {w ent} { set command [$w cget -command] if {$command != ""} { set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $command bind $ent } } Tix8.4.3/DirDlg.tcl000064400000004236150252220140007552 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: DirDlg.tcl,v 1.3 2001/12/09 05:04:02 idiscovery Exp $ # # DirDlg.tcl -- # # Implements the Directory Selection Dialog widget. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixDirSelectDialog { -classname TixDirSelectDialog -superclass tixDialogShell -method {} -flag { -command } -configspec { {-command command Command ""} {-title title Title "Select A Directory"} } -default { {*ok.text "OK"} {*ok.underline 0} {*ok.width 6} {*cancel.text "Cancel"} {*cancel.underline 0} {*cancel.width 6} {*dirbox.borderWidth 1} {*dirbox.relief raised} } } proc tixDirSelectDialog:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget # the buttons frame $w.f -relief raised -bd 1 set data(w:ok) [button $w.f.ok -command \ "tixDirSelectDialog:OK $w"] set data(w:cancel) [button $w.f.cancel -command \ "tixDirSelectDialog:Cancel $w"] pack $data(w:ok) $data(w:cancel) -side left -expand yes -padx 10 -pady 8 pack $w.f -side bottom -fill x # the dir select box set data(w:dirbox) [tixDirSelectBox $w.dirbox \ -command [list tixDirSelectDialog:DirBoxCmd $w]] pack $data(w:dirbox) -expand yes -fill both } proc tixDirSelectDialog:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings bind $w "focus [$data(w:dirbox) subwidget dircbx]" } proc tixDirSelectDialog:OK {w} { upvar #0 $w data wm withdraw $w $data(w:dirbox) subwidget dircbx invoke } proc tixDirSelectDialog:DirBoxCmd {w args} { upvar #0 $w data set value [tixEvent flag V] wm withdraw $w tixDirSelectDialog:CallCmd $w $value } proc tixDirSelectDialog:CallCmd {w value} { upvar #0 $w data if {$data(-command) != ""} { set bind(specs) "%V" set bind(%V) $value tixEvalCmdBinding $w $data(-command) bind $value } } proc tixDirSelectDialog:Cancel {w} { wm withdraw $w } Tix8.4.3/NoteBook.tcl000064400000014020150252220140010115 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: NoteBook.tcl,v 1.7 2004/03/28 02:44:57 hobbs Exp $ # # NoteBook.tcl -- # # tixNoteBook: NoteBook type of window. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixNoteBook { -classname TixNoteBook -superclass tixVStack -method { } -flag { } -configspec { {-takefocus takeFocus TakeFocus 0 tixVerifyBoolean} } -default { {.nbframe.tabPadX 8} {.nbframe.tabPadY 5} {.nbframe.borderWidth 2} {*nbframe.relief raised} } } proc tixNoteBook:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec set data(pad-x1) 0 set data(pad-x2) 0 set data(pad-y1) 20 set data(pad-y2) 0 } proc tixNoteBook:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(w:top) [tixNoteBookFrame $w.nbframe -slave 1 -takefocus 1] set data(w:nbframe) $data(w:top) bind $data(w:top) [list tixNoteBook:MouseDown $w %x %y] bind $data(w:top) [list tixNoteBook:MouseUp $w %x %y] bind $data(w:top) [list tixNoteBook:MouseDown $w %x %y] bind $data(w:top) [list tixNoteBook:FocusNext $w prev] bind $data(w:top) [list tixNoteBook:FocusNext $w next] bind $data(w:top) [list tixNoteBook:SetFocusByKey $w] bind $data(w:top) [list tixNoteBook:SetFocusByKey $w] } #---------------------------------------------------------------------- # Public methods #---------------------------------------------------------------------- proc tixNoteBook:add {w child args} { upvar #0 $w data set ret [eval tixChainMethod $w add $child $args] set new_args "" foreach {flag value} $args { if {$flag ne "-createcmd" && $flag ne "-raisecmd"} { lappend new_args $flag lappend new_args $value } } eval [linsert $new_args 0 $data(w:top) add $child] return $ret } proc tixNoteBook:raise {w child} { upvar #0 $w data tixChainMethod $w raise $child if {[$data(w:top) pagecget $child -state] eq "normal"} { $data(w:top) activate $child } } proc tixNoteBook:delete {w child} { upvar #0 $w data tixChainMethod $w delete $child $data(w:top) delete $child } #---------------------------------------------------------------------- # Private methods #---------------------------------------------------------------------- proc tixNoteBook:Resize {w} { upvar #0 $w data # We have to take care of the size of the tabs so that # set rootReq [$data(w:top) geometryinfo] set tW [lindex $rootReq 0] set tH [lindex $rootReq 1] set data(pad-x1) 2 set data(pad-x2) 2 set data(pad-y1) [expr {$tH + $data(-ipadx) + 1}] set data(pad-y2) 2 set data(minW) [expr {$tW}] set data(minH) [expr {$tH}] # Now that we know data(pad-y1), we can chain the call # tixChainMethod $w Resize } proc tixNoteBook:MouseDown {w x y} { upvar #0 $w data focus $data(w:top) set name [$data(w:top) identify $x $y] $data(w:top) focus $name set data(w:down) $name } proc tixNoteBook:MouseUp {w x y} { upvar #0 $w data #it could happen (using the tk/menu) that a MouseUp #proceeds without a MouseDown event!! if {![info exists data(w:down)] || ![info exists data(w:top)]} { return } set name [$data(w:top) identify $x $y] if {$name ne "" && $name eq $data(w:down) && [$data(w:top) pagecget $name -state] eq "normal"} { $data(w:top) activate $name tixCallMethod $w raise $name } else { $data(w:top) focus "" } } #---------------------------------------------------------------------- # # Section for keyboard bindings # #---------------------------------------------------------------------- proc tixNoteBook:FocusNext {w dir} { upvar #0 $w data if {[$data(w:top) info focus] == ""} { set name [$data(w:top) info active] $data(w:top) focus $name if {$name ne ""} { return } } else { set name [$data(w:top) info focus$dir] $data(w:top) focus $name } } proc tixNoteBook:SetFocusByKey {w} { upvar #0 $w data set name [$data(w:top) info focus] if {$name ne "" && [$data(w:top) pagecget $name -state] eq "normal"} { tixCallMethod $w raise $name $data(w:top) activate $name } } #---------------------------------------------------------------------- # Automatic bindings for alt keys #---------------------------------------------------------------------- proc tixNoteBookFind {w char} { set char [string tolower $char] foreach child [winfo child $w] { if {![winfo ismapped $w]} { continue } switch -exact -- [winfo class $child] { Toplevel { continue } TixNoteBook { set nbframe [$child subwidget nbframe] foreach page [$nbframe info pages] { set char2 [string index [$nbframe pagecget $page -label] \ [$nbframe pagecget $page -underline]] if {($char eq [string tolower $char2] || $char eq "") && [$nbframe pagecget $page -state] ne "disabled"} { return [list $child $page] } } } } # Well, this notebook doesn't match with the key, but maybe # it contains a "subnotebook" that will match .. set match [tixNoteBookFind $child $char] if {$match ne ""} { return $match } } return "" } proc tixTraverseToNoteBook {w char} { if {$char eq ""} { return 0 } if {![winfo exists $w]} { return 0 } set list [tixNoteBookFind [winfo toplevel $w] $char] if {$list ne ""} { [lindex $list 0] raise [lindex $list 1] return 1 } return 0 } #---------------------------------------------------------------------- # Set default class bindings #---------------------------------------------------------------------- bind all "+tixTraverseToNoteBook %W %A" bind all "+tixTraverseToNoteBook %W %A" Tix8.4.3/WInfo.tcl000064400000001705150252220140007425 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: WInfo.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ # # WInfo.tcl -- # # This file implements the command tixWInfo, which return various # information about a Tix widget. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # proc tixWInfo {option w} { upvar #0 $w data case $option { tix { # Is this a Tix widget? # return [info exists data(className)] } compound { # Is this a compound widget? # Currently this is the same as "tixWinfo tix" because only # Tix compilant compound widgets are supported return [info exists data(className)] } class { if {[info exists data(className)]} { return $data(className) } else { return "" } } } } Tix8.4.3/SimpDlg.tcl000064400000002205150252220140007736 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: SimpDlg.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ # # SimpDlg.tcl -- # # This file implements Simple Dialog widgets # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixSimpleDialog { -classname TixSimpleDialog -superclass tixDialogShell -method {} -flag { -buttons -message -type } -configspec { {-buttons buttons Buttons ""} {-message message Message ""} {-type type Type info} } } proc tixSimpleDialog:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget frame $w.top label $w.top.icon -image [tix getimage $data(-type)] label $w.top.message -text $data(-message) pack $w.top.icon -side left -padx 20 -pady 50 -anchor c pack $w.top.message -side left -padx 10 -pady 50 -anchor c frame $w.bot pack $w.bot -side bottom -fill x pack $w.top -side top -expand yes -fill both } Tix8.4.3/SListBox.tcl000064400000015742150252220140010120 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: SListBox.tcl,v 1.5 2004/03/28 02:44:57 hobbs Exp $ # # SListBox.tcl -- # # This file implements Scrolled Listbox widgets # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # ToDo: # -anchor (none) # tixWidgetClass tixScrolledListBox { -classname TixScrolledListBox -superclass tixScrolledWidget -method { } -flag { -anchor -browsecmd -command -state } -static { -anchor } -configspec { {-anchor anchor Anchor w} {-browsecmd browseCmd BrowseCmd ""} {-command command Command ""} {-state state State normal} {-takefocus takeFocus TakeFocus 1 tixVerifyBoolean} } -default { {.scrollbar auto} {*borderWidth 1} {*listbox.highlightBackground #d9d9d9} {*listbox.relief sunken} {*listbox.background #c3c3c3} {*listbox.takeFocus 1} {*Scrollbar.takeFocus 0} } } proc tixScrolledListBox:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec set data(x-first) 0 set data(x-last) 1 set data(y-first) 0 set data(y-last) 1 } proc tixScrolledListBox:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(w:listbox) \ [listbox $w.listbox] set data(w:hsb) \ [scrollbar $w.hsb -orient horizontal] set data(w:vsb) \ [scrollbar $w.vsb -orient vertical ] set data(pw:client) $data(w:listbox) } proc tixScrolledListBox:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings $data(w:listbox) config \ -xscrollcommand "tixScrolledListBox:XView $w"\ -yscrollcommand "tixScrolledListBox:YView $w" $data(w:hsb) config -command "$data(w:listbox) xview" $data(w:vsb) config -command "$data(w:listbox) yview" bind $w "+tixScrolledListBox:Configure $w" bind $w "focus $data(w:listbox)" bindtags $data(w:listbox) \ "$data(w:listbox) TixListboxState Listbox TixListbox [winfo toplevel $data(w:listbox)] all" tixSetMegaWidget $data(w:listbox) $w } proc tixScrolledListBoxBind {} { tixBind TixListboxState <1> { if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { break } } tixBind TixListbox <1> { if {[string is true -strict [%W cget -takefocus]]} { focus %W } tixScrolledListBox:Browse [tixGetMegaWidget %W] } tixBind TixListboxState { if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { break } } tixBind TixListbox { tixScrolledListBox:Browse [tixGetMegaWidget %W] } tixBind TixListboxState { if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { break } } tixBind TixListbox { tixScrolledListBox:KeyBrowse [tixGetMegaWidget %W] } tixBind TixListboxState { if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { break } } tixBind TixListbox { tixScrolledListBox:KeyBrowse [tixGetMegaWidget %W] } tixBind TixListboxState { if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { break } } tixBind TixListbox { tixScrolledListBox:KeyInvoke [tixGetMegaWidget %W] } tixBind TixListboxState { if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { break } } tixBind TixListbox { tixScrolledListBox:Invoke [tixGetMegaWidget %W] } tixBind TixListboxState { if {[set [tixGetMegaWidget %W](-state)] eq "disabled"} { break } } tixBind TixListbox { tixScrolledListBox:Browse [tixGetMegaWidget %W] } } proc tixScrolledListBox:Browse {w} { upvar #0 $w data if {$data(-browsecmd) != ""} { set bind(specs) {%V} set bind(%V) [$data(w:listbox) get \ [$data(w:listbox) nearest [tixEvent flag y]]] tixEvalCmdBinding $w $data(-browsecmd) bind } } proc tixScrolledListBox:KeyBrowse {w} { upvar #0 $w data if {$data(-browsecmd) != ""} { set bind(specs) {%V} set bind(%V) [$data(w:listbox) get active] tixEvalCmdBinding $w $data(-browsecmd) bind } } # tixScrolledListBox:Invoke -- # # The user has invoked the listbox by pressing either the # key or double-clicking. Call the user-supplied -command function. # # For both -browsecmd and -command, it is the responsibility of the # user-supplied function to determine the current selection of the listbox # proc tixScrolledListBox:Invoke {w} { upvar #0 $w data if {$data(-command) != ""} { set bind(specs) {%V} set bind(%V) [$data(w:listbox) get \ [$data(w:listbox) nearest [tixEvent flag y]]] tixEvalCmdBinding $w $data(-command) bind } } proc tixScrolledListBox:KeyInvoke {w} { upvar #0 $w data if {$data(-command) != ""} { set bind(specs) {%V} set bind(%V) [$data(w:listbox) get active] tixEvalCmdBinding $w $data(-command) bind } } #---------------------------------------------------------------------- # # option configs #---------------------------------------------------------------------- proc tixScrolledListBox:config-takefocus {w value} { upvar #0 $w data $data(w:listbox) config -takefocus $value } #---------------------------------------------------------------------- # # Widget commands #---------------------------------------------------------------------- #---------------------------------------------------------------------- # # Private Methods #---------------------------------------------------------------------- proc tixScrolledListBox:XView {w first last} { upvar #0 $w data set data(x-first) $first set data(x-last) $last $data(w:hsb) set $first $last tixWidgetDoWhenIdle tixScrolledWidget:Configure $w } proc tixScrolledListBox:YView {w first last} { upvar #0 $w data set data(y-first) $first set data(y-last) $last $data(w:vsb) set $first $last tixWidgetDoWhenIdle tixScrolledWidget:Configure $w # Somehow an update here must be used to advoid osscilation # update idletasks } # #---------------------------------------------------------------------- # virtual functions to query the client window's scroll requirement #---------------------------------------------------------------------- proc tixScrolledListBox:GeometryInfo {w mW mH} { upvar #0 $w data return [list \ [list $data(x-first) $data(x-last)]\ [list $data(y-first) $data(y-last)]] } proc tixScrolledListBox:Configure {w} { upvar #0 $w data tixWidgetDoWhenIdle tixScrolledListBox:TrickScrollbar $w if {$data(-anchor) eq "e"} { $data(w:listbox) xview 100000 } } # This procedure is necessary because listbox does not call x,y scroll command # when its size is changed # proc tixScrolledListBox:TrickScrollbar {w} { upvar #0 $w data set inc [$data(w:listbox) select include 0] $data(w:listbox) select set 0 if {!$inc} { $data(w:listbox) select clear 0 } } Tix8.4.3/Tree.tcl000064400000011107150252220140007277 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Tree.tcl,v 1.7 2004/04/09 21:39:12 hobbs Exp $ # # Tree.tcl -- # # This file implements the TixTree widget. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixTree { -classname TixTree -superclass tixVTree -method { autosetmode close getmode open setmode addchild anchor column delete entrycget entryconfigure header hide indicator info item nearest see selection show } -flag { -browsecmd -command -opencmd -closecmd } -configspec { {-browsecmd browseCmd BrowseCmd ""} {-command command Command ""} {-closecmd closeCmd CloseCmd ""} {-opencmd openCmd OpenCmd ""} } -default { {.scrollbar auto} {*Scrollbar.takeFocus 0} {*borderWidth 1} {*hlist.background #c3c3c3} {*hlist.drawBranch 1} {*hlist.height 10} {*hlist.highlightBackground #d9d9d9} {*hlist.indicator 1} {*hlist.indent 20} {*hlist.itemType imagetext} {*hlist.padX 2} {*hlist.padY 2} {*hlist.relief sunken} {*hlist.takeFocus 1} {*hlist.wideSelection 0} {*hlist.width 20} } } proc tixTree:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec } proc tixTree:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget } proc tixTree:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings } #---------------------------------------------------------------------- # # Widget commands # #---------------------------------------------------------------------- proc tixTree:autosetmode {w} { tixTree:SetModes $w "" } proc tixTree:close {w ent} { upvar #0 $w data set type [tixVTree:GetType $w $ent] if {$type == "close"} { tixCallMethod $w Activate $ent $type } } proc tixTree:open {w ent} { upvar #0 $w data set type [tixVTree:GetType $w $ent] if {$type == "open"} { tixCallMethod $w Activate $ent $type } } proc tixTree:getmode {w ent} { tixVTree:GetType $w $ent } proc tixTree:setmode {w ent mode} { tixVTree:SetMode $w $ent $mode } foreach cmd { addchild anchor column delete entrycget entryconfigure header hide indicator info item nearest see selection show } { proc tixTree:$cmd {w args} { # These are hlist passthrough methods to work around # Tix' ignorant inheritance model. upvar #0 $w data set cmd [lindex [split [lindex [info level 0] 0] :] end] uplevel 1 [linsert $args 0 $data(w:hlist) $cmd] } } unset cmd #---------------------------------------------------------------------- # # Private Methods # #---------------------------------------------------------------------- proc tixTree:SetModes {w ent} { upvar #0 $w data set mode none if {$ent == ""} { set children [$data(w:hlist) info children] } else { set children [$data(w:hlist) info children $ent] } if {$children != ""} { set mode close foreach c $children { if {[$data(w:hlist) info hidden $c]} { set mode open } tixTree:SetModes $w $c } } if {$ent != ""} { tixVTree:SetMode $w $ent $mode } } #---------------------------------------------------------------------- # # Virtual Methods # #---------------------------------------------------------------------- proc tixTree:OpenCmd {w ent} { upvar #0 $w data if {$data(-opencmd) != ""} { tixTree:CallSwitchCmd $w $data(-opencmd) $ent } else { tixChainMethod $w OpenCmd $ent } } proc tixTree:CloseCmd {w ent} { upvar #0 $w data if {$data(-closecmd) != ""} { tixTree:CallSwitchCmd $w $data(-closecmd) $ent } else { tixChainMethod $w CloseCmd $ent } } # Call the opencmd or closecmd, depending on the mode ($cmd argument) # proc tixTree:CallSwitchCmd {w cmd ent} { upvar #0 $w data set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $cmd bind $ent } proc tixTree:Command {w B} { upvar #0 $w data upvar $B bind tixChainMethod $w Command $B set ent [tixEvent flag V] if {$data(-command) != ""} { tixEvalCmdBinding $w $data(-command) bind $ent } } proc tixTree:BrowseCmd {w B} { upvar #0 $w data set ent [tixEvent flag V] if {$data(-browsecmd) != ""} { tixEvalCmdBinding $w $data(-browsecmd) "" $ent } } Tix8.4.3/LabFrame.tcl000064400000002235150252220140010053 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: LabFrame.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ # # LabFrame.tcl -- # # TixLabelFrame Widget: a frame box with a label # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixLabelFrame { -classname TixLabelFrame -superclass tixLabelWidget -method { frame } -flag {} -static {} -configspec { {-labelside labelSide LabelSide acrosstop} {-padx padX Pad 2} {-pady padY Pad 2} } -alias {} -default { {*Label.anchor c} {.frame.borderWidth 2} {.frame.relief groove} {.border.borderWidth 2} {.border.relief groove} {.borderWidth 2} {.padX 2} {.padY 2} {.anchor sw} } } #---------------------------------------------------------------------- # Public methods #---------------------------------------------------------------------- proc tixLabelFrame:frame {w args} { return [eval tixCallMethod $w subwidget frame $args] } Tix8.4.3/StatBar.tcl000064400000002473150252220140007746 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: StatBar.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ # # StatBar.tcl -- # # The StatusBar of an application. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixStatusBar { -classname TixStatusBar -superclass tixPrimitive -method { } -flag { -fields } -static { -fields } -configspec { {-fields fields Fields ""} } } #-------------------------- # Create Widget #-------------------------- proc tixStatusBar:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget foreach field $data(-fields) { set name [lindex $field 0] set width [lindex $field 1] set data(w:width) [label $w.$name -width $width] } } #---------------------------------------------------------------------- # Public methods #---------------------------------------------------------------------- #---------------------------------------------------------------------- # Internal commands #---------------------------------------------------------------------- Tix8.4.3/StdBBox.tcl000064400000003170150252220140007706 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: StdBBox.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ # # StdBBox.tcl -- # # Standard Button Box, used in standard dialog boxes # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixStdButtonBox { -classname TixStdButtonBox -superclass tixButtonBox -flag { -applycmd -cancelcmd -helpcmd -okcmd } -configspec { {-applycmd applyCmd ApplyCmd ""} {-cancelcmd cancelCmd CancelCmd ""} {-helpcmd helpCmd HelpCmd ""} {-okcmd okCmd OkCmd ""} } -default { {.borderWidth 1} {.relief raised} {.padX 5} {.padY 10} {*Button.anchor c} {*Button.padX 5} } } proc tixStdButtonBox:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget $w add ok -text OK -under 0 -width 6 -command $data(-okcmd) $w add apply -text Apply -under 0 -width 6 -command $data(-applycmd) $w add cancel -text Cancel -under 0 -width 6 -command $data(-cancelcmd) $w add help -text Help -under 0 -width 6 -command $data(-helpcmd) } proc tixStdButtonBox:config {w flag value} { upvar #0 $w data case $flag { -okcmd { $data(w:ok) config -command $value } -applycmd { $data(w:apply) config -command $value } -cancelcmd { $data(w:cancel) config -command $value } -helpcmd { $data(w:help) config -command $value } default { tixChainMethod $w config $flag $value } } } Tix8.4.3/ComboBox.tcl000064400000106657150252220140010127 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: ComboBox.tcl,v 1.9 2008/02/28 22:39:13 hobbs Exp $ # # tixCombobox -- # # A combobox widget is basically a listbox widget with an entry # widget. # # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. global tkPriv if {![llength [info globals tkPriv]]} { tk::unsupported::ExposePrivateVariable tkPriv } #-------------------------------------------------------------------------- # tkPriv elements used in this file: # # afterId - Token returned by "after" for autoscanning. #-------------------------------------------------------------------------- # foreach fun {tkCancelRepeat tkListboxUpDown tkButtonUp} { if {![llength [info commands $fun]]} { tk::unsupported::ExposePrivateCommand $fun } } unset fun tixWidgetClass tixComboBox { -classname TixComboBox -superclass tixLabelWidget -method { addhistory align appendhistory flash invoke insert pick popdown } -flag { -anchor -arrowbitmap -browsecmd -command -crossbitmap -disablecallback -disabledforeground -dropdown -editable -fancy -grab -histlimit -historylimit -history -listcmd -listwidth -prunehistory -selection -selectmode -state -tickbitmap -validatecmd -value -variable } -static { -dropdown -fancy } -forcecall { -variable -selectmode -state } -configspec { {-arrowbitmap arrowBitmap ArrowBitmap ""} {-anchor anchor Anchor w} {-browsecmd browseCmd BrowseCmd ""} {-command command Command ""} {-crossbitmap crossBitmap CrossBitmap ""} {-disablecallback disableCallback DisableCallback 0 tixVerifyBoolean} {-disabledforeground disabledForeground DisabledForeground #606060} {-dropdown dropDown DropDown true tixVerifyBoolean} {-editable editable Editable false tixVerifyBoolean} {-fancy fancy Fancy false tixVerifyBoolean} {-grab grab Grab global} {-listcmd listCmd ListCmd ""} {-listwidth listWidth ListWidth ""} {-historylimit historyLimit HistoryLimit ""} {-history history History false tixVerifyBoolean} {-prunehistory pruneHistory PruneHistory true tixVerifyBoolean} {-selectmode selectMode SelectMode browse} {-selection selection Selection ""} {-state state State normal} {-validatecmd validateCmd ValidateCmd ""} {-value value Value ""} {-variable variable Variable ""} {-tickbitmap tickBitmap TickBitmap ""} } -alias { {-histlimit -historylimit} } -default { {*Entry.relief sunken} {*TixScrolledListBox.scrollbar auto} {*Listbox.exportSelection false} {*Listbox.takeFocus false} {*shell.borderWidth 2} {*shell.relief raised} {*shell.cursor arrow} {*Button.anchor c} {*Button.borderWidth 1} {*Button.highlightThickness 0} {*Button.padX 0} {*Button.padY 0} {*tick.width 18} {*tick.height 18} {*cross.width 18} {*cross.height 18} {*arrow.anchor c} {*arrow.width 15} {*arrow.height 18} } } # States: normal numbers: for dropdown style # d+digit(s) : for non-dropdown style # proc tixComboBox:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec set data(curIndex) "" set data(varInited) 0 set data(state) none set data(ignore) 0 if {$data(-history)} { set data(-editable) 1 } if {$data(-arrowbitmap) eq ""} { set data(-arrowbitmap) [tix getbitmap cbxarrow] } if {$data(-crossbitmap) eq ""} { set data(-crossbitmap) [tix getbitmap cross] } if {$data(-tickbitmap) eq ""} { set data(-tickbitmap) [tix getbitmap tick] } } proc tixComboBox:ConstructFramedWidget {w frame} { upvar #0 $w data tixChainMethod $w ConstructFramedWidget $frame if {$data(-dropdown)} { tixComboBox:ConstructEntryFrame $w $frame tixComboBox:ConstructListShell $w } else { set f1 [frame $frame.f1] set f2 [frame $frame.f2] tixComboBox:ConstructEntryFrame $w $f1 tixComboBox:ConstructListFrame $w $f2 pack $f1 -side top -pady 2 -fill x pack $f2 -side top -pady 2 -fill both -expand yes } } proc tixComboBox:ConstructEntryFrame {w frame} { upvar #0 $w data # (1) The entry # set data(w:entry) [entry $frame.entry] if {!$data(-editable)} { set bg [$w cget -bg] $data(w:entry) config -bg $bg -state disabled -takefocus 1 } # This is used during "config-state" # set data(entryfg) [$data(w:entry) cget -fg] # (2) The dropdown button, not necessary when not in dropdown mode # set data(w:arrow) [button $frame.arrow -bitmap $data(-arrowbitmap)] if {!$data(-dropdown)} { set xframe [frame $frame.xframe -width 19] } # (3) The fancy tick and cross buttons # if {$data(-fancy)} { if {$data(-editable)} { set data(w:cross) [button $frame.cross -bitmap $data(-crossbitmap)] set data(w:tick) [button $frame.tick -bitmap $data(-tickbitmap)] pack $frame.cross -side left -padx 1 pack $frame.tick -side left -padx 1 } else { set data(w:tick) [button $frame.tick -bitmap $data(-tickbitmap)] pack $frame.tick -side left -padx 1 } } if {$data(-dropdown)} { pack $data(w:arrow) -side right -padx 1 foreach wid [list $data(w:frame) $data(w:label)] { tixAddBindTag $wid TixComboWid tixSetMegaWidget $wid $w TixComboBox } } else { pack $xframe -side right -padx 1 } pack $frame.entry -side right -fill x -expand yes -padx 1 } proc tixComboBox:ConstructListShell {w} { upvar #0 $w data # Create the shell and the list #------------------------------ set data(w:shell) [menu $w.shell -bd 2 -relief raised -tearoff 0] wm overrideredirect $data(w:shell) 1 wm withdraw $data(w:shell) set data(w:slistbox) [tixScrolledListBox $data(w:shell).slistbox \ -anchor $data(-anchor) -scrollbarspace y \ -options {listbox.selectMode "browse"}] set data(w:listbox) [$data(w:slistbox) subwidget listbox] pack $data(w:slistbox) -expand yes -fill both -padx 2 -pady 2 } proc tixComboBox:ConstructListFrame {w frame} { upvar #0 $w data set data(w:slistbox) [tixScrolledListBox $frame.slistbox \ -anchor $data(-anchor)] set data(w:listbox) [$data(w:slistbox) subwidget listbox] pack $data(w:slistbox) -expand yes -fill both } proc tixComboBox:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings # (1) Fix the bindings for the combobox # bindtags $w [list $w TixComboBox [winfo toplevel $w] all] # (2) The entry subwidget # tixSetMegaWidget $data(w:entry) $w TixComboBox bindtags $data(w:entry) [list $data(w:entry) Entry TixComboEntry\ TixComboWid [winfo toplevel $data(w:entry)] all] # (3) The listbox and slistbox # $data(w:slistbox) config -browsecmd \ [list tixComboBox:LbBrowse $w] $data(w:slistbox) config -command\ [list tixComboBox:LbCommand $w] $data(w:listbox) config -takefocus 0 tixAddBindTag $data(w:listbox) TixComboLb tixAddBindTag $data(w:slistbox) TixComboLb tixSetMegaWidget $data(w:listbox) $w TixComboBox tixSetMegaWidget $data(w:slistbox) $w TixComboBox # (4) The buttons # if {$data(-dropdown)} { $data(w:arrow) config -takefocus 0 tixAddBindTag $data(w:arrow) TixComboArrow tixSetMegaWidget $data(w:arrow) $w TixComboBox bind $data(w:root) <1> [list tixComboBox:RootDown $w] bind $data(w:root) [list tixComboBox:RootUp $w] } if {$data(-fancy)} { if {$data(-editable)} { $data(w:cross) config -command [list tixComboBox:CrossBtn $w] \ -takefocus 0 } $data(w:tick) config -command [list tixComboBox:Invoke $w] -takefocus 0 } if {$data(-dropdown)} { set data(state) 0 } else { set data(state) n0 } } proc tixComboBoxBind {} { #---------------------------------------------------------------------- # The class bindings for the TixComboBox # tixBind TixComboBox { if {[tixComboBox:EscKey %W]} { break } } tixBind TixComboBox { tixWidgetDoWhenIdle tixComboBox:align %W } # Only the two "linear" detail_fields are for tabbing (moving) among # widgets inside the same toplevel. Other detail_fields are sort # of irrelevant # tixBind TixComboBox { if {[string equal %d NotifyNonlinear] || [string equal %d NotifyNonlinearVirtual]} { if {[info exists %W(cancelTab)]} { unset %W(cancelTab) } else { if {[set %W(-state)] ne "disabled"} { if {[set %W(-selection)] ne [set %W(-value)]} { tixComboBox:Invoke %W } } } } } tixBind TixComboBox { if {"%d" eq "NotifyNonlinear" || "%d" eq "NotifyNonlinearVirtual"} { focus [%W subwidget entry] # CYGNUS: Setting the selection if there is no data # causes backspace to misbehave. if {[[set %W(w:entry)] get] ne ""} { [set %W(w:entry)] selection from 0 [set %W(w:entry)] selection to end } } } #---------------------------------------------------------------------- # The class tixBindings for the arrow button widget inside the TixComboBox # tixBind TixComboArrow <1> { tixComboBox:ArrowDown [tixGetMegaWidget %W TixComboBox] } tixBind TixComboArrow { tixComboBox:ArrowUp [tixGetMegaWidget %W TixComboBox] } tixBind TixComboArrow { if {[tixComboBox:EscKey [tixGetMegaWidget %W TixComboBox]]} { break } } #---------------------------------------------------------------------- # The class tixBindings for the entry widget inside the TixComboBox # tixBind TixComboEntry { tixComboBox:EntDirKey [tixGetMegaWidget %W TixComboBox] up } tixBind TixComboEntry { tixComboBox:EntDirKey [tixGetMegaWidget %W TixComboBox] down } tixBind TixComboEntry { tixComboBox:EntDirKey [tixGetMegaWidget %W TixComboBox] pageup } tixBind TixComboEntry { tixComboBox:EntDirKey [tixGetMegaWidget %W TixComboBox] pagedown } tixBind TixComboEntry { tixComboBox:EntReturnKey [tixGetMegaWidget %W TixComboBox] } tixBind TixComboEntry { tixComboBox:EntKeyPress [tixGetMegaWidget %W TixComboBox] } tixBind TixComboEntry { if {[tixComboBox:EscKey [tixGetMegaWidget %W TixComboBox]]} { break } } tixBind TixComboEntry { if {[set [tixGetMegaWidget %W TixComboBox](-state)] ne "disabled"} { if {[tixComboBox:EntTab [tixGetMegaWidget %W TixComboBox]]} { break } } } tixBind TixComboEntry <1> { if {[set [tixGetMegaWidget %W TixComboBox](-state)] ne "disabled"} { focus %W } } tixBind TixComboEntry { tixComboBox:EntKeyPress [tixGetMegaWidget %W TixComboBox] } #---------------------------------------------------------------------- # The class bindings for the listbox subwidget # tixBind TixComboWid { if {[tixComboBox:EscKey [tixGetMegaWidget %W TixComboBox]]} { break } } #---------------------------------------------------------------------- # The class bindings for some widgets inside ComboBox # tixBind TixComboWid { tixComboBox:WidUp [tixGetMegaWidget %W TixComboBox] } tixBind TixComboWid { if {[tixComboBox:EscKey [tixGetMegaWidget %W TixComboBox]]} { break } } } #---------------------------------------------------------------------- # Cooked events #---------------------------------------------------------------------- proc tixComboBox:ArrowDown {w} { upvar #0 $w data if {$data(-state) eq "disabled"} { return } switch -exact -- $data(state) { 0 { tixComboBox:GoState 1 $w } 2 { tixComboBox:GoState 19 $w } default { tixComboBox:StateError $w } } } proc tixComboBox:ArrowUp {w} { upvar #0 $w data switch -exact -- $data(state) { 1 { tixComboBox:GoState 2 $w } 19 { # data(ignore) was already set in state 19 tixComboBox:GoState 4 $w } 5 { tixComboBox:GoState 13 $w } default { tixComboBox:StateError $w } } } proc tixComboBox:RootDown {w} { upvar #0 $w data switch -exact -- $data(state) { 0 { # Ignore } 2 { tixComboBox:GoState 3 $w } default { tixComboBox:StateError $w } } } proc tixComboBox:RootUp {w} { upvar #0 $w data switch -exact -- $data(state) { {1} { tixComboBox:GoState 12 $w } {3} { # data(ignore) was already set in state 3 tixComboBox:GoState 4 $w } {5} { tixComboBox:GoState 7 $w } default { tixComboBox:StateError $w } } } proc tixComboBox:WidUp {w} { upvar #0 $w data switch -exact -- $data(state) { {1} { tixComboBox:GoState 12 $w } {5} { tixComboBox:GoState 13 $w } } } proc tixComboBox:LbBrowse {w args} { upvar #0 $w data set event [tixEvent type] set x [tixEvent flag x] set y [tixEvent flag y] set X [tixEvent flag X] set Y [tixEvent flag Y] if {$data(-state) eq "disabled"} { return } switch -exact -- $event { <1> { case $data(state) { {2} { tixComboBox:GoState 5 $w $x $y $X $Y } {5} { tixComboBox:GoState 5 $w $x $y $X $Y } {n0} { tixComboBox:GoState n6 $w $x $y $X $Y } default { tixComboBox:StateError $w } } } { case $data(state) { {5} { tixComboBox:GoState 6 $w $x $y $X $Y } {n6} { tixComboBox:GoState n0 $w } default { tixComboBox:StateError $w } } } default { # Must be a motion event case $data(state) { {1} { tixComboBox:GoState 9 $w $x $y $X $Y } {5} { tixComboBox:GoState 5 $w $x $y $X $Y } {n6} { tixComboBox:GoState n6 $w $x $y $X $Y } default { tixComboBox:StateError $w } } } } } proc tixComboBox:LbCommand {w} { upvar #0 $w data if {$data(state) eq "n0"} { tixComboBox:GoState n1 $w } } #---------------------------------------------------------------------- # General keyboard event # returns 1 if the combobox is in some special state and the Escape key # shouldn't be handled by the toplevel bind tag. As a result, when a combobox # is popped up in a dialog box, Escape will popdown the combo. If the combo # is not popped up, Escape will invoke the toplevel bindtag (which can # pop down the dialog box) # proc tixComboBox:EscKey {w} { upvar #0 $w data if {$data(-state) eq "disabled"} { return 0 } switch -exact -- $data(state) { {0} { tixComboBox:GoState 17 $w } {2} { tixComboBox:GoState 16 $w return 1 } {n0} { tixComboBox:GoState n4 $w } default { # ignore return 1 } } return 0 } #---------------------------------------- # Keyboard events #---------------------------------------- proc tixComboBox:EntDirKey {w dir} { upvar #0 $w data if {$data(-state) eq "disabled"} { return } switch -exact -- $data(state) { {0} { tixComboBox:GoState 10 $w $dir } {2} { tixComboBox:GoState 11 $w $dir } {5} { # ignore } {n0} { tixComboBox:GoState n3 $w $dir } } } proc tixComboBox:EntReturnKey {w} { upvar #0 $w data if {$data(-state) eq "disabled"} { return } switch -exact -- $data(state) { {0} { tixComboBox:GoState 14 $w } {2} { tixComboBox:GoState 15 $w } {5} { # ignore } {n0} { tixComboBox:GoState n1 $w } } } # Return 1 == break from the binding == no keyboard focus traversal proc tixComboBox:EntTab {w} { upvar #0 $w data switch -exact -- $data(state) { {0} { tixComboBox:GoState 14 $w set data(cancelTab) "" return 0 } {2} { tixComboBox:GoState 15 $w set data(cancelTab) "" return 0 } {n0} { tixComboBox:GoState n1 $w set data(cancelTab) "" return 0 } default { return 1 } } } proc tixComboBox:EntKeyPress {w} { upvar #0 $w data if {$data(-state) eq "disabled" || !$data(-editable)} { return } switch -exact -- $data(state) { 0 - 2 - n0 { tixComboBox:ClearListboxSelection $w tixComboBox:SetSelection $w [$data(w:entry) get] 0 0 } } } #---------------------------------------------------------------------- proc tixComboBox:HandleDirKey {w dir} { upvar #0 $w data if {[tixComboBox:CheckListboxSelection $w]} { switch -exact -- $dir { "up" { tkListboxUpDown $data(w:listbox) -1 set data(curIndex) [lindex [$data(w:listbox) curselection] 0] tixComboBox:SetSelectionFromListbox $w } "down" { tkListboxUpDown $data(w:listbox) 1 set data(curIndex) [lindex [$data(w:listbox) curselection] 0] tixComboBox:SetSelectionFromListbox $w } "pageup" { $data(w:listbox) yview scroll -1 pages } "pagedown" { $data(w:listbox) yview scroll 1 pages } } } else { # There wasn't good selection in the listbox. # tixComboBox:SetSelectionFromListbox $w } } proc tixComboBox:Invoke {w} { upvar #0 $w data tixComboBox:SetValue $w $data(-selection) if {![winfo exists $w]} { return } if {$data(-history)} { tixComboBox:addhistory $w $data(-value) set data(curIndex) 0 } $data(w:entry) selection from 0 $data(w:entry) selection to end $data(w:entry) icursor end } #---------------------------------------------------------------------- # MAINTAINING THE -VALUE #---------------------------------------------------------------------- proc tixComboBox:SetValue {w newValue {noUpdate 0} {updateEnt 1}} { upvar #0 $w data if {[llength $data(-validatecmd)]} { set data(-value) [tixEvalCmdBinding $w $data(-validatecmd) "" $newValue] } else { set data(-value) $newValue } if {! $noUpdate} { tixVariable:UpdateVariable $w } if {$updateEnt} { if {!$data(-editable)} { $data(w:entry) delete 0 end $data(w:entry) insert 0 $data(-value) } } if {!$data(-disablecallback) && [llength $data(-command)]} { if {![info exists data(varInited)]} { set bind(specs) {%V} set bind(%V) $data(-value) tixEvalCmdBinding $w $data(-command) bind $data(-value) if {![winfo exists $w]} { # The user destroyed the window! return } } } set data(-selection) $data(-value) if {$updateEnt} { tixSetEntry $data(w:entry) $data(-value) if {$data(-anchor) eq "e"} { tixComboBox:EntryAlignEnd $w } } } # markSel: should the all the text in the entry be highlighted? # proc tixComboBox:SetSelection {w value {markSel 1} {setent 1}} { upvar #0 $w data if {$setent} { tixSetEntry $data(w:entry) $value } set data(-selection) $value if {$data(-selectmode) eq "browse"} { if {$markSel} { $data(w:entry) selection range 0 end } if {[llength $data(-browsecmd)]} { set bind(specs) {%V} set bind(%V) [$data(w:entry) get] tixEvalCmdBinding $w $data(-browsecmd) bind [$data(w:entry) get] } } else { tixComboBox:SetValue $w $value 0 0 } } proc tixComboBox:ClearListboxSelection {w} { upvar #0 $w data if {![winfo exists $data(w:listbox)]} { tixDebug "tixComboBox:ClearListboxSelection error non-existent $data(w:listbox)" return } $data(w:listbox) selection clear 0 end } proc tixComboBox:UpdateListboxSelection {w index} { upvar #0 $w data if {![winfo exists $data(w:listbox)]} { tixDebug "tixComboBox:UpdateListboxSelection error non-existent $data(w:listbox)" return } if {$index != ""} { $data(w:listbox) selection set $index $data(w:listbox) selection anchor $index } } proc tixComboBox:Cancel {w} { upvar #0 $w data tixSetEntry $data(w:entry) $data(-value) tixComboBox:SetSelection $w $data(-value) if {[tixComboBox:LbGetSelection $w] ne $data(-selection)} { tixComboBox:ClearListboxSelection $w } } proc tixComboBox:flash {w} { tixComboBox:BlinkEntry $w } # Make the entry blink when the user selects a choice # proc tixComboBox:BlinkEntry {w} { upvar #0 $w data if {![info exists data(entryBlacken)]} { set old_bg [$data(w:entry) cget -bg] set old_fg [$data(w:entry) cget -fg] $data(w:entry) config -fg $old_bg $data(w:entry) config -bg $old_fg set data(entryBlacken) 1 after 50 tixComboBox:RestoreBlink $w [list $old_bg] [list $old_fg] } } proc tixComboBox:RestoreBlink {w old_bg old_fg} { upvar #0 $w data if {[info exists data(w:entry)] && [winfo exists $data(w:entry)]} { $data(w:entry) config -fg $old_fg $data(w:entry) config -bg $old_bg } if {[info exists data(entryBlacken)]} { unset data(entryBlacken) } } #---------------------------------------- # Handle events inside the list box #---------------------------------------- proc tixComboBox:LbIndex {w {flag ""}} { upvar #0 $w data if {![winfo exists $data(w:listbox)]} { tixDebug "tixComboBox:LbIndex error non-existent $data(w:listbox)" if {$flag eq "emptyOK"} { return "" } else { return 0 } } set sel [lindex [$data(w:listbox) curselection] 0] if {$sel != ""} { return $sel } else { if {$flag eq "emptyOK"} { return "" } else { return 0 } } } #---------------------------------------------------------------------- # # STATE MANIPULATION # #---------------------------------------------------------------------- proc tixComboBox:GoState-0 {w} { upvar #0 $w data if {[info exists data(w:root)] && [grab current] eq "$data(w:root)"} { grab release $w } } proc tixComboBox:GoState-1 {w} { upvar #0 $w data tixComboBox:Popup $w } proc tixComboBox:GoState-2 {w} { upvar #0 $w data } proc tixComboBox:GoState-3 {w} { upvar #0 $w data set data(ignore) 1 tixComboBox:Popdown $w } proc tixComboBox:GoState-4 {w} { upvar #0 $w data tixComboBox:Ungrab $w if {$data(ignore)} { tixComboBox:Cancel $w } else { tixComboBox:Invoke $w } tixComboBox:GoState 0 $w } proc tixComboBox:GoState-5 {w x y X Y} { upvar #0 $w data tixComboBox:LbSelect $w $x $y $X $Y } proc tixComboBox:GoState-6 {w x y X Y} { upvar #0 $w data tixComboBox:Popdown $w if {[tixWithinWindow $data(w:shell) $X $Y]} { set data(ignore) 0 } else { set data(ignore) 1 } tixComboBox:GoState 4 $w } proc tixComboBox:GoState-7 {w} { upvar #0 $w data tixComboBox:Popdown $w set data(ignore) 1 catch { global tkPriv if {$tkPriv(afterId) != ""} { tkCancelRepeat } } set data(ignore) 1 tixComboBox:GoState 4 $w } proc tixComboBox:GoState-9 {w x y X Y} { upvar #0 $w data catch { tkButtonUp $data(w:arrow) } tixComboBox:GoState 5 $w $x $y $X $Y } proc tixComboBox:GoState-10 {w dir} { upvar #0 $w data tixComboBox:Popup $w if {![tixComboBox:CheckListboxSelection $w]} { # There wasn't good selection in the listbox. # tixComboBox:SetSelectionFromListbox $w } tixComboBox:GoState 2 $w } proc tixComboBox:GoState-11 {w dir} { upvar #0 $w data tixComboBox:HandleDirKey $w $dir tixComboBox:GoState 2 $w } proc tixComboBox:GoState-12 {w} { upvar #0 $w data catch { tkButtonUp $data(w:arrow) } tixComboBox:GoState 2 $w } proc tixComboBox:GoState-13 {w} { upvar #0 $w data catch { global tkPriv if {$tkPriv(afterId) != ""} { tkCancelRepeat } } tixComboBox:GoState 2 $w } proc tixComboBox:GoState-14 {w} { upvar #0 $w data tixComboBox:Invoke $w tixComboBox:GoState 0 $w } proc tixComboBox:GoState-15 {w} { upvar #0 $w data tixComboBox:Popdown $w set data(ignore) 0 tixComboBox:GoState 4 $w } proc tixComboBox:GoState-16 {w} { upvar #0 $w data tixComboBox:Popdown $w tixComboBox:Cancel $w set data(ignore) 1 tixComboBox:GoState 4 $w } proc tixComboBox:GoState-17 {w} { upvar #0 $w data tixComboBox:Cancel $w tixComboBox:GoState 0 $w } proc tixComboBox:GoState-19 {w} { upvar #0 $w data set data(ignore) [string equal $data(-selection) $data(-value)] tixComboBox:Popdown $w } #---------------------------------------------------------------------- # Non-dropdown states #---------------------------------------------------------------------- proc tixComboBox:GoState-n0 {w} { upvar #0 $w data } proc tixComboBox:GoState-n1 {w} { upvar #0 $w data tixComboBox:Invoke $w tixComboBox:GoState n0 $w } proc tixComboBox:GoState-n3 {w dir} { upvar #0 $w data tixComboBox:HandleDirKey $w $dir tixComboBox:GoState n0 $w } proc tixComboBox:GoState-n4 {w} { upvar #0 $w data tixComboBox:Cancel $w tixComboBox:GoState n0 $w } proc tixComboBox:GoState-n6 {w x y X Y} { upvar #0 $w data tixComboBox:LbSelect $w $x $y $X $Y } #---------------------------------------------------------------------- # General State Manipulation #---------------------------------------------------------------------- proc tixComboBox:GoState {s w args} { upvar #0 $w data tixComboBox:SetState $w $s eval tixComboBox:GoState-$s $w $args } proc tixComboBox:SetState {w s} { upvar #0 $w data # catch {puts [info level -2]} # puts "setting state $data(state) --> $s" set data(state) $s } proc tixComboBox:StateError {w} { upvar #0 $w data # error "wrong state $data(state)" } #---------------------------------------------------------------------- # Listbox handling #---------------------------------------------------------------------- # Set a selection if there isn't one. Returns true if there was already # a good selection inside the listbox # proc tixComboBox:CheckListboxSelection {w} { upvar #0 $w data if {![winfo exists $data(w:listbox)]} { tixDebug "tixComboBox:CheckListboxSelection error non-existent $data(w:listbox)" return 0 } if {[$data(w:listbox) curselection] == ""} { if {$data(curIndex) == ""} { set data(curIndex) 0 } $data(w:listbox) activate $data(curIndex) $data(w:listbox) selection clear 0 end $data(w:listbox) selection set $data(curIndex) $data(w:listbox) see $data(curIndex) return 0 } else { return 1 } } proc tixComboBox:SetSelectionFromListbox {w} { upvar #0 $w data set string [$data(w:listbox) get $data(curIndex)] tixComboBox:SetSelection $w $string tixComboBox:UpdateListboxSelection $w $data(curIndex) } proc tixComboBox:LbGetSelection {w} { upvar #0 $w data set index [tixComboBox:LbIndex $w emptyOK] if {$index >=0} { return [$data(w:listbox) get $index] } else { return "" } } proc tixComboBox:LbSelect {w x y X Y} { upvar #0 $w data set index [tixComboBox:LbIndex $w emptyOK] if {$index == ""} { set index [$data(w:listbox) nearest $y] } if {$index >= 0} { if {[focus -lastfor $data(w:entry)] ne $data(w:entry) && [focus -lastfor $data(w:entry)] ne $data(w:listbox)} { focus $data(w:entry) } set string [$data(w:listbox) get $index] tixComboBox:SetSelection $w $string tixComboBox:UpdateListboxSelection $w $index } } #---------------------------------------------------------------------- # Internal commands #---------------------------------------------------------------------- proc tixComboBox:CrossBtn {w} { upvar #0 $w data $data(w:entry) delete 0 end tixComboBox:ClearListboxSelection $w tixComboBox:SetSelection $w "" } #-------------------------------------------------- # Popping up list shell #-------------------------------------------------- # Popup the listbox and grab # # proc tixComboBox:Popup {w} { global tcl_platform upvar #0 $w data if {![winfo ismapped $data(w:root)]} { return } #--------------------------------------------------------------------- # Pop up # if {$data(-listcmd) != ""} { # This option allows the user to fill in the listbox on demand # tixEvalCmdBinding $w $data(-listcmd) } # calculate the size set y [winfo rooty $data(w:entry)] incr y [winfo height $data(w:entry)] incr y 3 set bd [$data(w:shell) cget -bd] # incr bd [$data(w:shell) cget -highlightthickness] set height [expr {[winfo reqheight $data(w:slistbox)] + 2*$bd}] set x1 [winfo rootx $data(w:entry)] if {$data(-listwidth) == ""} { if {[winfo ismapped $data(w:arrow)]} { set x2 [winfo rootx $data(w:arrow)] if {$x2 >= $x1} { incr x2 [winfo width $data(w:arrow)] set width [expr {$x2 - $x1}] } else { set width [winfo width $data(w:entry)] set x2 [expr {$x1 + $width}] } } else { set width [winfo width $data(w:entry)] set x2 [expr {$x1 + $width}] } } else { set width $data(-listwidth) set x2 [expr {$x1 + $width}] } set reqwidth [winfo reqwidth $data(w:shell)] if {$reqwidth < $width} { set reqwidth $width } else { if {$reqwidth > [expr {$width *3}]} { set reqwidth [expr {$width *3}] } if {$reqwidth > [winfo vrootwidth .]} { set reqwidth [winfo vrootwidth .] } } set width $reqwidth # If the listbox is too far right, pull it back to the left # set scrwidth [winfo vrootwidth .] if {$x2 > $scrwidth} { set x1 [expr {$scrwidth - $width}] } # If the listbox is too far left, pull it back to the right # if {$x1 < 0} { set x1 0 } # If the listbox is below bottom of screen, put it upwards # set scrheight [winfo vrootheight .] set bottom [expr {$y+$height}] if {$bottom > $scrheight} { set y [expr {$y-$height-[winfo height $data(w:entry)]-5}] } # OK , popup the shell # global tcl_platform wm geometry $data(w:shell) $reqwidth\x$height+$x1+$y if {$tcl_platform(platform) eq "windows"} { update } wm deiconify $data(w:shell) if {$tcl_platform(platform) eq "windows"} { update } raise $data(w:shell) focus $data(w:entry) set data(popped) 1 # add for safety update tixComboBox:Grab $w } proc tixComboBox:SetCursor {w cursor} { upvar #0 $w data $w config -cursor $cursor } proc tixComboBox:Popdown {w} { upvar #0 $w data wm withdraw $data(w:shell) tixComboBox:SetCursor $w "" } # Grab the server so that user cannot move the windows around proc tixComboBox:Grab {w} { upvar #0 $w data tixComboBox:SetCursor $w arrow if {[catch { # We catch here because grab may fail under a lot of circumstances # Just don't want to break the code ... switch -exact -- $data(-grab) { global { tixPushGrab -global $data(w:root) } local { tixPushGrab $data(w:root) } } } err]} { tixDebug "tixComboBox:Grab+: Error grabbing $data(w:root)\n$err" } } proc tixComboBox:Ungrab {w} { upvar #0 $w data if {[catch { catch { switch -exact -- $data(-grab) { global { tixPopGrab } local { tixPopGrab } } } } err]} { tixDebug "tixComboBox:Grab+: Error grabbing $data(w:root)\n$err" } } #---------------------------------------------------------------------- # Alignment #---------------------------------------------------------------------- # The following two routines can emulate a "right align mode" for the # entry in the combo box. proc tixComboBox:EntryAlignEnd {w} { upvar #0 $w data $data(w:entry) xview end } proc tixComboBox:Destructor {w} { upvar #0 $w data tixUnsetMegaWidget $data(w:entry) tixVariable:DeleteVariable $w # Chain this to the superclass # tixChainMethod $w Destructor } #---------------------------------------------------------------------- # CONFIG OPTIONS #---------------------------------------------------------------------- proc tixComboBox:config-state {w value} { upvar #0 $w data catch {if {[$data(w:arrow) cget -state] eq $value} {set a 1}} if {[info exists a]} { return } catch {$data(w:arrow) config -state $value} catch {$data(w:tick) config -state $value} catch {$data(w:cross) config -state $value} catch {$data(w:slistbox) config -state $value} if {[string equal $value normal]} { set fg [$data(w:arrow) cget -fg] set entryFg $data(entryfg) set lbSelFg [lindex [$data(w:listbox) config -selectforeground] 3] set lbSelBg [lindex [$data(w:listbox) config -selectbackground] 3] set entrySelFg [lindex [$data(w:entry) config -selectforeground] 3] set entrySelBg [lindex [$data(w:entry) config -selectbackground] 3] } else { set fg [$data(w:arrow) cget -disabledforeground] set entryFg $data(-disabledforeground) set lbSelFg $entryFg set lbSelBg [$data(w:listbox) cget -bg] set entrySelFg $entryFg set entrySelBg [$data(w:entry) cget -bg] } if {$fg ne ""} { $data(w:label) config -fg $fg $data(w:listbox) config -fg $fg -selectforeground $lbSelFg \ -selectbackground $lbSelBg } $data(w:entry) config -fg $entryFg -selectforeground $entrySelFg \ -selectbackground $entrySelBg if {$value eq "normal"} { if {$data(-editable)} { $data(w:entry) config -state normal } $data(w:entry) config -takefocus 1 } else { if {$data(-editable)} { $data(w:entry) config -state disabled } $data(w:entry) config -takefocus 0 } } proc tixComboBox:config-value {w value} { upvar #0 $w data tixComboBox:SetValue $w $value set data(-selection) $value if {[tixComboBox:LbGetSelection $w] ne $value} { tixComboBox:ClearListboxSelection $w } } proc tixComboBox:config-selection {w value} { upvar #0 $w data tixComboBox:SetSelection $w $value if {[tixComboBox:LbGetSelection $w] ne $value} { tixComboBox:ClearListboxSelection $w } } proc tixComboBox:config-variable {w arg} { upvar #0 $w data if {[tixVariable:ConfigVariable $w $arg]} { # The value of data(-value) is changed if tixVariable:ConfigVariable # returns true set data(-selection) $data(-value) tixComboBox:SetValue $w $data(-value) 1 } catch { unset data(varInited) } set data(-variable) $arg } #---------------------------------------------------------------------- # WIDGET COMMANDS #---------------------------------------------------------------------- proc tixComboBox:align {w args} { upvar #0 $w data if {$data(-anchor) eq "e"} { tixComboBox:EntryAlignEnd $w } } proc tixComboBox:addhistory {w value} { upvar #0 $w data tixComboBox:insert $w 0 $value $data(w:listbox) selection clear 0 end if {$data(-prunehistory)} { # Prune from the end # set max [$data(w:listbox) size] if {$max <= 1} { return } for {set i [expr {$max -1}]} {$i >= 1} {incr i -1} { if {[$data(w:listbox) get $i] eq $value} { $data(w:listbox) delete $i break } } } } proc tixComboBox:appendhistory {w value} { upvar #0 $w data tixComboBox:insert $w end $value $data(w:listbox) selection clear 0 end if {$data(-prunehistory)} { # Prune from the end # set max [$data(w:listbox) size] if {$max <= 1} { return } for {set i [expr {$max -2}]} {$i >= 0} {incr i -1} { if {[$data(w:listbox) get $i] eq $value} { $data(w:listbox) delete $i break } } } } proc tixComboBox:insert {w index newitem} { upvar #0 $w data $data(w:listbox) insert $index $newitem if {$data(-history) && $data(-historylimit) != "" && [$data(w:listbox) size] eq $data(-historylimit)} { $data(w:listbox) delete 0 } } proc tixComboBox:pick {w index} { upvar #0 $w data $data(w:listbox) activate $index $data(w:listbox) selection clear 0 end $data(w:listbox) selection set active $data(w:listbox) see active set text [$data(w:listbox) get $index] tixComboBox:SetValue $w $text set data(curIndex) $index } proc tixComboBox:invoke {w} { tixComboBox:Invoke $w } proc tixComboBox:popdown {w} { upvar #0 $w data if {$data(-dropdown)} { tixComboBox:Popdown $w } } Tix8.4.3/SHList.tcl000064400000007321150252220140007551 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: SHList.tcl,v 1.7 2004/04/09 21:37:33 hobbs Exp $ # # SHList.tcl -- # # This file implements Scrolled HList widgets # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixScrolledHList { -classname TixScrolledHList -superclass tixScrolledWidget -method { } -flag { -highlightbackground -highlightcolor -highlightthickness } -configspec { {-highlightbackground -highlightBackground HighlightBackground #d9d9d9} {-highlightcolor -highlightColor HighlightColor black} {-highlightthickness -highlightThickness HighlightThickness 2} } -default { {.scrollbar auto} {*f1.borderWidth 1} {*hlist.Background #c3c3c3} {*hlist.highlightBackground #d9d9d9} {*hlist.relief sunken} {*hlist.takeFocus 1} {*Scrollbar.takeFocus 0} } -forcecall { -highlightbackground -highlightcolor -highlightthickness } } proc tixScrolledHList:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(pw:f1) [frame $w.f1 -takefocus 0] set data(w:hlist) \ [tixHList $w.f1.hlist -bd 0 -takefocus 1 -highlightthickness 0] pack $data(w:hlist) -in $data(pw:f1) -expand yes -fill both -padx 0 -pady 0 set data(w:hsb) [scrollbar $w.hsb -orient horizontal -takefocus 0] set data(w:vsb) [scrollbar $w.vsb -orient vertical -takefocus 0] set data(pw:client) $data(pw:f1) } proc tixScrolledHList:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings $data(w:hlist) config \ -xscrollcommand [list $data(w:hsb) set] \ -yscrollcommand [list $data(w:vsb) set] \ -sizecmd [list tixScrolledWidget:Configure $w] $data(w:hsb) config -command [list $data(w:hlist) xview] $data(w:vsb) config -command [list $data(w:hlist) yview] } #---------------------------------------------------------------------- # # option configs #---------------------------------------------------------------------- proc tixScrolledHList:config-takefocus {w value} { upvar #0 $w data $data(w:hlist) config -takefocus $value } proc tixScrolledHList:config-highlightbackground {w value} { upvar #0 $w data $data(pw:f1) config -highlightbackground $value } proc tixScrolledHList:config-highlightcolor {w value} { upvar #0 $w data $data(pw:f1) config -highlightcolor $value } proc tixScrolledHList:config-highlightthickness {w value} { upvar #0 $w data $data(pw:f1) config -highlightthickness $value } #---------------------------------------------------------------------- # # Widget commands #---------------------------------------------------------------------- #---------------------------------------------------------------------- # # Private Methods #---------------------------------------------------------------------- # virtual # proc tixScrolledHList:RepackHook {w} { upvar #0 $w data tixChainMethod $w RepackHook } #---------------------------------------------------------------------- # virtual functions to query the client window's scroll requirement #---------------------------------------------------------------------- proc tixScrolledHList:GeometryInfo {w mW mH} { upvar #0 $w data if {[winfo class $w.f1] eq "Frame"} { set extra [expr {[$w.f1 cget -bd]+[$w.f1 cget -highlightthickness]}] } else { set extra 0 } set mW [expr {$mW - $extra*2}] set mH [expr {$mH - $extra*2}] if {$mW < 1} { set mW 1 } if {$mH < 1} { set mH 1 } return [$data(w:hlist) geometryinfo $mW $mH] } Tix8.4.3/Variable.tcl000064400000005003150252220140010123 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Variable.tcl,v 1.4 2001/12/09 05:04:02 idiscovery Exp $ # # Variable.tcl -- # # Routines in this file are used to set up and operate variables # for classes that support the -variable option # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # tixVariable:ConfigVariable -- # # Set up the -variable option for the object $w # # Side effects: # # data(-variable) is changed to the name of the global variable # if the global variable exists, data(-value) takes the value of this # variable. # if the global variable does not exist, it is created with the # current data(-value) # # Return value: # # true is data(-value) is changed, indicating that data(-command) # should be invoked. # proc tixVariable:ConfigVariable {w arg} { upvar #0 $w data set changed 0 if {$data(-variable) != ""} { uplevel #0 \ [list trace vdelete $data(-variable) w "tixVariable:TraceProc $w"] } if {$arg != ""} { if {[uplevel #0 info exists [list $arg]]} { # This global variable exists, we use its value # set data(-value) [uplevel #0 set [list $arg]] set changed 1 } else { # This global variable does not exist; let's set it # uplevel #0 [list set $arg $data(-value)] } uplevel #0 \ [list trace variable $arg w "tixVariable:TraceProc $w"] } return $changed } proc tixVariable:UpdateVariable {w} { upvar #0 $w data if {$data(-variable) != ""} { uplevel #0 \ [list trace vdelete $data(-variable) w "tixVariable:TraceProc $w"] uplevel #0 \ [list set $data(-variable) $data(-value)] uplevel #0 \ [list trace variable $data(-variable) w "tixVariable:TraceProc $w"] # just in case someone has another trace and restricted my change # set data(-value) [uplevel #0 set [list $data(-variable)]] } } proc tixVariable:TraceProc {w name1 name2 op} { upvar #0 $w data set varname $data(-variable) if {[catch {$w config -value [uplevel #0 [list set $varname]]} err]} { uplevel #0 [list set $varname [list [$w cget -value]]] error $err } return } proc tixVariable:DeleteVariable {w} { upvar #0 $w data # Must delete the trace command of the -variable # if {$data(-variable) != ""} { uplevel #0 \ [list trace vdelete $data(-variable) w "tixVariable:TraceProc $w"] } } Tix8.4.3/STList.tcl000064400000004574150252220140007574 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: STList.tcl,v 1.4 2001/12/09 05:04:02 idiscovery Exp $ # # STList.tcl -- # # This file implements Scrolled TList widgets # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixScrolledTList { -classname TixScrolledTList -superclass tixScrolledWidget -method { } -flag { } -configspec { } -default { {.scrollbar auto} {*borderWidth 1} {*tlist.background #c3c3c3} {*tlist.highlightBackground #d9d9d9} {*tlist.relief sunken} {*tlist.takeFocus 1} {*Scrollbar.takeFocus 0} } } proc tixScrolledTList:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(w:tlist) \ [tixTList $w.tlist] set data(w:hsb) \ [scrollbar $w.hsb -orient horizontal] set data(w:vsb) \ [scrollbar $w.vsb -orient vertical ] set data(pw:client) $data(w:tlist) } proc tixScrolledTList:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings $data(w:tlist) config \ -xscrollcommand "$data(w:hsb) set"\ -yscrollcommand "$data(w:vsb) set"\ -sizecmd [list tixScrolledWidget:Configure $w] $data(w:hsb) config -command "$data(w:tlist) xview" $data(w:vsb) config -command "$data(w:tlist) yview" } #---------------------------------------------------------------------- # # option configs #---------------------------------------------------------------------- proc tixScrolledTList:config-takefocus {w value} { upvar #0 $w data $data(w:tlist) config -takefocus $value } #---------------------------------------------------------------------- # # Widget commands #---------------------------------------------------------------------- #---------------------------------------------------------------------- # # Private Methods #---------------------------------------------------------------------- #---------------------------------------------------------------------- # virtual functions to query the client window's scroll requirement #---------------------------------------------------------------------- proc tixScrolledTList:GeometryInfo {w mW mH} { upvar #0 $w data return [$data(w:tlist) geometryinfo $mW $mH] } Tix8.4.3/PanedWin.tcl000064400000067273150252220140010124 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: PanedWin.tcl,v 1.7 2004/03/28 02:44:57 hobbs Exp $ # # PanedWin.tcl -- # # This file implements the TixPanedWindow widget # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixPanedWindow { -classname TixPanedWindow -superclass tixPrimitive -method { add delete forget manage panecget paneconfigure panes setsize } -flag { -command -dynamicgeometry -handleactivebg -handlebg -orient -orientation -panebd -paneborderwidth -panerelief -separatoractivebg -separatorbg } -static { -orientation } -configspec { {-command command Command ""} {-dynamicgeometry dynamicGeometry DynamicGeometry 1 tixVerifyBoolean} {-handleactivebg handleActiveBg HandleActiveBg #ececec} {-handlebg handleBg Background #d9d9d9} {-orientation orientation Orientation vertical} {-paneborderwidth paneBorderWidth PaneBorderWidth 1} {-panerelief paneRelief PaneRelief raised} {-separatoractivebg separatorActiveBg SeparatorActiveBg red} {-separatorbg separatorBg Background #d9d9d9} } -alias { {-panebd -paneborderwidth} {-orient -orientation} } } #---------------------------------------------------------------------- # ClassInitialization: #---------------------------------------------------------------------- proc tixPanedWindow:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec set data(items) "" set data(nItems) 0 set data(totalsize) 0 set data(movePending) 0 set data(repack) 0 set data(counter) 0 set data(maxReqW) 1 set data(maxReqH) 1 } proc tixPanedWindow:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget # Do nothing } proc tixPanedWindow:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings bind $w [list tixPanedWindow:MasterGeomProc $w ""] } #---------------------------------------------------------------------- # ConfigOptions: #---------------------------------------------------------------------- proc tixPanedWindow:config-handlebg {w arg} { upvar #0 $w data for {set i 1} {$i < $data(nItems)} {incr i} { $data(btn,$i) config -bg $arg } } #---------------------------------------------------------------------- # PublicMethods: #---------------------------------------------------------------------- # method: add # # Adds a new pane into the PanedWindow. # # options -size -max -min -allowresize # proc tixPanedWindow:add {w name args} { upvar #0 $w data if {[winfo exists $w.$name] && !$data($name,forgotten)} { error "Pane $name is already managed" } # Step 1: Parse the options to get the children's size options # The default values # if {[info exists data($name,forgotten)]} { set option(-size) $data($name,size) set option(-min) $data($name,min) set option(-max) $data($name,max) set option(-allowresize) $data($name,allowresize) set option(-expand) $data($name,expand) } else { set option(-size) 0 set option(-min) 0 set option(-max) 100000 set option(-allowresize) 1 set option(-expand) 0 } set option(-before) "" set option(-after) "" set option(-at) "" set validOpts {-after -allowresize -at -before -expand -max -min -size} tixHandleOptions option $validOpts $args set data($name,size) $option(-size) set data($name,rsize) $option(-size) set data($name,min) $option(-min) set data($name,max) $option(-max) set data($name,allowresize) $option(-allowresize) set data($name,expand) $option(-expand) set data($name,forgotten) 0 if {$data($name,expand) < 0} { set data($name,expand) 0 } # Step 2: Add the frame and the separator (if necessary) # if {![winfo exist $w.$name]} { # need to check because the frame may have been "forget'ten" # frame $w.$name -bd $data(-paneborderwidth) -relief $data(-panerelief) } if {$option(-at) != ""} { set at [tixGetInt $option(-at)] if {$at < 0} { set at 0 } } elseif {$option(-after) != ""} { set index [lsearch -exact $data(items) $option(-after)] if {$index == -1} { error "Pane $option(-after) doesn't exists" } else { set at [incr index] } } elseif {$option(-before) != ""} { set index [lsearch -exact $data(items) $option(-before)] if {$index == -1} { error "Pane $option(-before) doesn't exists" } set at $index } else { set at end } set data(items) [linsert $data(items) $at $name] incr data(nItems) if {$data(nItems) > 1} { tixPanedWindow:AddSeparator $w } set data(w:$name) $w.$name # Step 3: Add the new frame. Adjust the window later (do when idle) # tixManageGeometry $w.$name [list tixPanedWindow:ClientGeomProc $w] bind $w.$name \ [list tixPanedWindow:ClientGeomProc $w "" $w.$name] tixPanedWindow:RepackWhenIdle $w return $w.$name } proc tixPanedWindow:manage {w name args} { upvar #0 $w data if {![winfo exists $w.$name]} { error "Pane $name does not exist" } if {!$data($name,forgotten)} { error "Pane $name is already managed" } tixMapWindow $data(w:$name) eval tixPanedWindow:add $w [list $name] $args } proc tixPanedWindow:forget {w name} { upvar #0 $w data if {![winfo exists $w.$name]} { error "Pane $name does not exist" } if $data($name,forgotten) { # It has already been forgotten # return } set items "" foreach item $data(items) { if {$item != $name} { lappend items $item } } set data(items) $items incr data(nItems) -1 set i $data(nItems) if {$i > 0} { destroy $data(btn,$i) destroy $data(sep,$i) unset data(btn,$i) unset data(sep,$i) } set data($name,forgotten) 1 tixUnmapWindow $w.$name tixPanedWindow:RepackWhenIdle $w } proc tixPanedWindow:delete {w name} { upvar #0 $w data if {![winfo exists $w.$name]} { error "Pane $name does not exist" } if {!$data($name,forgotten)} { set items "" foreach item $data(items) { if {$item != $name} { lappend items $item } } set data(items) $items incr data(nItems) -1 set i $data(nItems) if {$i > 0} { destroy $data(btn,$i) destroy $data(sep,$i) unset data(btn,$i) unset data(sep,$i) } } unset data($name,allowresize) unset data($name,expand) unset data($name,forgotten) unset data($name,max) unset data($name,min) unset data($name,rsize) unset data($name,size) unset data(w:$name) destroy $w.$name tixPanedWindow:RepackWhenIdle $w } proc tixPanedWindow:paneconfigure {w name args} { upvar #0 $w data if {![info exists data($name,size)]} { error "pane \"$name\" does not exist in $w" } set len [llength $args] if {$len == 0} { set value [$data(w:$name) configure] lappend value [list -allowresize "" "" "" $data($name,allowresize)] lappend value [list -expand "" "" "" $data($name,expand)] lappend value [list -max "" "" "" $data($name,max)] lappend value [list -min "" "" "" $data($name,min)] lappend value [list -size "" "" "" $data($name,size)] return $value } if {$len == 1} { case [lindex $args 0] { -allowresize { return [list -allowresize "" "" "" $data($name,allowresize)] } -expand { return [list -expand "" "" "" $data($name,expand)] } -min { return [list -min "" "" "" $data($name,min)] } -max { return [list -max "" "" "" $data($name,max)] } -size { return [list -size "" "" "" $data($name,size)] } default { return [$data(w:$name) configure [lindex $args 0]] } } } # By default handle each of the options # set option(-allowresize) $data($name,allowresize) set option(-expand) $data($name,expand) set option(-min) $data($name,min) set option(-max) $data($name,max) set option(-size) $data($name,size) tixHandleOptions -nounknown option {-allowresize -expand -max -min -size} \ $args # # the widget options set new_args "" foreach {flag value} $args { case $flag { {-expand -min -max -allowresize -size} { } default { lappend new_args $flag lappend new_args $value } } } if {[llength $new_args] >= 2} { eval $data(w:$name) configure $new_args } # # The add-on options set data($name,allowresize) $option(-allowresize) set data($name,expand) $option(-expand) set data($name,max) $option(-max) set data($name,min) $option(-min) set data($name,rsize) $option(-size) set data($name,size) $option(-size) # # Integrity check if {$data($name,expand) < 0} { set data($name,expand) 0 } if {$data($name,size) < $data($name,min)} { set data($name,size) $data($name,min) } if {$data($name,size) > $data($name,max)} { set data($name,size) $data($name,max) } tixPanedWindow:RepackWhenIdle $w return "" } proc tixPanedWindow:panecget {w name option} { upvar #0 $w data if {![info exists data($name,size)]} { error "pane \"$name\" does not exist in $w" } case $option { {-min -max -allowresize -size} { regsub \\\- $option "" option return "$data($name,$option)" } default { return [$data(w:$name) cget $option] } } } # return the name of all panes proc tixPanedWindow:panes {w} { upvar #0 $w data return $data(items) } # set the size of a pane, specifying which direction it should # grow/shrink proc tixPanedWindow:setsize {w item size {direction next}} { upvar #0 $w data set posn [lsearch $data(items) $item] if {$posn == -1} { error "pane \"$item\" does not exist" } set diff [expr {$size - $data($item,size)}] if {$diff == 0} { return } if {$posn == 0 && $direction eq "prev"} { set direction next } if {$posn == $data(nItems)-1 && $direction eq "next"} { set direction prev } if {$data(-orientation) eq "vertical"} { set rx [winfo rooty $data(w:$item)] } else { set rx [winfo rootx $data(w:$item)] } if {$direction eq "prev"} { set rx [expr {$rx - $diff}] } elseif {$data(-orientation) eq "vertical"} { set rx [expr {$rx + [winfo height $data(w:$item)] + $diff}] incr posn } else { set rx [expr {$rx + [winfo width $data(w:$item)] + $diff}] incr posn } # Set up the panedwin in a proper state # tixPanedWindow:BtnDown $w $posn 1 tixPanedWindow:BtnMove $w $posn $rx 1 tixPanedWindow:BtnUp $w $posn 1 return $data(items) } #---------------------------------------------------------------------- # PrivateMethods: #---------------------------------------------------------------------- proc tixPanedWindow:AddSeparator {w} { global tcl_platform upvar #0 $w data set n [expr {$data(nItems)-1}] # CYGNUS: On Windows, use relief ridge and a thicker line. if {$tcl_platform(platform) eq "windows"} then { set relief "ridge" set thickness 4 } else { set relief "sunken" set thickness 2 } if {$data(-orientation) eq "vertical"} { set data(sep,$n) [frame $w.sep$n -relief $relief \ -bd 1 -height $thickness -width 10000 -bg $data(-separatorbg)] } else { set data(sep,$n) [frame $w.sep$n -relief $relief \ -bd 1 -width $thickness -height 10000 -bg $data(-separatorbg)] } set data(btn,$n) [frame $w.btn$n -relief raised \ -bd 1 -width 9 -height 9 \ -bg $data(-handlebg)] if {$data(-orientation) eq "vertical"} { set cursor sb_v_double_arrow } else { set cursor sb_h_double_arrow } $data(sep,$n) config -cursor $cursor $data(btn,$n) config -cursor $cursor foreach wid [list $data(btn,$n) $data(sep,$n)] { bind $wid \ [list tixPanedWindow:BtnDown $w $n] bind $wid \ [list tixPanedWindow:BtnUp $w $n] bind $wid \ [list tixPanedWindow:HighlightBtn $w $n] bind $wid \ [list tixPanedWindow:DeHighlightBtn $w $n] } if {$data(-orientation) eq "vertical"} { bind $data(btn,$n) [list tixPanedWindow:BtnMove $w $n %Y] } else { bind $data(btn,$n) [list tixPanedWindow:BtnMove $w $n %X] } if {$data(-orientation) eq "vertical"} { # place $data(btn,$n) -relx 0.90 -y [expr "$data(totalsize)-5"] # place $data(sep,$n) -x 0 -y [expr "$data(totalsize)-1"] -relwidth 1 } else { # place $data(btn,$n) -rely 0.90 -x [expr "$data(totalsize)-5"] # place $data(sep,$n) -y 0 -x [expr "$data(totalsize)-1"] -relheight 1 } } proc tixPanedWindow:BtnDown {w item {fake 0}} { upvar #0 $w data if {$data(-orientation) eq "vertical"} { set spec -height } else { set spec -width } if {!$fake} { for {set i 1} {$i < $data(nItems)} {incr i} { $data(sep,$i) config -bg $data(-separatoractivebg) $spec 1 } update idletasks $data(btn,$item) config -relief sunken } tixPanedWindow:GetMotionLimit $w $item $fake if {!$fake} { grab -global $data(btn,$item) } set data(movePending) 0 } proc tixPanedWindow:Min2 {a b} { if {$a < $b} { return $a } else { return $b } } proc tixPanedWindow:GetMotionLimit {w item fake} { upvar #0 $w data set curBefore 0 set minBefore 0 set maxBefore 0 for {set i 0} {$i < $item} {incr i} { set name [lindex $data(items) $i] incr curBefore $data($name,size) incr minBefore $data($name,min) incr maxBefore $data($name,max) } set curAfter 0 set minAfter 0 set maxAfter 0 while {$i < $data(nItems)} { set name [lindex $data(items) $i] incr curAfter $data($name,size) incr minAfter $data($name,min) incr maxAfter $data($name,max) incr i } set beforeToGo [tixPanedWindow:Min2 \ [expr {$curBefore-$minBefore}] \ [expr {$maxAfter-$curAfter}]] set afterToGo [tixPanedWindow:Min2 \ [expr {$curAfter-$minAfter}] \ [expr {$maxBefore-$curBefore}]] set data(beforeLimit) [expr {$curBefore-$beforeToGo}] set data(afterLimit) [expr {$curBefore+$afterToGo}] set data(curSize) $curBefore if {!$fake} { tixPanedWindow:PlotHandles $w 1 } } # Compress the motion so that update is quick even on slow machines # # rootp = root position (either rootx or rooty) proc tixPanedWindow:BtnMove {w item rootp {fake 0}} { upvar #0 $w data set data(rootp) $rootp if {$fake} { tixPanedWindow:BtnMoveCompressed $w $item $fake } else { if {$data(movePending) == 0} { after 2 tixPanedWindow:BtnMoveCompressed $w $item set data(movePending) 1 } } } proc tixPanedWindow:BtnMoveCompressed {w item {fake 0}} { if {![winfo exists $w]} { return } upvar #0 $w data if {$data(-orientation) eq "vertical"} { set p [expr {$data(rootp)-[winfo rooty $w]}] } else { set p [expr {$data(rootp)-[winfo rootx $w]}] } if {$p == $data(curSize)} { set data(movePending) 0 return } if {$p < $data(beforeLimit)} { set p $data(beforeLimit) } if {$p >= $data(afterLimit)} { set p $data(afterLimit) } tixPanedWindow:CalculateChange $w $item $p $fake if {!$fake} { # Force the redraw to happen # update idletasks } set data(movePending) 0 } # Calculate the change in response to mouse motions # proc tixPanedWindow:CalculateChange {w item p {fake 0}} { upvar #0 $w data if {$p < $data(curSize)} { tixPanedWindow:MoveBefore $w $item $p } elseif {$p > $data(curSize)} { tixPanedWindow:MoveAfter $w $item $p } if {!$fake} { tixPanedWindow:PlotHandles $w 1 } } proc tixPanedWindow:MoveBefore {w item p} { upvar #0 $w data set n [expr {$data(curSize)-$p}] # Shrink the frames before # set from [expr {$item-1}] set to 0 tixPanedWindow:Iterate $w $from $to tixPanedWindow:Shrink $n # Adjust the frames after # set from $item set to [expr {$data(nItems)-1}] tixPanedWindow:Iterate $w $from $to tixPanedWindow:Grow $n set data(curSize) $p } proc tixPanedWindow:MoveAfter {w item p} { upvar #0 $w data set n [expr {$p-$data(curSize)}] # Shrink the frames after # set from $item set to [expr {$data(nItems)-1}] tixPanedWindow:Iterate $w $from $to tixPanedWindow:Shrink $n # Graw the frame before # set from [expr {$item-1}] set to 0 tixPanedWindow:Iterate $w $from $to tixPanedWindow:Grow $n set data(curSize) $p } proc tixPanedWindow:CancleLines {w} { upvar #0 $w data if {[info exists data(lines)]} { foreach line $data(lines) { set x1 [lindex $line 0] set y1 [lindex $line 1] set x2 [lindex $line 2] set y2 [lindex $line 3] tixTmpLine $x1 $y1 $x2 $y2 $w } catch {unset data(lines)} } } proc tixPanedWindow:PlotHandles {w transient} { global tcl_platform upvar #0 $w data set totalsize 0 set i 0 if {$data(-orientation) eq "vertical"} { set btnp [expr {[winfo width $w]-13}] } else { set h [winfo height $w] if {$h > 18} { set btnp 9 } else { set btnp [expr {$h-9}] } } set firstpane [lindex $data(items) 0] set totalsize $data($firstpane,size) if {$transient} { tixPanedWindow:CancleLines $w set data(lines) "" } for {set i 1} {$i < $data(nItems)} {incr i} { if {! $transient} { if {$data(-orientation) eq "vertical"} { place $data(btn,$i) -x $btnp -y [expr {$totalsize-4}] place $data(sep,$i) -x 0 -y [expr {$totalsize-1}] -relwidth 1 } else { place $data(btn,$i) -y $btnp -x [expr {$totalsize-5}] place $data(sep,$i) -y 0 -x [expr {$totalsize-1}] -relheight 1 } } else { if {$data(-orientation) eq "vertical"} { set x1 [winfo rootx $w] set x2 [expr {$x1 + [winfo width $w]}] set y [expr {$totalsize-1+[winfo rooty $w]}] tixTmpLine $x1 $y $x2 $y $w lappend data(lines) [list $x1 $y $x2 $y] } else { set y1 [winfo rooty $w] set y2 [expr {$y1 + [winfo height $w]}] set x [expr {$totalsize-1+[winfo rootx $w]}] tixTmpLine $x $y1 $x $y2 $w lappend data(lines) [list $x $y1 $x $y2] } } set name [lindex $data(items) $i] incr totalsize $data($name,size) } } proc tixPanedWindow:BtnUp {w item {fake 0}} { upvar #0 $w data if {!$fake} { tixPanedWindow:CancleLines $w } tixPanedWindow:UpdateSizes $w if {!$fake} { $data(btn,$item) config -relief raised grab release $data(btn,$item) } } proc tixPanedWindow:HighlightBtn {w item} { upvar #0 $w data $data(btn,$item) config -background $data(-handleactivebg) } proc tixPanedWindow:DeHighlightBtn {w item} { upvar #0 $w data $data(btn,$item) config -background $data(-handlebg) } #---------------------------------------------------------------------- # # # Geometry management routines # # #---------------------------------------------------------------------- # update the sizes of each pane according to the data($name,size) variables # proc tixPanedWindow:UpdateSizes {w} { global tcl_platform upvar #0 $w data set data(totalsize) 0 set mw [winfo width $w] set mh [winfo height $w] for {set i 0} {$i < $data(nItems)} {incr i} { set name [lindex $data(items) $i] if {$data($name,size) > 0} { if {$data(-orientation) eq "vertical"} { tixMoveResizeWindow $w.$name 0 $data(totalsize) \ $mw $data($name,size) tixMapWindow $w.$name raise $w.$name } else { tixMoveResizeWindow $w.$name $data(totalsize) 0 \ $data($name,size) $mh tixMapWindow $w.$name raise $w.$name } } else { tixUnmapWindow $w.$name } incr data(totalsize) $data($name,size) } # Reset the color and width of the separator # if {$data(-orientation) eq "vertical"} { set spec -height } else { set spec -width } # CYGNUS: On Windows, use a thicker line. if {$tcl_platform(platform) eq "windows"} then { set thickness 4 } else { set thickness 2 } for {set i 1} {$i < $data(nItems)} {incr i} { $data(sep,$i) config -bg $data(-separatorbg) $spec $thickness raise $data(sep,$i) raise $data(btn,$i) } # Invoke the callback command # if {$data(-command) != ""} { set sizes "" foreach item $data(items) { lappend sizes $data($item,size) } set bind(specs) "" tixEvalCmdBinding $w $data(-command) bind [list $sizes] } } proc tixPanedWindow:GetNaturalSizes {w} { upvar #0 $w data set data(totalsize) 0 set totalreq 0 if {$data(-orientation) eq "vertical"} { set majorspec height set minorspec width } else { set majorspec width set minorspec height } set minorsize 0 foreach name $data(items) { if {[winfo manager $w.$name] ne "tixGeometry"} { error "Geometry management error: pane \"$w.$name\" cannot be managed by \"[winfo manager $w.$name]\"\nhint: delete the line \"[winfo manager $w.$name] $w.$name ...\" from your program" } # set the minor size # set req_minor [winfo req$minorspec $w.$name] if {$req_minor > $minorsize} { set minorsize $req_minor } # Check the natural size against the max, min requirements. # Change the natural size if necessary # if {$data($name,size) <= 1} { set data($name,size) [winfo req$majorspec $w.$name] } if {$data($name,size) > 1} { # If we get zero maybe the widget was not initialized yet ... # # %% hazard : what if the window is really 1x1? # if {$data($name,size) < $data($name,min)} { set data($name,size) $data($name,min) } if {$data($name,size) > $data($name,max)} { set data($name,size) $data($name,max) } } # kludge: because a frame always returns req size of {1,1} before # the packer processes it, we do the following to mark the # pane as "size unknown" # # if {$data($name,size) == 1 && ![winfo ismapped $w.$name]} { # set data($name,size) 0 # } # Add up the total size # incr data(totalsize) $data($name,size) # Find out the request size # if {$data($name,rsize) == 0} { set rsize [winfo req$majorspec $w.$name] } else { set rsize $data($name,rsize) } if {$rsize < $data($name,min)} { set rsize $data($name,min) } if {$rsize > $data($name,max)} { set rsize $data($name,max) } incr totalreq $rsize } if {$data(-orientation) eq "vertical"} { return [list $minorsize $totalreq] } else { return [list $totalreq $minorsize] } } #-------------------------------------------------- # Handling resize #-------------------------------------------------- proc tixPanedWindow:ClientGeomProc {w type client} { tixPanedWindow:RepackWhenIdle $w } # # This monitor the sizes of the master window # proc tixPanedWindow:MasterGeomProc {w master} { tixPanedWindow:RepackWhenIdle $w } proc tixPanedWindow:RepackWhenIdle {w} { if {![winfo exist $w]} { return } upvar #0 $w data if {$data(repack) == 0} { tixWidgetDoWhenIdle tixPanedWindow:Repack $w set data(repack) 1 } } # # This monitor the sizes of the master window # proc tixPanedWindow:Repack {w} { upvar #0 $w data # Calculate the desired size of the master # set dim [tixPanedWindow:GetNaturalSizes $w] if {$data(-width) != 0} { set mreqw $data(-width) } else { set mreqw [lindex $dim 0] } if {$data(-height) != 0} { set mreqh $data(-height) } else { set mreqh [lindex $dim 1] } if !$data(-dynamicgeometry) { if {$mreqw < $data(maxReqW)} { set mreqw $data(maxReqW) } if {$mreqh < $data(maxReqH)} { set mreqh $data(maxReqH) } set data(maxReqW) $mreqw set data(maxReqH) $mreqh } if {$mreqw != [winfo reqwidth $w] || $mreqh != [winfo reqheight $w] } { if {![info exists data(counter)]} { set data(counter) 0 } if {$data(counter) < 50} { incr data(counter) tixGeometryRequest $w $mreqw $mreqh tixWidgetDoWhenIdle tixPanedWindow:Repack $w set data(repack) 1 return } } set data(counter) 0 if {$data(nItems) == 0} { set data(repack) 0 return } tixWidgetDoWhenIdle tixPanedWindow:DoRepack $w } proc tixPanedWindow:DoRepack {w} { upvar #0 $w data if {$data(-orientation) eq "vertical"} { set newSize [winfo height $w] } else { set newSize [winfo width $w] } if {$newSize <= 1} { # Probably this window is too small to see anyway # %%Kludge: I don't know if this always work. # set data(repack) 0 return } set totalExp 0 foreach name $data(items) { set totalExp [expr {$totalExp + $data($name,expand)}] } if {$newSize > $data(totalsize)} { # Grow # set toGrow [expr {$newSize-$data(totalsize)}] set p [llength $data(items)] foreach name $data(items) { set toGrow [tixPanedWindow:xGrow $w $name $toGrow $totalExp $p] if {$toGrow > 0} { set totalExp [expr {$totalExp-$data($name,expand)}] incr p -1 } else { break } } } else { # Shrink # set toShrink [expr {$data(totalsize)-$newSize}] set usedSize 0 foreach name $data(items) { set toShrink [tixPanedWindow:xShrink $w $name $toShrink \ $totalExp $newSize $usedSize] if {$toShrink > 0} { set totalExp [expr {$totalExp-$data($name,expand)}] incr usedSize $data($name,size) } else { break } } } tixPanedWindow:UpdateSizes $w tixPanedWindow:PlotHandles $w 0 set data(repack) 0 } #-------------------------------------------------- # Shrink and grow items #-------------------------------------------------- # # toGrow: how much free area to grow into # p: == 1 if $name is the last in the list of items # totalExp: used to calculate the amount of the free area that this # window can grow into # proc tixPanedWindow:xGrow {w name toGrow totalExp p} { upvar #0 $w data if {$p == 1} { set canGrow $toGrow } else { if {$totalExp == 0} { set canGrow 0 } else { set canGrow [expr {int($toGrow * $data($name,expand) / $totalExp)}] } } if {($canGrow + $data($name,size)) > $data($name,max)} { set canGrow [expr {$data($name,max) - $data($name,size)}] } incr data($name,size) $canGrow incr toGrow -$canGrow return $toGrow } proc tixPanedWindow:xShrink {w name toShrink totalExp newSize usedSize} { upvar #0 $w data if {$totalExp == 0} { set canShrink 0 } else { set canShrink [expr {int($toShrink * $data($name,expand) / $totalExp)}] } if {$data($name,size) - $canShrink < $data($name,min)} { set canShrink [expr {$data($name,size) - $data($name,min)}] } if {$usedSize + $data($name,size) - $canShrink > $newSize} { set data($name,size) [expr {$newSize - $usedSize}] return 0 } else { incr data($name,size) -$canShrink incr toShrink -$canShrink return $toShrink } } #-------------------------------------------------- # Shrink and grow items #-------------------------------------------------- proc tixPanedWindow:Shrink {w name n} { upvar #0 $w data set canShrink [expr {$data($name,size) - $data($name,min)}] if {$canShrink > $n} { incr data($name,size) -$n return 0 } elseif {$canShrink > 0} { set data($name,size) $data($name,min) incr n -$canShrink } return $n } proc tixPanedWindow:Grow {w name n} { upvar #0 $w data set canGrow [expr {$data($name,max) - $data($name,size)}] if {$canGrow > $n} { incr data($name,size) $n return 0 } elseif {$canGrow > 0} { set data($name,size) $data($name,max) incr n -$canGrow } return $n } proc tixPanedWindow:Iterate {w from to proc n} { upvar #0 $w data if {$from <= $to} { for {set i $from} {$i <= $to} {incr i} { set n [$proc $w [lindex $data(items) $i] $n] if {$n == 0} { break } } } else { for {set i $from} {$i >= $to} {incr i -1} { set n [$proc $w [lindex $data(items) $i] $n] if {$n == 0} { break } } } } Tix8.4.3/DirTree.tcl000064400000021414150252220140007740 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: DirTree.tcl,v 1.4 2004/03/28 02:44:57 hobbs Exp $ # # DirTree.tcl -- # # Implements directory tree for Unix file systems # # What the indicators mean: # # (+): There are some subdirectories in this directory which are not # currently visible. # (-): This directory has some subdirectories and they are all visible # # none: The dir has no subdirectori(es). # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # ## ## The tixDirTree require special FS handling due to it's limited ## separator idea (instead of real tree). ## tixWidgetClass tixDirTree { -classname TixDirTree -superclass tixVTree -method { activate chdir refresh } -flag { -browsecmd -command -directory -disablecallback -showhidden -value } -configspec { {-browsecmd browseCmd BrowseCmd ""} {-command command Command ""} {-disablecallback disableCallback DisableCallback 0 tixVerifyBoolean} {-showhidden showHidden ShowHidden 0 tixVerifyBoolean} {-value value Value ""} } -alias { {-directory -value} } -default { {.scrollbar auto} {*Scrollbar.takeFocus 0} {*borderWidth 1} {*hlist.indicator 1} {*hlist.background #c3c3c3} {*hlist.drawBranch 1} {*hlist.height 10} {*hlist.highlightBackground #d9d9d9} {*hlist.indent 20} {*hlist.itemType imagetext} {*hlist.padX 3} {*hlist.padY 0} {*hlist.relief sunken} {*hlist.takeFocus 1} {*hlist.wideSelection 0} {*hlist.width 20} } } proc tixDirTree:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec if {$data(-value) == ""} { set data(-value) [pwd] } tixDirTree:SetDir $w [file normalize $data(-value)] } proc tixDirTree:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget tixDoWhenMapped $w [list tixDirTree:StartUp $w] $data(w:hlist) config -separator [tixFSSep] \ -selectmode "single" -drawbranch 1 # We must creat an extra copy of these images to avoid flashes on # the screen when user changes directory # set data(images) [image create compound -window $data(w:hlist)] $data(images) add image -image [tix getimage act_fold] $data(images) add image -image [tix getimage folder] $data(images) add image -image [tix getimage openfold] } proc tixDirTree:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings } # Add one dir into the node (parent directory), sorted alphabetically # proc tixDirTree:AddToList {w fsdir image} { upvar #0 $w data set dir [tixFSInternal $fsdir] if {[$data(w:hlist) info exists $dir]} { return } set parent [file dirname $fsdir] if {$fsdir eq $parent} { # root node set node "" } else { # regular node set node [tixFSInternal $parent] } set added 0 set text [tixFSDisplayFileName $fsdir] foreach sib [$data(w:hlist) info children $node] { if {[string compare $dir $sib] < 0} { $data(w:hlist) add $dir -before $sib -text $text -image $image set added 1 break } } if {!$added} { $data(w:hlist) add $dir -text $text -image $image } # Check to see if we have children (%% optimize!) if {[llength [tixFSListDir $fsdir 1 0 0 $data(-showhidden)]]} { tixVTree:SetMode $w $dir open } } proc tixDirTree:LoadDir {w fsdir {mode toggle}} { if {![winfo exists $w]} { return } upvar #0 $w data # Add the directory and set it to the active directory # set fsdir [tixFSNormalize $fsdir] set dir [tixFSInternal $fsdir] if {![$data(w:hlist) info exists $dir]} { # Add $dir and all ancestors of $dir into the HList widget set fspath "" set imgopenfold [tix getimage openfold] foreach part [tixFSAncestors $fsdir] { set fspath [file join $fspath $part] tixDirTree:AddToList $w $fspath $imgopenfold } } $data(w:hlist) entryconfig $dir -image [tix getimage act_fold] if {$mode eq "toggle"} { if {[llength [$data(w:hlist) info children $dir]]} { set mode flatten } else { set mode expand } } if {$mode eq "expand"} { # Add all the sub directories of fsdir into the HList widget tixBusy $w on $data(w:hlist) set imgfolder [tix getimage folder] foreach part [tixFSListDir $fsdir 1 0 0 $data(-showhidden)] { tixDirTree:AddToList $w [file join $fsdir $part] $imgfolder } tixWidgetDoWhenIdle tixBusy $w off $data(w:hlist) # correct indicator to represent children status (added above) if {[llength [$data(w:hlist) info children $dir]]} { tixVTree:SetMode $w $dir close } else { tixVTree:SetMode $w $dir none } } else { $data(w:hlist) delete offsprings $dir tixVTree:SetMode $w $dir open } } proc tixDirTree:ToggleDir {w value mode} { upvar #0 $w data tixDirTree:LoadDir $w $value $mode tixDirTree:CallCommand $w } proc tixDirTree:CallCommand {w} { upvar #0 $w data if {[llength $data(-command)] && !$data(-disablecallback)} { set bind(specs) {%V} set bind(%V) $data(-value) tixEvalCmdBinding $w $data(-command) bind $data(-value) } } proc tixDirTree:CallBrowseCmd {w ent} { upvar #0 $w data if {[llength $data(-browsecmd)] && !$data(-disablecallback)} { set bind(specs) {%V} set bind(%V) $data(-value) tixEvalCmdBinding $w $data(-browsecmd) bind [list $data(-value)] } } proc tixDirTree:StartUp {w} { if {![winfo exists $w]} { return } upvar #0 $w data # make sure that all the basic volumes are listed set imgopenfold [tix getimage openfold] foreach fspath [tixFSVolumes] { tixDirTree:AddToList $w $fspath $imgopenfold } tixDirTree:LoadDir $w [tixFSExternal $data(i-directory)] } proc tixDirTree:ChangeDir {w fsdir {forced 0}} { upvar #0 $w data set dir [tixFSInternal $fsdir] if {!$forced && $data(i-directory) eq $dir} { return } if {!$forced && [$data(w:hlist) info exists $dir]} { # Set the old directory to "non active" # if {[$data(w:hlist) info exists $data(i-directory)]} { $data(w:hlist) entryconfig $data(i-directory) \ -image [tix getimage folder] } $data(w:hlist) entryconfig $dir -image [tix getimage act_fold] } else { if {$forced} { if {[llength [$data(w:hlist) info children $dir]]} { set mode expand } else { set mode flatten } } else { set mode toggle } tixDirTree:LoadDir $w $fsdir $mode tixDirTree:CallCommand $w } tixDirTree:SetDir $w $fsdir } proc tixDirTree:SetDir {w path} { upvar #0 $w data set data(i-directory) [tixFSInternal $path] set data(-value) [tixFSNativeNorm $path] } #---------------------------------------------------------------------- # # Virtual Methods # #---------------------------------------------------------------------- proc tixDirTree:OpenCmd {w ent} { set fsdir [tixFSExternal $ent] tixDirTree:ToggleDir $w $fsdir expand tixDirTree:ChangeDir $w $fsdir tixDirTree:CallBrowseCmd $w $fsdir } proc tixDirTree:CloseCmd {w ent} { set fsdir [tixFSExternal $ent] tixDirTree:ToggleDir $w $fsdir flatten tixDirTree:ChangeDir $w $fsdir tixDirTree:CallBrowseCmd $w $fsdir } proc tixDirTree:Command {w B} { upvar #0 $w data upvar $B bind set ent [tixEvent flag V] tixChainMethod $w Command $B if {[llength $data(-command)]} { set fsdir [tixFSExternal $ent] tixEvalCmdBinding $w $data(-command) bind $fsdir } } # This is a virtual method # proc tixDirTree:BrowseCmd {w B} { upvar #0 $w data upvar 1 $B bind set ent [tixEvent flag V] set fsdir [tixFSExternal $ent] # This is a hack because %V may have been modified by callbrowsecmd set fsdir [file normalize $fsdir] tixDirTree:ChangeDir $w $fsdir tixDirTree:CallBrowseCmd $w $fsdir } #---------------------------------------------------------------------- # # Public Methods # #---------------------------------------------------------------------- proc tixDirTree:chdir {w value} { tixDirTree:ChangeDir $w [file normalize $value] } proc tixDirTree:refresh {w {dir ""}} { upvar #0 $w data if {$dir eq ""} { set dir $data(-value) } set dir [file normalize $dir] tixDirTree:ChangeDir $w $dir 1 # Delete any stale directories that no longer exist # foreach child [$data(w:hlist) info children [tixFSInternal $dir]] { if {![file exists [tixFSExternal $child]]} { $data(w:hlist) delete entry $child } } } proc tixDirTree:config-directory {w value} { tixDirTree:ChangeDir $w [file normalize $value] } Tix8.4.3/pkgIndex.tcl000064400000000172150252220140010151 0ustar00if {[catch {package require Tcl 8.4}]} return package ifneeded Tix 8.4.3 \ [list load [file join $dir libTix.so] Tix] Tix8.4.3/Grid.tcl000064400000052241150252220140007271 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Grid.tcl,v 1.6 2004/03/28 02:44:57 hobbs Exp $ # # Grid.tcl -- # # This file defines the default bindings for Tix Grid widgets. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # global tkPriv if {![llength [info globals tkPriv]]} { tk::unsupported::ExposePrivateVariable tkPriv } #-------------------------------------------------------------------------- # tkPriv elements used in this file: # # afterId - Token returned by "after" for autoscanning. # fakeRelease - Cancel the ButtonRelease-1 after the user double click #-------------------------------------------------------------------------- # foreach fun {tkCancelRepeat} { if {![llength [info commands $fun]]} { tk::unsupported::ExposePrivateCommand $fun } } unset fun proc tixGridBind {} { tixBind TixGrid { tixGrid:Button-1 %W %x %y } tixBind TixGrid { tixGrid:Shift-Button-1 %W %x %y } tixBind TixGrid { tixGrid:Control-Button-1 %W %x %y } tixBind TixGrid { tixGrid:ButtonRelease-1 %W %x %y } tixBind TixGrid { tixGrid:Double-1 %W %x %y } tixBind TixGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixGrid:B1-Motion %W %x %y } tixBind TixGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixGrid:Control-B1-Motion %W %x %y } tixBind TixGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixGrid:B1-Leave %W } tixBind TixGrid { tixGrid:B1-Enter %W %x %y } tixBind TixGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixGrid:Control-B1-Leave %W } tixBind TixGrid { tixGrid:Control-B1-Enter %W %x %y } # Keyboard bindings # tixBind TixGrid { tixGrid:DirKey %W up } tixBind TixGrid { tixGrid:DirKey %W down } tixBind TixGrid { tixGrid:DirKey %W left } tixBind TixGrid { tixGrid:DirKey %W right } tixBind TixGrid { %W yview scroll -1 pages } tixBind TixGrid { %W yview scroll 1 pages } tixBind TixGrid { tixGrid:Return %W } tixBind TixGrid { tixGrid:Space %W } # # Don't use tixBind because %A causes Tk 8.3.2 to crash # bind TixGrid { %W yview scroll [expr {- (%D / 120) * 2}] units } } #---------------------------------------------------------------------- # # # Mouse bindings # # #---------------------------------------------------------------------- proc tixGrid:Button-1 {w x y} { if {[$w cget -state] eq "disabled"} { return } tixGrid:SetFocus $w if {[tixGrid:GetState $w] == 0} { tixGrid:GoState 1 $w $x $y } } proc tixGrid:Shift-Button-1 {w x y} { if {[$w cget -state] eq "disabled"} { return } tixGrid:SetFocus $w } proc tixGrid:Control-Button-1 {w x y} { if {[$w cget -state] eq "disabled"} { return } tixGrid:SetFocus $w case [tixGrid:GetState $w] { {s0} { tixGrid:GoState s1 $w $x $y } {b0} { tixGrid:GoState b1 $w $x $y } {m0} { tixGrid:GoState m1 $w $x $y } {e0} { tixGrid:GoState e10 $w $x $y } } } proc tixGrid:ButtonRelease-1 {w x y} { case [tixGrid:GetState $w] { {2} { tixGrid:GoState 5 $w $x $y } {4} { tixGrid:GoState 3 $w $x $y } } } proc tixGrid:B1-Motion {w x y} { case [tixGrid:GetState $w] { {2 4} { tixGrid:GoState 4 $w $x $y } } } proc tixGrid:Control-B1-Motion {w x y} { case [tixGrid:GetState $w] { {s2 s4} { tixGrid:GoState s4 $w $x $y } {b2 b4} { tixGrid:GoState b4 $w $x $y } {m2 m5} { tixGrid:GoState m4 $w $x $y } } } proc tixGrid:Double-1 {w x y} { case [tixGrid:GetState $w] { {s0} { tixGrid:GoState s7 $w $x $y } {b0} { tixGrid:GoState b7 $w $x $y } } } proc tixGrid:B1-Leave {w} { case [tixGrid:GetState $w] { {s2 s4} { tixGrid:GoState s5 $w } {b2 b4} { tixGrid:GoState b5 $w } {m2 m5} { tixGrid:GoState m8 $w } {e2 e5} { tixGrid:GoState e8 $w } } } proc tixGrid:B1-Enter {w x y} { case [tixGrid:GetState $w] { {s5 s6} { tixGrid:GoState s4 $w $x $y } {b5 b6} { tixGrid:GoState b4 $w $x $y } {m8 m9} { tixGrid:GoState m4 $w $x $y } {e8 e9} { tixGrid:GoState e4 $w $x $y } } } proc tixGrid:Control-B1-Leave {w} { case [tixGrid:GetState $w] { {s2 s4} { tixGrid:GoState s5 $w } {b2 b4} { tixGrid:GoState b5 $w } {m2 m5} { tixGrid:GoState m8 $w } } } proc tixGrid:Control-B1-Enter {w x y} { case [tixGrid:GetState $w] { {s5 s6} { tixGrid:GoState s4 $w $x $y } {b5 b6} { tixGrid:GoState b4 $w $x $y } {m8 m9} { tixGrid:GoState m4 $w $x $y } } } proc tixGrid:AutoScan {w} { case [tixGrid:GetState $w] { {s5 s6} { tixGrid:GoState s6 $w } {b5 b6} { tixGrid:GoState b6 $w } {m8 m9} { tixGrid:GoState m9 $w } {e8 e9} { tixGrid:GoState e9 $w } } } #---------------------------------------------------------------------- # # # Key bindings # # #---------------------------------------------------------------------- proc tixGrid:DirKey {w key} { if {[$w cget -state] eq "disabled"} { return } case [tixGrid:GetState $w] { {s0} { tixGrid:GoState s8 $w $key } {b0} { tixGrid:GoState b8 $w $key } } } proc tixGrid:Return {w} { if {[$w cget -state] eq "disabled"} { return } case [tixGrid:GetState $w] { {s0} { tixGrid:GoState s9 $w } {b0} { tixGrid:GoState b9 $w } } } proc tixGrid:Space {w} { if {[$w cget -state] eq "disabled"} { return } case [tixGrid:GetState $w] { {s0} { tixGrid:GoState s10 $w } {b0} { tixGrid:GoState b10 $w } } } #---------------------------------------------------------------------- # # STATE MANIPULATION # # #---------------------------------------------------------------------- proc tixGrid:GetState {w} { global $w:priv:state if {![info exists $w:priv:state]} { set $w:priv:state 0 } return [set $w:priv:state] } proc tixGrid:SetState {w n} { global $w:priv:state set $w:priv:state $n } proc tixGrid:GoState {n w args} { # puts "going from [tixGrid:GetState $w] --> $n" tixGrid:SetState $w $n eval tixGrid:GoState-$n $w $args } #---------------------------------------------------------------------- # SELECTION ROUTINES #---------------------------------------------------------------------- proc tixGrid:SelectSingle {w ent} { $w selection set [lindex $ent 0] [lindex $ent 1] tixGrid:CallBrowseCmd $w $ent } #---------------------------------------------------------------------- # SINGLE SELECTION #---------------------------------------------------------------------- proc tixGrid:GoState-0 {w} { set list $w:_list global $list if {[info exists $list]} { foreach cmd [set $list] { uplevel #0 $cmd } if {[info exists $list]} { unset $list } } } proc tixGrid:GoState-1 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { tixGrid:SetAnchor $w $ent } tixGrid:CheckEdit $w $w selection clear 0 0 max max if {[$w cget -selectmode] ne "single"} { tixGrid:SelectSingle $w $ent } tixGrid:GoState 2 $w } proc tixGrid:GoState-2 {w} { } proc tixGrid:GoState-3 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { tixGrid:SelectSingle $w $ent } tixGrid:GoState 0 $w } proc tixGrid:GoState-5 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { tixGrid:SelectSingle $w $ent tixGrid:SetEdit $w $ent } tixGrid:GoState 0 $w } proc tixGrid:GoState-4 {w x y} { set ent [$w nearest $x $y] case [$w cget -selectmode] { single { tixGrid:SetAnchor $w $ent } browse { tixGrid:SetAnchor $w $ent $w selection clear 0 0 max max tixGrid:SelectSingle $w $ent } {multiple extended} { set anchor [$w anchor get] $w selection adjust [lindex $anchor 0] [lindex $anchor 1] \ [lindex $ent 0] [lindex $ent 1] } } } proc tixGrid:GoState-s5 {w} { tixGrid:StartScan $w } proc tixGrid:GoState-s6 {w} { global tkPriv tixGrid:DoScan $w } proc tixGrid:GoState-s7 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w selection clear $w selection set $ent tixGrid:CallCommand $w $ent } tixGrid:GoState s0 $w } proc tixGrid:GoState-s8 {w key} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 } else { set anchor [$w info $key $anchor] } $w anchor set $anchor $w see $anchor tixGrid:GoState s0 $w } proc tixGrid:GoState-s9 {w} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 $w anchor set $anchor $w see $anchor } if {[$w info anchor] != ""} { # ! may not have any elements # tixGrid:CallCommand $w [$w info anchor] $w selection clear $w selection set $anchor } tixGrid:GoState s0 $w } proc tixGrid:GoState-s10 {w} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 $w anchor set $anchor $w see $anchor } if {[$w info anchor] != ""} { # ! may not have any elements # tixGrid:CallBrowseCmd $w [$w info anchor] $w selection clear $w selection set $anchor } tixGrid:GoState s0 $w } #---------------------------------------------------------------------- # BROWSE SELECTION #---------------------------------------------------------------------- proc tixGrid:GoState-b0 {w} { } proc tixGrid:GoState-b1 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w selection clear $w selection set $ent tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState b2 $w } proc tixGrid:GoState-b2 {w} { } proc tixGrid:GoState-b3 {w} { set ent [$w info anchor] if {$ent != ""} { $w selection clear $w selection set $ent tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState b0 $w } proc tixGrid:GoState-b4 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w selection clear $w selection set $ent tixGrid:CallBrowseCmd $w $ent } } proc tixGrid:GoState-b5 {w} { tixGrid:StartScan $w } proc tixGrid:GoState-b6 {w} { global tkPriv tixGrid:DoScan $w } proc tixGrid:GoState-b7 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w selection clear $w selection set $ent tixGrid:CallCommand $w $ent } tixGrid:GoState b0 $w } proc tixGrid:GoState-b8 {w key} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 } else { set anchor [$w info $key $anchor] } $w anchor set $anchor $w selection clear $w selection set $anchor $w see $anchor tixGrid:CallBrowseCmd $w $anchor tixGrid:GoState b0 $w } proc tixGrid:GoState-b9 {w} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 $w anchor set $anchor $w see $anchor } if {[$w info anchor] != ""} { # ! may not have any elements # tixGrid:CallCommand $w [$w info anchor] $w selection clear $w selection set $anchor } tixGrid:GoState b0 $w } proc tixGrid:GoState-b10 {w} { set anchor [$w info anchor] if {$anchor == ""} { set anchor 0 $w anchor set $anchor $w see $anchor } if {[$w info anchor] != ""} { # ! may not have any elements # tixGrid:CallBrowseCmd $w [$w info anchor] $w selection clear $w selection set $anchor } tixGrid:GoState b0 $w } #---------------------------------------------------------------------- # MULTIPLE SELECTION #---------------------------------------------------------------------- proc tixGrid:GoState-m0 {w} { } proc tixGrid:GoState-m1 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w selection clear $w selection set $ent tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState m2 $w } proc tixGrid:GoState-m2 {w} { } proc tixGrid:GoState-m3 {w} { set ent [$w info anchor] if {$ent != ""} { tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState m0 $w } proc tixGrid:GoState-m4 {w x y} { set from [$w info anchor] set to [$w nearest $x $y] if {$to != ""} { $w selection clear $w selection set $from $to tixGrid:CallBrowseCmd $w $to } tixGrid:GoState m5 $w } proc tixGrid:GoState-m5 {w} { } proc tixGrid:GoState-m6 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState m0 $w } proc tixGrid:GoState-m7 {w x y} { set from [$w info anchor] set to [$w nearest $x $y] if {$from == ""} { set from $to $w anchor set $from } if {$to != ""} { $w selection clear $w selection set $from $to tixGrid:CallBrowseCmd $w $to } tixGrid:GoState m5 $w } proc tixGrid:GoState-m8 {w} { tixGrid:StartScan $w } proc tixGrid:GoState-m9 {w} { tixGrid:DoScan $w } proc tixGrid:GoState-xm7 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w selection clear $w selection set $ent tixGrid:CallCommand $w $ent } tixGrid:GoState m0 $w } #---------------------------------------------------------------------- # EXTENDED SELECTION #---------------------------------------------------------------------- proc tixGrid:GoState-e0 {w} { } proc tixGrid:GoState-e1 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w anchor set $ent $w selection clear $w selection set $ent tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState e2 $w } proc tixGrid:GoState-e2 {w} { } proc tixGrid:GoState-e3 {w} { set ent [$w info anchor] if {$ent != ""} { tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState e0 $w } proc tixGrid:GoState-e4 {w x y} { set from [$w info anchor] set to [$w nearest $x $y] if {$to != ""} { $w selection clear $w selection set $from $to tixGrid:CallBrowseCmd $w $to } tixGrid:GoState e5 $w } proc tixGrid:GoState-e5 {w} { } proc tixGrid:GoState-e6 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState e0 $w } proc tixGrid:GoState-e7 {w x y} { set from [$w info anchor] set to [$w nearest $x $y] if {$from == ""} { set from $to $w anchor set $from } if {$to != ""} { $w selection clear $w selection set $from $to tixGrid:CallBrowseCmd $w $to } tixGrid:GoState e5 $w } proc tixGrid:GoState-e8 {w} { tixGrid:StartScan $w } proc tixGrid:GoState-e9 {w} { tixGrid:DoScan $w } proc tixGrid:GoState-e10 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { if {[$w info anchor] == ""} { $w anchor set $ent } if {[$w selection includes $ent]} { $w selection clear $ent } else { $w selection set $ent } tixGrid:CallBrowseCmd $w $ent } tixGrid:GoState e2 $w } proc tixGrid:GoState-xm7 {w x y} { set ent [$w nearest $x $y] if {$ent != ""} { $w selection clear $w selection set $ent tixGrid:CallCommand $w $ent } tixGrid:GoState e0 $w } #---------------------------------------------------------------------- # HODGE PODGE #---------------------------------------------------------------------- proc tixGrid:GoState-12 {w x y} { tkCancelRepeat tixGrid:GoState 5 $w $x $y } proc tixGrid:GoState-13 {w ent oldEnt} { global tkPriv set tkPriv(tix,indicator) $ent set tkPriv(tix,oldEnt) $oldEnt tixGrid:IndicatorCmd $w $ent } proc tixGrid:GoState-14 {w x y} { global tkPriv if {[tixGrid:InsideArmedIndicator $w $x $y]} { $w anchor set $tkPriv(tix,indicator) $w select clear $w select set $tkPriv(tix,indicator) tixGrid:IndicatorCmd $w $tkPriv(tix,indicator) } else { tixGrid:IndicatorCmd $w $tkPriv(tix,indicator) } unset tkPriv(tix,indicator) tixGrid:GoState 0 $w } proc tixGrid:GoState-16 {w ent} { if {$ent == ""} { return } if {[$w cget -selectmode] ne "single"} { tixGrid:Select $w $ent tixGrid:Browse $w $ent } } proc tixGrid:GoState-18 {w} { global tkPriv tkCancelRepeat tixGrid:GoState 6 $w $tkPriv(x) $tkPriv(y) } proc tixGrid:GoState-20 {w x y} { global tkPriv if {![tixGrid:InsideArmedIndicator $w $x $y]} { tixGrid:GoState 21 $w $x $y } else { tixGrid:IndicatorCmd $w $tkPriv(tix,indicator) } } proc tixGrid:GoState-21 {w x y} { global tkPriv if {[tixGrid:InsideArmedIndicator $w $x $y]} { tixGrid:GoState 20 $w $x $y } else { tixGrid:IndicatorCmd $w $tkPriv(tix,indicator) } } proc tixGrid:GoState-22 {w} { global tkPriv if {$tkPriv(tix,oldEnt) != ""} { $w anchor set $tkPriv(tix,oldEnt) } else { $w anchor clear } tixGrid:GoState 0 $w } #---------------------------------------------------------------------- # callback actions #---------------------------------------------------------------------- proc tixGrid:SetAnchor {w ent} { if {$ent ne ""} { $w anchor set [lindex $ent 0] [lindex $ent 1] # $w see $ent } } proc tixGrid:Select {w ent} { $w selection clear $w select set $ent } proc tixGrid:StartScan {w} { global tkPriv set tkPriv(afterId) [after 50 tixGrid:AutoScan $w] } proc tixGrid:DoScan {w} { global tkPriv set x $tkPriv(x) set y $tkPriv(y) set X $tkPriv(X) set Y $tkPriv(Y) set out 0 if {$y >= [winfo height $w]} { $w yview scroll 1 units set out 1 } if {$y < 0} { $w yview scroll -1 units set out 1 } if {$x >= [winfo width $w]} { $w xview scroll 2 units set out 1 } if {$x < 0} { $w xview scroll -2 units set out 1 } if {$out} { set tkPriv(afterId) [after 50 tixGrid:AutoScan $w] } } proc tixGrid:CallBrowseCmd {w ent} { return set browsecmd [$w cget -browsecmd] if {$browsecmd != ""} { set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $browsecmd bind $ent } } proc tixGrid:CallCommand {w ent} { set command [$w cget -command] if {$command != ""} { set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $command bind $ent } } # tixGrid:EditCell -- # # This command is called when "$w edit set $x $y" is called. It causes # an SetEdit call when the grid's state is 0. # proc tixGrid:EditCell {w x y} { set list $w:_list global $list if {[tixGrid:GetState $w] == 0} { tixGrid:SetEdit $w [list $x $y] } else { lappend $list [list tixGrid:SetEdit $w [list $x $y]] } } # tixGrid:EditApply -- # # This command is called when "$w edit apply $x $y" is called. It causes # an CheckEdit call when the grid's state is 0. # proc tixGrid:EditApply {w} { set list $w:_list global $list if {[tixGrid:GetState $w] == 0} { tixGrid:CheckEdit $w } else { lappend $list [list tixGrid:CheckEdit $w] } } # tixGrid:CheckEdit -- # # This procedure is called when the user sets the focus on a cell. # If another cell is being edited, apply the changes of that cell. # proc tixGrid:CheckEdit {w} { set edit $w.tixpriv__edit if {[winfo exists $edit]} { # # If it -command is not empty, it is being used for another cell. # Invoke it so that the other cell can be updated. # if {[$edit cget -command] ne ""} { $edit invoke } } } # tixGrid:SetEdit -- # # Puts a floatentry on top of an editable entry. # proc tixGrid:SetEdit {w ent} { set edit $w.tixpriv__edit tixGrid:CheckEdit $w set editnotifycmd [$w cget -editnotifycmd] if {$editnotifycmd eq ""} { return } set px [lindex $ent 0] set py [lindex $ent 1] if {![uplevel #0 $editnotifycmd $px $py]} { return } if {[$w info exists $px $py]} { if [catch { set oldValue [$w entrycget $px $py -text] }] { # The entry doesn't support -text option. Can't edit it. # # If the application wants to force editing of an entry, it could # delete or replace the entry in the editnotifyCmd procedure. # return } } else { set oldValue "" } set bbox [$w info bbox [lindex $ent 0] [lindex $ent 1]] set x [lindex $bbox 0] set y [lindex $bbox 1] set W [lindex $bbox 2] set H [lindex $bbox 3] if {![winfo exists $edit]} { tixFloatEntry $edit } $edit config -command "tixGrid:DoneEdit $w $ent" $edit post $x $y $W $H $edit config -value $oldValue } proc tixGrid:DoneEdit {w x y args} { set edit $w.tixpriv__edit $edit config -command "" $edit unpost set value [tixEvent value] if {[$w info exists $x $y]} { if [catch { $w entryconfig $x $y -text $value }] { return } } elseif {$value ne ""} { if {[catch { # This needs to be catch'ed because the default itemtype may # not support the -text option # $w set $x $y -text $value }]} { return } } else { return } set editDoneCmd [$w cget -editdonecmd] if {$editDoneCmd ne ""} { uplevel #0 $editDoneCmd $x $y } } proc tixGrid:SetFocus {w} { if {[$w cget -takefocus] && ![string match $w.* [focus -displayof $w]]} { focus $w } } Tix8.4.3/DialogS.tcl000064400000010310150252220140007715 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: DialogS.tcl,v 1.5 2004/03/28 02:44:57 hobbs Exp $ # # DialogS.tcl -- # # # Implements the DialogShell widget. It tells the window # manager that it is a dialog window and should be treated specially. # The exact treatment depends on the treatment of the window # manager # # Copyright (c) 1994-1996, Expert Interface Technologies # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixDialogShell { -superclass tixShell -classname TixDialogShell -method { popdown popup center } -flag { -mapped -minheight -minwidth -parent -transient } -static {} -configspec { {-mapped mapped Mapped 0} {-minwidth minWidth MinWidth 0} {-minheight minHeight MinHeight 0} {-transient transient Transient true} {-parent parent Parent ""} } } #---------------------------------------------------------------------- # Construct widget #---------------------------------------------------------------------- proc tixDialogShell:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget # Set the title of this shell appropriately # if {$data(-title) == ""} { # dynamically sets the title # set data(-title) [winfo name $w] } wm title $w $data(-title) # Set the parent of this dialog shell # if {$data(-parent) == ""} { set data(-parent) [winfo parent $w] } # Set the minsize and maxsize of the thing # wm minsize $w $data(-minwidth) $data(-minheight) wm transient $w "" } # The next procedures manage the dialog boxes # proc tixDialogShell:popup {w {parent ""}} { upvar #0 $w data # First update to make sure the boxes are the right size # update idletask # Then we set the position and update # # tixDialogShell:center $w $parent # and now make it visible. Viola! Centered over parent. # wm deiconify $w after idle raise $w } # This procedure centers a dialog box over a window making sure that the # dialog box doesn't appear off the screen # # However, if the parent is smaller than this dialog, make this dialog # appear at parent(x,y) + (20,20) # proc tixDialogShell:center {w {parent ""}} { upvar #0 $w data # Tell the WM that we'll do this ourselves. wm sizefrom $w user wm positionfrom $w user if {$parent == ""} { set parent $data(-parent) } if {$parent == "" || [catch {set parent [winfo toplevel $parent]}]} { set parent "." } # Where is my parent and what are it's dimensions # if {$parent != ""} { set pargeo [split [wm geometry $parent] "+x"] set parentW [lindex $pargeo 0] set parentH [lindex $pargeo 1] set parx [lindex $pargeo 2] set pary [lindex $pargeo 3] if {[string is true -strict $data(-transient)]} { wm transient $w $parent } } else { set parentW [winfo screenwidth $w] set parentH [winfo screenheight $w] set parx 0 set pary 0 set parent [winfo parent $w] } # What are is the offset of the virtual window set vrootx [winfo vrootx $parent] set vrooty [winfo vrooty $parent] # What are my dimensions ? set dialogW [winfo reqwidth $w] set dialogH [winfo reqheight $w] if {$dialogW < $parentW-30 || $dialogW < $parentH-30} { set dialogx [expr {$parx+($parentW-$dialogW)/2+$vrootx}] set dialogy [expr {$pary+($parentH-$dialogH)/2+$vrooty}] } else { # This dialog is too big. Place it at (parentx, parenty) + (20,20) # set dialogx [expr {$parx+20+$vrootx}] set dialogy [expr {$pary+20+$vrooty}] } set maxx [expr {[winfo screenwidth $parent] - $dialogW}] set maxy [expr {[winfo screenheight $parent] - $dialogH}] # Make sure it doesn't go off screen # if {$dialogx < 0} { set dialogx 0 } else { if {$dialogx > $maxx} { set dialogx $maxx } } if {$dialogy < 0} { set dialogy 0 } else { if {$dialogy > $maxy} { set dialogy $maxy } } # set my new position (and dimensions) # if {[wm geometry $w] == "1x1+0+0"} { wm geometry $w ${dialogW}x${dialogH}+${dialogx}+${dialogy} } } proc tixDialogShell:popdown {w args} { wm withdraw $w } Tix8.4.3/SWindow.tcl000064400000015374150252220140010004 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: SWindow.tcl,v 1.4 2001/12/09 05:04:02 idiscovery Exp $ # # SWindow.tcl -- # # This file implements Scrolled Window widgets # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # # # Example: # # tixScrolledWindow .w # set window [.w subwidget window] # # Now you can put a whole widget hierachy inside $window. # # # button $window.b # pack $window.b # # Author's note # # Note, the current implementation does not allow the child window # to be outside of the parent window when the parent's size is larger # than the child's size. This is fine for normal operations. However, # it is not suitable for an MDI master window. Therefore, you will notice # that the MDI master window is not a subclass of ScrolledWidget at all. # # tixWidgetClass tixScrolledWindow { -classname TixScrolledWindow -superclass tixScrolledWidget -method { } -flag { -expandmode -shrink -xscrollincrement -yscrollincrement } -static { } -configspec { {-expandmode expandMode ExpandMode expand} {-shrink shrink Shrink ""} {-xscrollincrement xScrollIncrement ScrollIncrement ""} {-yscrollincrement yScrollIncrement ScrollIncrement ""} {-scrollbarspace scrollbarSpace ScrollbarSpace {both}} } -default { {.scrollbar auto} {*window.borderWidth 1} {*f1.borderWidth 1} {*Scrollbar.borderWidth 1} {*Scrollbar.takeFocus 0} } } proc tixScrolledWindow:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec set data(dx) 0 set data(dy) 0 } proc tixScrolledWindow:ConstructWidget {w} { upvar #0 $w data global tcl_platform tixChainMethod $w ConstructWidget set data(pw:f1) \ [frame $w.f1 -relief sunken] set data(pw:f2) \ [frame $w.f2 -bd 0] set data(w:window) \ [frame $w.f2.window -bd 0] pack $data(pw:f2) -in $data(pw:f1) -expand yes -fill both set data(w:hsb) \ [scrollbar $w.hsb -orient horizontal -takefocus 0] set data(w:vsb) \ [scrollbar $w.vsb -orient vertical -takefocus 0] # set data(w:pann) \ # [frame $w.pann -bd 2 -relief groove] $data(pw:f1) config -highlightthickness \ [$data(w:hsb) cget -highlightthickness] set data(pw:client) $data(pw:f1) } proc tixScrolledWindow:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings $data(w:hsb) config -command "tixScrolledWindow:ScrollBarCB $w x" $data(w:vsb) config -command "tixScrolledWindow:ScrollBarCB $w y" tixManageGeometry $data(w:window) "tixScrolledWindow:WindowGeomProc $w" } # This guy just keeps asking for a same size as the w:window # proc tixScrolledWindow:WindowGeomProc {w args} { upvar #0 $w data set rw [winfo reqwidth $data(w:window)] set rh [winfo reqheight $data(w:window)] if {$rw != [winfo reqwidth $data(pw:f2)] || $rh != [winfo reqheight $data(pw:f2)]} { tixGeometryRequest $data(pw:f2) $rw $rh } } proc tixScrolledWindow:Scroll {w axis total window first args} { upvar #0 $w data case [lindex $args 0] { "scroll" { set amt [lindex $args 1] set unit [lindex $args 2] case $unit { "units" { set incr $axis\scrollincrement if {$data(-$incr) != ""} { set by $data(-$incr) } else { set by [expr $window / 16] } set first [expr $first + $amt * $by] } "pages" { set first [expr $first + $amt * $window] } } } "moveto" { set to [lindex $args 1] set first [expr int($to * $total)] } } if {[expr $first + $window] > $total} { set first [expr $total - $window] } if {$first < 0} { set first 0 } return $first } proc tixScrolledWindow:ScrollBarCB {w axis args} { upvar #0 $w data set bd \ [expr [$data(pw:f1) cget -bd] + [$data(pw:f1) cget -highlightthickness]] set fw [expr [winfo width $data(pw:f1)] - 2*$bd] set fh [expr [winfo height $data(pw:f1)] - 2*$bd] set ww [winfo reqwidth $data(w:window)] set wh [winfo reqheight $data(w:window)] if {$axis == "x"} { set data(dx) \ [eval tixScrolledWindow:Scroll $w $axis $ww $fw $data(dx) $args] } else { set data(dy) \ [eval tixScrolledWindow:Scroll $w $axis $wh $fh $data(dy) $args] } tixWidgetDoWhenIdle tixScrolledWindow:PlaceWindow $w } proc tixScrolledWindow:PlaceWindow {w} { upvar #0 $w data set bd \ [expr [$data(pw:f1) cget -bd] + [$data(pw:f1) cget -highlightthickness]] set fw [expr [winfo width $data(pw:f1)] - 2*$bd] set fh [expr [winfo height $data(pw:f1)] - 2*$bd] set ww [winfo reqwidth $data(w:window)] set wh [winfo reqheight $data(w:window)] tixMapWindow $data(w:window) if {$data(-expandmode) == "expand"} { if {$ww < $fw} { set ww $fw } if {$wh < $fh} { set wh $fh } } if {$data(-shrink) == "x"} { if {$fw < $ww} { set ww $fw } } tixMoveResizeWindow $data(w:window) -$data(dx) -$data(dy) $ww $wh set first [expr $data(dx).0 / $ww.0] set last [expr $first + ($fw.0 / $ww.0)] $data(w:hsb) set $first $last set first [expr $data(dy).0 / $wh.0] set last [expr $first + ($fh.0 / $wh.0)] $data(w:vsb) set $first $last } #---------------------------------------------------------------------- # virtual functions to query the client window's scroll requirement # # When this function is called, the scrolled window is going to be # mapped, if it is still unmapped. Also, it is going to change its # size. Therefore, it is a good time to check whether the w:window needs # to be re-positioned due to the new parent window size. #---------------------------------------------------------------------- proc tixScrolledWindow:GeometryInfo {w mW mH} { upvar #0 $w data set bd \ [expr [$data(pw:f1) cget -bd] + [$data(pw:f1) cget -highlightthickness]] set fw [expr $mW -2*$bd] set fh [expr $mH -2*$bd] set ww [winfo reqwidth $data(w:window)] set wh [winfo reqheight $data(w:window)] # Calculate the X info # if {$fw >= $ww} { if {$data(dx) > 0} { set data(dx) 0 } set xinfo [list 0.0 1.0] } else { set maxdx [expr $ww - $fw] if {$data(dx) > $maxdx} { set data(dx) $maxdx } set first [expr $data(dx).0 / $ww.0] set last [expr $first + ($fw.0 / $ww.0)] set xinfo [list $first $last] } # Calculate the Y info # if {$fh >= $wh} { if {$data(dy) > 0} { set data(dy) 0 } set yinfo [list 0.0 1.0] } else { set maxdy [expr $wh - $fh] if {$data(dy) > $maxdy} { set data(dy) $maxdy } set first [expr $data(dy).0 / $wh.0] set last [expr $first + ($fh.0 / $wh.0)] set yinfo [list $first $last] } return [list $xinfo $yinfo] } Tix8.4.3/SGrid.tcl000064400000013457150252220140007422 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: SGrid.tcl,v 1.6 2002/01/24 09:13:58 idiscovery Exp $ # # SGrid.tcl -- # # This file implements Scrolled Grid widgets # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # global tkPriv if {![llength [info globals tkPriv]]} { tk::unsupported::ExposePrivateVariable tkPriv } #-------------------------------------------------------------------------- # tkPriv elements used in this file: # # x - # y - # X - # Y - #-------------------------------------------------------------------------- # tixWidgetClass tixScrolledGrid { -classname TixScrolledGrid -superclass tixScrolledWidget -method { } -flag { } -configspec { } -default { {.scrollbar auto} {*grid.borderWidth 1} {*grid.Background #c3c3c3} {*grid.highlightBackground #d9d9d9} {*grid.relief sunken} {*grid.takeFocus 1} {*Scrollbar.takeFocus 0} } } proc tixScrolledGrid:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(w:grid) [tixGrid $w.grid] set data(w:hsb) \ [scrollbar $w.hsb -orient horizontal -takefocus 0] set data(w:vsb) \ [scrollbar $w.vsb -orient vertical -takefocus 0] set data(pw:client) $data(w:grid) pack $data(w:grid) -expand yes -fill both -padx 0 -pady 0 } proc tixScrolledGrid:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings $data(w:grid) config \ -xscrollcommand "$data(w:hsb) set"\ -yscrollcommand "$data(w:vsb) set"\ -sizecmd [list tixScrolledWidget:Configure $w] \ -formatcmd "tixCallMethod $w FormatCmd" $data(w:hsb) config -command "$data(w:grid) xview" $data(w:vsb) config -command "$data(w:grid) yview" bindtags $data(w:grid) \ "$data(w:grid) TixSGrid TixGrid [winfo toplevel $data(w:grid)] all" tixSetMegaWidget $data(w:grid) $w } #---------------------------------------------------------------------- # RAW event bindings #---------------------------------------------------------------------- proc tixScrolledGridBind {} { tixBind TixScrolledGrid { tixScrolledGrid:Button-1 [tixGetMegaWidget %W] %x %y } tixBind TixScrolledGrid { tixScrolledGrid:Shift-Button-1 %W %x %y } tixBind TixScrolledGrid { tixScrolledGrid:Control-Button-1 %W %x %y } tixBind TixScrolledGrid { tixScrolledGrid:ButtonRelease-1 %W %x %y } tixBind TixScrolledGrid { tixScrolledGrid:Double-1 %W %x %y } tixBind TixScrolledGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixScrolledGrid:B1-Motion %W %x %y } tixBind TixScrolledGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixScrolledGrid:Control-B1-Motion %W %x %y } tixBind TixScrolledGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixScrolledGrid:B1-Leave %W } tixBind TixScrolledGrid { tixScrolledGrid:B1-Enter %W %x %y } tixBind TixScrolledGrid { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixScrolledGrid:Control-B1-Leave %W } tixBind TixScrolledGrid { tixScrolledGrid:Control-B1-Enter %W %x %y } # Keyboard bindings # tixBind TixScrolledGrid { tixScrolledGrid:DirKey %W up } tixBind TixScrolledGrid { tixScrolledGrid:DirKey %W down } tixBind TixScrolledGrid { tixScrolledGrid:DirKey %W left } tixBind TixScrolledGrid { tixScrolledGrid:DirKey %W right } tixBind TixScrolledGrid { %W yview scroll -1 pages } tixBind TixScrolledGrid { %W yview scroll 1 pages } tixBind TixScrolledGrid { tixScrolledGrid:Return %W } tixBind TixScrolledGrid { tixScrolledGrid:Space %W } } #---------------------------------------------------------------------- # # # Mouse bindings # # #---------------------------------------------------------------------- proc tixScrolledGrid:Button-1 {w x y} { if {[$w cget -state] == "disabled"} { return } if {[$w cget -takefocus]} { focus $w } case [tixScrolled:GetState $w] { {0} { tixScrolledGrid:GoState s1 $w $x $y } {b0} { tixScrolledGrid:GoState b1 $w $x $y } {m0} { tixScrolledGrid:GoState m1 $w $x $y } {e0} { tixScrolledGrid:GoState e1 $w $x $y } } } #---------------------------------------------------------------------- # # option configs #---------------------------------------------------------------------- #---------------------------------------------------------------------- # # Widget commands #---------------------------------------------------------------------- #---------------------------------------------------------------------- # # Private Methods #---------------------------------------------------------------------- #---------------------------------------------------------------------- # Virtual Methods #---------------------------------------------------------------------- proc tixScrolledGrid:FormatCmd {w area x1 y1 x2 y2} { # do nothing } #---------------------------------------------------------------------- # virtual functions to query the client window's scroll requirement #---------------------------------------------------------------------- proc tixScrolledGrid:GeometryInfo {w mW mH} { upvar #0 $w data if {$mW < 1} { set mW 1 } if {$mH < 1} { set mH 1 } return [$data(w:grid) geometryinfo $mW $mH] } Tix8.4.3/StdShell.tcl000064400000002225150252220140010123 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: StdShell.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ # # StdShell.tcl -- # # Standard Dialog Shell. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixStdDialogShell { -classname TixStdDialogShell -superclass tixDialogShell -method {} -flag { -cached } -configspec { {-cached cached Cached ""} } } proc tixStdDialogShell:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(w:btns) [tixStdButtonBox $w.btns] set data(w_tframe) [frame $w.tframe] pack $data(w_tframe) -side top -expand yes -fill both pack $data(w:btns) -side bottom -fill both tixCallMethod $w ConstructTopFrame $data(w_tframe) } # Subclasses of StdDialogShell should override this method instead of # ConstructWidget. # # Override : always # chain : before proc tixStdDialogShell:ConstructTopFrame {w frame} { # Do nothing } Tix8.4.3/DirList.tcl000064400000015630150252220140007757 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: DirList.tcl,v 1.5 2004/03/28 02:44:57 hobbs Exp $ # # DirList.tcl -- # # Implements the tixDirList widget. # # - overrides the -browsecmd and -command options of the # HList subwidget # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixDirList { -classname TixDirList -superclass tixScrolledHList -method { chdir } -flag { -browsecmd -command -dircmd -disablecallback -root -rootname -showhidden -value } -configspec { {-browsecmd browseCmd BrowseCmd ""} {-command command Command ""} {-dircmd dirCmd DirCmd ""} {-disablecallback disableCallback DisableCallback 0 tixVerifyBoolean} {-root root Root ""} {-rootname rootName RootName ""} {-showhidden showHidden ShowHidden 0 tixVerifyBoolean} {-value value Value ""} } -default { {.scrollbar auto} {*borderWidth 1} {*hlist.background #c3c3c3} {*hlist.indent 7} {*hlist.relief sunken} {*hlist.height 10} {*hlist.width 20} {*hlist.padX 2} {*hlist.padY 0} {*hlist.wideSelection 0} {*hlist.drawBranch 0} {*hlist.highlightBackground #d9d9d9} {*hlist.itemType imagetext} {*hlist.takeFocus 1} } -forcecall { -value } } # Important data members: # # data(vpath) # The currently selected vpath. This internal variable is useful on # the Win95 platform, where an directory may correspond to more than # one node in the hierarchy. For example, C:\Windows\Desktop\Foo # can appead as "Desktop\Foo" and # "Desktop\My Computer\C:\Windows\Desktop\Foo". This variable tells us # which icon should we show given the same DOS pathname. # proc tixDirList:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec } proc tixDirList:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget $data(w:hlist) config -separator [tixFSSep] -selectmode "single" } proc tixDirList:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings $data(w:hlist) config \ -browsecmd [list tixDirList:Browse $w] \ -command [list tixDirList:Command $w] if {$data(-value) eq "" || [catch {set data(-value) [tixFSNormalize $data(-value)]}]} { set data(-value) [pwd] } set data(vpath) [tixFSInternal $data(-value)] } #---------------------------------------------------------------------- # Incoming-Events #---------------------------------------------------------------------- proc tixDirList:Browse {w args} { upvar #0 $w data set vpath [tixEvent flag V] set value [$data(w:hlist) info data $vpath] tixDirList:HighLight $w $vpath set data(vpath) $vpath set data(-value) [tixFSExternal $value] tixDirList:CallBrowseCmd $w $data(-value) } proc tixDirList:Command {w args} { upvar #0 $w data set vpath [tixEvent value] set value [$data(w:hlist) info data $vpath] set data(-value) [tixFSExternal $value] tixDirList:LoadDir $w [tixFSNativeNorm $value] $vpath tixDirList:HighLight $w $vpath set data(vpath) $vpath tixDirList:CallCommand $w $data(-value) } #---------------------------------------------------------------------- # Outgoing-Events #---------------------------------------------------------------------- proc tixDirList:CallBrowseCmd {w npath} { upvar #0 $w data if {[llength $data(-browsecmd)]} { set bind(specs) "%V" set bind(%V) $npath tixEvalCmdBinding $w $data(-browsecmd) bind $npath } } proc tixDirList:CallCommand {w npath} { upvar #0 $w data if {[llength $data(-command)] && !$data(-disablecallback)} { set bind(specs) "%V" set bind(%V) $npath tixEvalCmdBinding $w $data(-command) bind $npath } } #---------------------------------------------------------------------- # Directory loading #---------------------------------------------------------------------- proc tixDirList:LoadDir {w {npath ""} {vpath ""}} { upvar #0 $w data tixBusy $w on $data(w:hlist) $data(w:hlist) delete all if {$npath eq ""} { set npath [tixFSNativeNorm $data(-value)] set vpath [tixFSInternal $npath] } tixDirList:ListHierachy $w $npath $vpath tixDirList:ListSubDirs $w $npath $vpath tixWidgetDoWhenIdle tixBusy $w off $data(w:hlist) } proc tixDirList:ListHierachy {w npath vpath} { upvar #0 $w data set img [tix getimage openfold] set curpath "" foreach part [tixFSAncestors $npath] { set curpath [file join $curpath $part] set text [tixFSDisplayFileName $curpath] set vpath [tixFSInternal $curpath] $data(w:hlist) add $vpath -text $text -data $curpath -image $img } } proc tixDirList:ListSubDirs {w npath vpath} { upvar #0 $w data $data(w:hlist) entryconfig $vpath -image [tix getimage act_fold] set img [tix getimage folder] foreach ent [tixFSListDir $npath 1 0 0 $data(-showhidden)] { set curpath [file join $npath $ent] set vp [tixFSInternal $curpath] if {![$data(w:hlist) info exists $vp]} { $data(w:hlist) add $vp -text $ent -data $curpath -image $img } } } proc tixDirList:SetValue {w npath vpath {flag ""}} { upvar #0 $w data if {$flag eq "reload" || ![$data(w:hlist) info exists $vpath]} { tixDirList:LoadDir $w $npath $vpath } tixDirList:HighLight $w $vpath set data(-value) [tixFSNativeNorm $npath] set data(vpath) $vpath tixDirList:CallCommand $w $data(-value) } proc tixDirList:HighLight {w vpath} { upvar #0 $w data if {$data(vpath) ne $vpath} { set old $data(vpath) if {[$data(w:hlist) info exists $old]} { # Un-highlight the originally selected entry by changing its # folder image if {[llength [$data(w:hlist) info children $old]]} { set img [tix getimage openfold] } else { set img [tix getimage folder] } $data(w:hlist) entryconfig $old -image $img } } # Highlight the newly selected entry # $data(w:hlist) entryconfig $vpath -image [tix getimage act_fold] $data(w:hlist) anchor set $vpath $data(w:hlist) select clear $data(w:hlist) select set $vpath $data(w:hlist) see $vpath } #---------------------------------------------------------------------- # Config options #---------------------------------------------------------------------- proc tixDirList:config-value {w value} { upvar #0 $w data tixDirList:chdir $w $value return $data(-value) } proc tixDirList:config-showhidden {w value} { upvar #0 $w data tixWidgetDoWhenIdle tixDirList:LoadDir $w } #---------------------------------------------------------------------- # Public methods #---------------------------------------------------------------------- proc tixDirList:chdir {w value} { upvar #0 $w data set npath [tixFSNativeNorm $value] tixDirList:SetValue $w $npath [tixFSInternal $npath] } Tix8.4.3/VStack.tcl000064400000022663150252220140007604 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: VStack.tcl,v 1.4 2004/03/28 02:44:57 hobbs Exp $ # # VStack.tcl -- # # Virtual base class, do not instantiate! This is the core # class for all NoteBook style widgets. Stack maintains a list # of windows. It provides methods to create, delete windows as # well as stepping through them. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # tixWidgetClass tixVStack { -virtual true -classname TixVStack -superclass tixPrimitive -method { add delete pageconfigure pagecget pages raise raised } -flag { -dynamicgeometry -ipadx -ipady } -configspec { {-dynamicgeometry dynamicGeometry DynamicGeometry 0 tixVerifyBoolean} {-ipadx ipadX Pad 0} {-ipady ipadY Pad 0} } } proc tixVStack:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec set data(pad-x1) 0 set data(pad-x2) 0 set data(pad-y1) 0 set data(pad-y2) 0 set data(windows) "" set data(nWindows) 0 set data(topchild) "" set data(minW) 1 set data(minH) 1 set data(w:top) $w set data(counter) 0 set data(repack) 0 } proc tixVStack:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings tixCallMethod $w InitGeometryManager } #---------------------------------------------------------------------- # Public methods #---------------------------------------------------------------------- proc tixVStack:add {w child args} { upvar #0 $w data set validOptions {-createcmd -raisecmd} set opt(-createcmd) "" set opt(-raisecmd) "" tixHandleOptions -nounknown opt $validOptions $args set data($child,raisecmd) $opt(-raisecmd) set data($child,createcmd) $opt(-createcmd) set data(w:$child) [tixCallMethod $w CreateChildFrame $child] lappend data(windows) $child incr data(nWindows) 1 return $data(w:$child) } proc tixVStack:delete {w child} { upvar #0 $w data if {[info exists data($child,createcmd)]} { if {[winfo exists $data(w:$child)]} { bind $data(w:$child) {;} destroy $data(w:$child) } catch {unset data($child,createcmd)} catch {unset data($child,raisecmd)} catch {unset data(w:$child)} set index [lsearch $data(windows) $child] if {$index >= 0} { set data(windows) [lreplace $data(windows) $index $index] incr data(nWindows) -1 } if {[string equal $data(topchild) $child]} { set data(topchild) "" foreach page $data(windows) { if {$page ne $child} { $w raise $page set data(topchild) $page break } } } } else { error "page $child does not exist" } } proc tixVStack:pagecget {w child option} { upvar #0 $w data if {![info exists data($child,createcmd)]} { error "page \"$child\" does not exist in $w" } case $option { -createcmd { return "$data($child,createcmd)" } -raisecmd { return "$data($child,raisecmd)" } default { if {$data(w:top) ne $w} { return [$data(w:top) pagecget $child $option] } else { error "unknown option \"$option\"" } } } } proc tixVStack:pageconfigure {w child args} { upvar #0 $w data if {![info exists data($child,createcmd)]} { error "page \"$child\" does not exist in $w" } set len [llength $args] if {$len == 0} { set value [$data(w:top) pageconfigure $child] lappend value [list -createcmd "" "" "" $data($child,createcmd)] lappend value [list -raisecmd "" "" "" $data($child,raisecmd)] return $value } if {$len == 1} { case [lindex $args 0] { -createcmd { return [list -createcmd "" "" "" $data($child,createcmd)] } -raisecmd { return [list -raisecmd "" "" "" $data($child,raisecmd)] } default { return [$data(w:top) pageconfigure $child [lindex $args 0]] } } } # By default handle each of the options # set opt(-createcmd) $data($child,createcmd) set opt(-raisecmd) $data($child,raisecmd) tixHandleOptions -nounknown opt {-createcmd -raisecmd} $args # # the widget options set new_args "" foreach {flag value} $args { if {$flag ne "-createcmd" && $flag ne "-raisecmd"} { lappend new_args $flag lappend new_args $value } } if {[llength $new_args] >= 2} { eval $data(w:top) pageconfig $child $new_args } # # The add-on options set data($child,raisecmd) $opt(-raisecmd) set data($child,createcmd) $opt(-createcmd) return "" } proc tixVStack:pages {w} { upvar #0 $w data return $data(windows) } proc tixVStack:raise {w child} { upvar #0 $w data if {![info exists data($child,createcmd)]} { error "page $child does not exist" } if {[llength $data($child,createcmd)]} { uplevel #0 $data($child,createcmd) set data($child,createcmd) "" } tixCallMethod $w RaiseChildFrame $child set oldTopChild $data(topchild) set data(topchild) $child if {$oldTopChild ne $child} { if {[llength $data($child,raisecmd)]} { uplevel #0 $data($child,raisecmd) } } } proc tixVStack:raised {w} { upvar #0 $w data return $data(topchild) } #---------------------------------------------------------------------- # Virtual Methods #---------------------------------------------------------------------- proc tixVStack:InitGeometryManager {w} { upvar #0 $w data bind $w "tixVStack:MasterGeomProc $w" bind $data(w:top) "+tixVStack:DestroyTop $w" if {$data(repack) == 0} { set data(repack) 1 tixWidgetDoWhenIdle tixCallMethod $w Resize } } proc tixVStack:CreateChildFrame {w child} { upvar #0 $w data set f [frame $data(w:top).$child] tixManageGeometry $f "tixVStack:ClientGeomProc $w" bind $f "tixVStack:ClientGeomProc $w -configure $f" bind $f "$w delete $child" return $f } proc tixVStack:RaiseChildFrame {w child} { upvar #0 $w data # Hide the original visible window if {$data(topchild) ne "" && $data(topchild) ne $child} { tixUnmapWindow $data(w:$data(topchild)) } set myW [winfo width $w] set myH [winfo height $w] set cW [expr {$myW - $data(pad-x1) - $data(pad-x2) - 2*$data(-ipadx)}] set cH [expr {$myH - $data(pad-y1) - $data(pad-y2) - 2*$data(-ipady)}] set cX [expr {$data(pad-x1) + $data(-ipadx)}] set cY [expr {$data(pad-y1) + $data(-ipady)}] if {$cW > 0 && $cH > 0} { tixMoveResizeWindow $data(w:$child) $cX $cY $cW $cH tixMapWindow $data(w:$child) raise $data(w:$child) } } #---------------------------------------------------------------------- # # G E O M E T R Y M A N A G E M E N T # #---------------------------------------------------------------------- proc tixVStack:DestroyTop {w} { catch { destroy $w } } proc tixVStack:MasterGeomProc {w args} { if {![winfo exists $w]} { return } upvar #0 $w data if {$data(repack) == 0} { set data(repack) 1 tixWidgetDoWhenIdle tixCallMethod $w Resize } } proc tixVStack:ClientGeomProc {w flag client} { if {![winfo exists $w]} { return } upvar #0 $w data if {$data(repack) == 0} { set data(repack) 1 tixWidgetDoWhenIdle tixCallMethod $w Resize } if {$flag eq "-lostslave"} { error "Geometry Management Error: \ Another geometry manager has taken control of $client.\ This error is usually caused because a widget has been created\ in the wrong frame: it should have been created inside $client instead\ of $w" } } proc tixVStack:Resize {w} { if {![winfo exists $w]} { return } upvar #0 $w data if {$data(nWindows) == 0} { set data(repack) 0 return } if {$data(-width) == 0 || $data(-height) == 0} { if {!$data(-dynamicgeometry)} { # Calculate my required width and height # set maxW 1 set maxH 1 foreach child $data(windows) { set cW [winfo reqwidth $data(w:$child)] set cH [winfo reqheight $data(w:$child)] if {$maxW < $cW} { set maxW $cW } if {$maxH < $cH} { set maxH $cH } } set reqW $maxW set reqH $maxH } else { if {$data(topchild) ne ""} { set reqW [winfo reqwidth $data(w:$data(topchild))] set reqH [winfo reqheight $data(w:$data(topchild))] } else { set reqW 1 set reqH 1 } } incr reqW [expr {$data(pad-x1) + $data(pad-x2) + 2*$data(-ipadx)}] incr reqH [expr {$data(pad-y1) + $data(pad-y2) + 2*$data(-ipady)}] if {$reqW < $data(minW)} { set reqW $data(minW) } if {$reqH < $data(minH)} { set reqH $data(minH) } } # These take higher precedence # if {$data(-width) != 0} { set reqW $data(-width) } if {$data(-height) != 0} { set reqH $data(-height) } if {[winfo reqwidth $w] != $reqW || [winfo reqheight $w] != $reqH} { if {![info exists data(counter)]} { set data(counter) 0 } if {$data(counter) < 50} { incr data(counter) tixGeometryRequest $w $reqW $reqH tixWidgetDoWhenIdle tixCallMethod $w Resize set data(repack) 1 return } } set data(counter) 0 if {$data(w:top) ne $w} { tixMoveResizeWindow $data(w:top) 0 0 [winfo width $w] [winfo height $w] tixMapWindow $data(w:top) } if {[string equal $data(topchild) ""]} { set top [lindex $data(windows) 0] } else { set top $data(topchild) } if {$top ne ""} { tixCallMethod $w raise $top } set data(repack) 0 } Tix8.4.3/Compat.tcl000064400000001546150252220140007631 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Compat.tcl,v 1.3 2004/03/28 02:44:57 hobbs Exp $ # # Compat.tcl -- # # This file wraps around many incompatibilities from Tix 3.6 # to Tix 4.0. # # (1) "box" to "Box" changes # (2) "DlgBtns" to "ButtonBox" changes # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # foreach {old new} { tixDlgBtns tixButtonBox tixStdDlgBtns tixStdButtonBox tixCombobox tixComboBox tixFileSelectbox tixFileSelectBox tixScrolledListbox tixScrolledListBox } { interp alias {} $old {} $new } proc tixInit {args} { eval tix config $args puts stderr "tixInit no longer needed for this version of Tix" } Tix8.4.3/VTree.tcl000064400000010472150252220140007431 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: VTree.tcl,v 1.6 2004/03/28 02:44:57 hobbs Exp $ # # VTree.tcl -- # # Virtual base class for Tree widgets. # # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixVTree { -virtual true -classname TixVTree -superclass tixScrolledHList -method { } -flag { -ignoreinvoke } -configspec { {-ignoreinvoke ignoreInvoke IgnoreInvoke false tixVerifyBoolean} } -default { } } proc tixVTree:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec } proc tixVTree:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(indStyle) \ [tixDisplayStyle image -refwindow $data(w:hlist) -padx 0 -pady 0] } proc tixVTree:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings $data(w:hlist) config \ -indicatorcmd [list tixVTree:IndicatorCmd $w] \ -browsecmd [list tixVTree:BrowseCmdHook $w] \ -command [list tixVTree:CommandHook $w] } proc tixVTree:IndicatorCmd {w args} { upvar #0 $w data set event [tixEvent type] set ent [tixEvent flag V] set type [tixVTree:GetType $w $ent] set plus [tix getimage plus] set plusarm [tix getimage plusarm] set minus [tix getimage minus] set minusarm [tix getimage minusarm] if {![$data(w:hlist) info exists $ent]} {return} switch -exact -- $event { { if {![$data(w:hlist) indicator exists $ent]} {return} $data(w:hlist) indicator config $ent \ -image [expr {$type eq "open" ? $plusarm : $minusarm}] } { if {![$data(w:hlist) indicator exists $ent]} {return} $data(w:hlist) indicator config $ent \ -image [expr {$type eq "open" ? $plus : $minus}] } { upvar bind bind tixCallMethod $w Activate $ent $type set bind(%V) $ent tixVTree:BrowseCmdHook $w } } } proc tixVTree:GetType {w ent} { upvar #0 $w data if {![$data(w:hlist) indicator exists $ent]} { return none } set img [$data(w:hlist) indicator cget $ent -image] if {$img eq [tix getimage plus] || $img eq [tix getimage plusarm]} { return open } return close } proc tixVTree:Activate {w ent type} { upvar #0 $w data if {$type eq "open"} { tixCallMethod $w OpenCmd $ent $data(w:hlist) indicator config $ent -image [tix getimage minus] } else { tixCallMethod $w CloseCmd $ent $data(w:hlist) indicator config $ent -image [tix getimage plus] } } proc tixVTree:CommandHook {w args} { upvar #0 $w data upvar bind bind tixCallMethod $w Command bind } proc tixVTree:BrowseCmdHook {w args} { upvar #0 $w data upvar bind bind tixCallMethod $w BrowseCmd bind } proc tixVTree:SetMode {w ent mode} { upvar #0 $w data switch -exact -- $mode { open { $data(w:hlist) indicator create $ent -itemtype image \ -image [tix getimage plus] -style $data(indStyle) } close { $data(w:hlist) indicator create $ent -itemtype image \ -image [tix getimage minus] -style $data(indStyle) } none { if {[$data(w:hlist) indicator exist $ent]} { $data(w:hlist) indicator delete $ent } } } } #---------------------------------------------------------------------- # # Virtual Methods # #---------------------------------------------------------------------- proc tixVTree:OpenCmd {w ent} { upvar #0 $w data # The default action foreach kid [$data(w:hlist) info children $ent] { $data(w:hlist) show entry $kid } } proc tixVTree:CloseCmd {w ent} { upvar #0 $w data # The default action foreach kid [$data(w:hlist) info children $ent] { $data(w:hlist) hide entry $kid } } proc tixVTree:Command {w B} { upvar #0 $w data upvar $B bind if {$data(-ignoreinvoke)} { return } set ent [tixEvent flag V] if {[$data(w:hlist) indicator exist $ent]} { tixVTree:Activate $w $ent [tixVTree:GetType $w $ent] } } proc tixVTree:BrowseCmd {w B} { } #---------------------------------------------------------------------- # # Widget commands # #---------------------------------------------------------------------- Tix8.4.3/FileCbx.tcl000064400000004663150252220140007725 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: FileCbx.tcl,v 1.5 2004/03/28 02:44:57 hobbs Exp $ # # tixFileCombobox -- # # A combobox widget for entering file names, directory names, file # patterns, etc. # # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixFileComboBox displays and accepts the DOS pathnames only. It doesn't # recognize UNC file names or Tix VPATHS. # tixWidgetClass tixFileComboBox { -classname TixFileComboBox -superclass tixPrimitive -method { invoke } -flag { -command -defaultfile -directory -text } -forcecall { -directory } -configspec { {-defaultfile defaultFile DefaultFile ""} {-directory directory Directory ""} {-command command Command ""} {-text text Text ""} } -default { } } proc tixFileComboBox:InitWidgetRec {w} { upvar #0 $w data tixChainMethod $w InitWidgetRec if {$data(-directory) eq ""} { set data(-directory) [pwd] } } proc tixFileComboBox:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget set data(w:combo) [tixComboBox $w.combo -editable true -dropdown true] pack $data(w:combo) -expand yes -fill both } proc tixFileComboBox:SetBindings {w} { upvar #0 $w data tixChainMethod $w SetBindings $data(w:combo) config -command [list tixFileComboBox:OnComboCmd $w] } proc tixFileComboBox:OnComboCmd {w args} { upvar #0 $w data set text [string trim [tixEvent value]] set path [tixFSJoin $data(-directory) $text] if {[file isdirectory $path]} { set path [tixFSJoin $path $data(-defaultfile)] set tail $data(-defaultfile) } else { set tail [file tail $path] } set norm [tixFSNormalize $path] tixSetSilent $data(w:combo) $norm if {[llength $data(-command)]} { set bind(specs) {%V} set bind(%V) [list $norm $path $tail ""] tixEvalCmdBinding $w $data(-command) bind $bind(%V) } } proc tixFileComboBox:config-text {w val} { upvar #0 $w data tixSetSilent $data(w:combo) $val } proc tixFileComboBox:config-directory {w val} { upvar #0 $w data set data(-directory) [tixFSNormalize $val] return $data(-directory) } proc tixFileComboBox:invoke {w} { upvar #0 $w data $data(w:combo) invoke } Tix8.4.3/HList.tcl000064400000043344150252220140007433 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: HList.tcl,v 1.6 2004/03/28 02:44:57 hobbs Exp $ # # HList.tcl -- # # This file defines the default bindings for Tix Hierarchical Listbox # widgets. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # global tkPriv if {![llength [info globals tkPriv]]} { tk::unsupported::ExposePrivateVariable tkPriv } #-------------------------------------------------------------------------- # tkPriv elements used in this file: # # afterId - Token returned by "after" for autoscanning. # fakeRelease - Cancel the ButtonRelease-1 after the user double click #-------------------------------------------------------------------------- # foreach fun {tkCancelRepeat} { if {![llength [info commands $fun]]} { tk::unsupported::ExposePrivateCommand $fun } } unset fun proc tixHListBind {} { tixBind TixHList { tixHList:Button-1 %W %x %y "" } tixBind TixHList { tixHList:Button-1 %W %x %y s } tixBind TixHList { tixHList:Button-1 %W %x %y c } tixBind TixHList { tixHList:ButtonRelease-1 %W %x %y } tixBind TixHList { tixHList:Double-1 %W %x %y } tixBind TixHList { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixHList:B1-Motion %W %x %y } tixBind TixHList { set tkPriv(x) %x set tkPriv(y) %y set tkPriv(X) %X set tkPriv(Y) %Y tixHList:B1-Leave %W } tixBind TixHList { tixHList:B1-Enter %W %x %y } # Keyboard bindings # tixBind TixHList { tixHList:UpDown %W prev "" } tixBind TixHList { tixHList:UpDown %W next "" } tixBind TixHList { tixHList:UpDown %W prev s } tixBind TixHList { tixHList:UpDown %W next s } tixBind TixHList { tixHList:LeftRight %W left } tixBind TixHList { tixHList:LeftRight %W right } tixBind TixHList { %W yview scroll -1 pages } tixBind TixHList { %W yview scroll 1 pages } tixBind TixHList { tixHList:Keyboard-Activate %W } tixBind TixHList { tixHList:Keyboard-Browse %W } # Under Windows moves up, clears the sel and sets the selection # Under Windows moves up, leaves the selection, and sets the anchor tixBind TixHList { set w %W $w yview moveto 0; # $w xview moveto 0 set sel [lindex [$w info children] 0] # should be first not disabled $w anchor set $sel tixHList:Keyboard-Browse $w } tixBind TixHList { set w %W $w yview moveto 1; # $w xview moveto 0 $w select clear # should be last not disabled set sel [lindex [$w info children .] end] while {[set next [$w info next $sel]] ne "" && \ ![$w info hidden $next] && \ [llength [set kids [$w info child $sel]]]} { set sel [lindex $kids end] } $w anchor set $sel tixHList:Keyboard-Browse $w } tixBind TixHList { set w %W $w yview moveto 0; # $w xview moveto 0 set sel [lindex [$w info children] 0] # should be first not disabled $w anchor set $sel } tixBind TixHList { set w %W $w yview moveto 1; # $w xview moveto 0 # should be last not disabled set sel [lindex [$w info children .] end] while {[set next [$w info next $sel]] ne "" && \ ![$w info hidden $next] && \ [llength [set kids [$w info child $sel]]]} { set sel [lindex $kids end] } $w anchor set $sel } # # Don't use tixBind because %A causes Tk 8.3.2 to crash # bind TixHList { %W yview scroll [expr {- (%D / 120) * 2}] units } } #---------------------------------------------------------------------- # # # Key bindings # # #---------------------------------------------------------------------- proc tixHList:Keyboard-Activate {w} { if {[tixHList:GetState $w] != 0} { return } set ent [$w info anchor] if {$ent eq ""} { return } if {[$w cget -selectmode] eq "single"} { $w select clear } $w select set $ent set command [$w cget -command] if {$command ne ""} { set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $command bind $ent } } proc tixHList:Keyboard-Browse {w} { if {[tixHList:GetState $w] != 0} { return } set ent [$w info anchor] if {$ent eq ""} { return } if {[$w cget -selectmode] eq "single"} { $w select clear } $w select set $ent tixHList:Browse $w $ent } proc tixHList:LeftRight {w spec} { catch { uplevel #0 unset $w:priv:shiftanchor } if {[tixHList:GetState $w] != 0} { return } set anchor [$w info anchor] if {$anchor eq ""} { set anchor [lindex [$w info children] 0] } if {$anchor eq ""} { return } set ent $anchor while {1} { set e $ent if {$spec eq "left"} { set ent [$w info parent $e] if {$ent eq "" || [$w entrycget $ent -state] eq "disabled"} { set ent [$w info prev $e] } } else { set ent [lindex [$w info children $e] 0] if {$ent eq "" || [$w entrycget $ent -state] eq "disabled"} { set ent [$w info next $e] } } if {$ent eq ""} { break } if {[$w entrycget $ent -state] eq "disabled"} { continue } if {[$w info hidden $ent]} { continue } break } if {$ent eq ""} { return } $w anchor set $ent $w see $ent if {[$w cget -selectmode] ne "single"} { $w select clear $w selection set $ent tixHList:Browse $w $ent } } proc tixHList:UpDown {w spec mod} { if {[tixHList:GetState $w] ne 0} { return } set anchor [$w info anchor] set done 0 if {$anchor eq ""} { set anchor [lindex [$w info children] 0] if {$anchor eq ""} { return } if {[$w entrycget $anchor -state] ne "disabled"} { # That's a good anchor set done 1 } else { # We search for the first non-disabled entry (downward) set spec next } } set ent $anchor # mike - bulletproofing if {![$w info exists $ent]} {return} # Find the prev/next non-disabled entry # while {!$done} { set ent [$w info $spec $ent] if {$ent eq ""} { break } if {[$w entrycget $ent -state] eq "disabled"} { continue } if {[$w info hidden $ent]} { continue } break } if {$ent eq ""} { return } else { $w see $ent $w anchor set $ent set selMode [$w cget -selectmode] if {$mod eq "s" && ($selMode eq "extended" || $selMode eq "multiple")} { global $w:priv:shiftanchor if {![info exists $w:priv:shiftanchor]} { set $w:priv:shiftanchor $anchor } $w selection clear # mike - bulletproofing if {![catch {$w selection set $ent [set $w:priv:shiftanchor]}]} { tixHList:Browse $w $ent } } else { catch { uplevel #0 unset $w:priv:shiftanchor } if {[$w cget -selectmode] ne "single"} { $w select clear $w selection set $ent tixHList:Browse $w $ent } } } } #---------------------------------------------------------------------- # # # Mouse bindings # # #---------------------------------------------------------------------- proc tixHList:Button-1 {w x y mod} { # if {[$w cget -state] eq "disabled"} { # return # } if {[$w cget -takefocus]} { focus $w } set selMode [$w cget -selectmode] case [tixHList:GetState $w] { {0} { if {$mod eq "s" && $selMode eq "multiple"} { tixHList:GoState 28 $w $x $y return } if {$mod eq "s" && $selMode eq "extended"} { tixHList:GoState 28 $w $x $y return } if {$mod eq "c" && $selMode eq "extended"} { tixHList:GoState 33 $w $x $y return } tixHList:GoState 1 $w $x $y } } } proc tixHList:ButtonRelease-1 {w x y} { case [tixHList:GetState $w] { {5 16} { tixHList:GoState 6 $w $x $y } {15} { tixHList:GoState 17 $w $x $y } {10 11} { tixHList:GoState 18 $w } {13 20} { tixHList:GoState 14 $w $x $y } {21} { tixHList:GoState 22 $w } {24} { tixHList:GoState 25 $w } {26 28 33} { tixHList:GoState 27 $w } {30} { tixHList:GoState 32 $w } } } proc tixHList:Double-1 {w x y} { case [tixHList:GetState $w] { {0} { tixHList:GoState 23 $w $x $y } } } proc tixHList:B1-Motion {w x y} { case [tixHList:GetState $w] { {1} { tixHList:GoState 5 $w $x $y } {5 16} { tixHList:GoState 5 $w $x $y } {13 20 21} { tixHList:GoState 20 $w $x $y } {24 26 28} { tixHList:GoState 26 $w $x $y } } } proc tixHList:B1-Leave {w} { case [tixHList:GetState $w] { {5} { tixHList:GoState 10 $w } {26} { tixHList:GoState 29 $w } } } proc tixHList:B1-Enter {w x y} { case [tixHList:GetState $w] { {10 11} { tixHList:GoState 12 $w $x $y } {29 30} { tixHList:GoState 31 $w $x $y } } } proc tixHList:AutoScan {w} { case [tixHList:GetState $w] { {29 30} { tixHList:GoState 30 $w } } } #---------------------------------------------------------------------- # # STATE MANIPULATION # # #---------------------------------------------------------------------- proc tixHList:GetState {w} { global $w:priv:state if {![info exists $w:priv:state]} { set $w:priv:state 0 } return [set $w:priv:state] } proc tixHList:SetState {w n} { global $w:priv:state set $w:priv:state $n } proc tixHList:GoState {n w args} { # puts "going from [tixHList:GetState $w] --> $n" tixHList:SetState $w $n eval tixHList:GoState-$n $w $args } #---------------------------------------------------------------------- # States #---------------------------------------------------------------------- proc tixHList:GoState-0 {w} { } proc tixHList:GoState-1 {w x y} { set oldEnt [$w info anchor] set ent [tixHList:SetAnchor $w $x $y 1] if {$ent eq ""} { tixHList:GoState 0 $w return } set info [$w info item $x $y] if {[lindex $info 1] eq "indicator"} { tixHList:GoState 13 $w $ent $oldEnt } else { if {[$w entrycget $ent -state] eq "disabled"} { tixHList:GoState 0 $w } else { case [$w cget -selectmode] { {single browse} { tixHList:GoState 16 $w $ent } default { tixHList:GoState 24 $w $ent } } } } } proc tixHList:GoState-5 {w x y} { set oldEnt [$w info anchor] set ent [tixHList:SetAnchor $w $x $y] if {$ent eq "" || $oldEnt eq $ent} { return } if {[$w cget -selectmode] ne "single"} { tixHList:Select $w $ent tixHList:Browse $w $ent } } proc tixHList:GoState-6 {w x y} { set ent [tixHList:SetAnchor $w $x $y] if {$ent eq ""} { tixHList:GoState 0 $w return } tixHList:Select $w $ent tixHList:Browse $w $ent tixHList:GoState 0 $w } proc tixHList:GoState-10 {w} { tixHList:StartScan $w } proc tixHList:GoState-11 {w} { global tkPriv tixHList:DoScan $w set oldEnt [$w info anchor] set ent [tixHList:SetAnchor $w $tkPriv(x) $tkPriv(y)] if {$ent eq "" || $oldEnt eq $ent} { return } if {[$w cget -selectmode] ne "single"} { tixHList:Select $w $ent tixHList:Browse $w $ent } } proc tixHList:GoState-12 {w x y} { tkCancelRepeat tixHList:GoState 5 $w $x $y } proc tixHList:GoState-13 {w ent oldEnt} { global tkPriv set tkPriv(tix,indicator) $ent set tkPriv(tix,oldEnt) $oldEnt tixHList:CallIndicatorCmd $w $ent } proc tixHList:GoState-14 {w x y} { global tkPriv if {[tixHList:InsideArmedIndicator $w $x $y]} { $w anchor set $tkPriv(tix,indicator) $w select clear $w select set $tkPriv(tix,indicator) tixHList:CallIndicatorCmd $w $tkPriv(tix,indicator) } else { tixHList:CallIndicatorCmd $w $tkPriv(tix,indicator) } unset tkPriv(tix,indicator) tixHList:GoState 0 $w } proc tixHList:GoState-16 {w ent} { if {$ent ne "" && [$w cget -selectmode] ne "single"} { tixHList:Select $w $ent tixHList:Browse $w $ent } } proc tixHList:GoState-18 {w} { global tkPriv tkCancelRepeat tixHList:GoState 6 $w $tkPriv(x) $tkPriv(y) } proc tixHList:GoState-20 {w x y} { global tkPriv if {![tixHList:InsideArmedIndicator $w $x $y]} { tixHList:GoState 21 $w $x $y } else { tixHList:CallIndicatorCmd $w $tkPriv(tix,indicator) } } proc tixHList:GoState-21 {w x y} { global tkPriv if {[tixHList:InsideArmedIndicator $w $x $y]} { tixHList:GoState 20 $w $x $y } else { tixHList:CallIndicatorCmd $w $tkPriv(tix,indicator) } } proc tixHList:GoState-22 {w} { global tkPriv if {$tkPriv(tix,oldEnt) ne ""} { $w anchor set $tkPriv(tix,oldEnt) } else { $w anchor clear } tixHList:GoState 0 $w } proc tixHList:GoState-23 {w x y} { set ent [tixHList:GetNearest $w $y] if {$ent ne ""} { set info [$w info item $x $y] if {[lindex $info 1] eq "indicator"} { tixHList:CallIndicatorCmd $w $ent } else { $w select set $ent set command [$w cget -command] if {$command ne ""} { set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $command bind $ent } } } tixHList:GoState 0 $w } proc tixHList:GoState-24 {w ent} { if {$ent ne ""} { tixHList:Select $w $ent tixHList:Browse $w $ent } } proc tixHList:GoState-25 {w} { set ent [$w info anchor] if {$ent ne ""} { tixHList:Select $w $ent tixHList:Browse $w $ent } tixHList:GoState 0 $w } proc tixHList:GoState-26 {w x y} { set anchor [$w info anchor] if {$anchor eq ""} { set first [lindex [$w info children ""] 0] if {$first ne ""} { $w anchor set $first set anchor $first } else { return } } set ent [tixHList:GetNearest $w $y 1] if {$ent ne ""} { $w selection clear $w selection set $anchor $ent tixHList:Browse $w $ent } } proc tixHList:GoState-27 {w} { set ent [$w info anchor] if {$ent ne ""} { tixHList:Browse $w $ent } tixHList:GoState 0 $w } proc tixHList:GoState-28 {w x y} { set anchor [$w info anchor] if {$anchor eq ""} { set first [lindex [$w info children ""] 0] if {$first ne ""} { $w anchor set $first set anchor $first } else { return } } set ent [tixHList:GetNearest $w $y 1] if {$ent ne ""} { $w selection clear $w selection set $anchor $ent tixHList:Browse $w $ent } } proc tixHList:GoState-29 {w} { tixHList:StartScan $w } proc tixHList:GoState-30 {w} { global tkPriv tixHList:DoScan $w set anchor [$w info anchor] if {$anchor eq ""} { set first [lindex [$w info children ""] 0] if {$first ne ""} { $w anchor set $first set anchor $first } else { return } } set ent [tixHList:GetNearest $w $tkPriv(y) 1] if {$ent ne ""} { $w selection clear $w selection set $anchor $ent tixHList:Browse $w $ent } } proc tixHList:GoState-31 {w x y} { tkCancelRepeat tixHList:GoState 26 $w $x $y } proc tixHList:GoState-32 {w} { tkCancelRepeat tixHList:GoState 0 $w } proc tixHList:GoState-33 {w x y} { set ent [tixHList:GetNearest $w $y] if {$ent ne ""} { $w anchor set $ent if {[lsearch [$w selection get] $ent] > -1} { # This was missing - mike $w selection clear $ent } else { $w selection set $ent } tixHList:Browse $w $ent } } #---------------------------------------------------------------------- # # Common actions # #---------------------------------------------------------------------- proc tixHList:GetNearest {w y {disableOK 0}} { set ent [$w nearest $y] if {$ent ne ""} { if {!$disableOK && [$w entrycget $ent -state] eq "disabled"} { return "" } } return $ent } proc tixHList:SetAnchor {w x y {disableOK 0}} { set ent [tixHList:GetNearest $w $y $disableOK] if {$ent ne ""} { if {[$w entrycget $ent -state] ne "disabled"} { $w anchor set $ent # mike This is non-standard and has a wierd effect: too much motion # $w see $ent return $ent } elseif $disableOK { return $ent } } return "" } proc tixHList:Select {w ent} { if {[$w info selection] ne $ent} { $w selection clear $w select set $ent } } #---------------------------------------------------------------------- # # Auto scan # #---------------------------------------------------------------------- proc tixHList:StartScan {w} { global tkPriv set tkPriv(afterId) [after 50 tixHList:AutoScan $w] } proc tixHList:DoScan {w} { global tkPriv set x $tkPriv(x) set y $tkPriv(y) set X $tkPriv(X) set Y $tkPriv(Y) if {$y >= [winfo height $w]} { $w yview scroll 1 units } elseif {$y < 0} { $w yview scroll -1 units } elseif {$x >= [winfo width $w]} { $w xview scroll 2 units } elseif {$x < 0} { $w xview scroll -2 units } else { return } set tkPriv(afterId) [after 50 tixHList:AutoScan $w] } #---------------------------------------------------------------------- # # Indicator handling # #---------------------------------------------------------------------- proc tixHList:CallIndicatorCmd {w event ent} { set cmd [$w cget -indicatorcmd] if {$cmd ne ""} { set bind(type) $event set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $cmd bind $ent } } proc tixHList:InsideArmedIndicator {w x y} { global tkPriv set ent [tixHList:GetNearest $w $y 1] if {$ent eq "" || $ent ne $tkPriv(tix,indicator)} { return 0 } set info [$w info item $x $y] if {[lindex $info 1] eq "indicator"} { return 1 } else { return 0 } } proc tixHList:Browse {w ent} { set browsecmd [$w cget -browsecmd] if {$browsecmd ne ""} { set bind(specs) {%V} set bind(%V) $ent tixEvalCmdBinding $w $browsecmd bind $ent } } Tix8.4.3/Balloon.tcl000064400000031745150252220140010000 0ustar00# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: Balloon.tcl,v 1.7 2008/02/27 22:17:28 hobbs Exp $ # # Balloon.tcl -- # # The help widget. It provides both "balloon" type of help # message and "status bar" type of help message. You can use # this widget to indicate the function of the widgets inside # your application. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # tixWidgetClass tixBalloon { -classname TixBalloon -superclass tixShell -method { bind post unbind } -flag { -installcolormap -initwait -state -statusbar -cursor } -configspec { {-installcolormap installColormap InstallColormap false} {-initwait initWait InitWait 1000} {-state state State both} {-statusbar statusBar StatusBar ""} {-cursor cursor Cursor {}} } -default { {*background #ffff60} {*foreground black} {*borderWidth 0} {.borderWidth 1} {.background black} {*Label.anchor w} {*Label.justify left} } } # static seem to be -installcolormap -initwait -statusbar -cursor # Class Record # global tixBalloon set tixBalloon(bals) "" proc tixBalloon:InitWidgetRec {w} { upvar #0 $w data global tixBalloon tixChainMethod $w InitWidgetRec set data(isActive) 0 set data(client) "" lappend tixBalloon(bals) $w } proc tixBalloon:ConstructWidget {w} { upvar #0 $w data tixChainMethod $w ConstructWidget if {[tk windowingsystem] eq "aqua"} { ::tk::unsupported::MacWindowStyle style $w help none } else { wm overrideredirect $w 1 } catch {wm attributes $w -topmost 1} wm positionfrom $w program wm withdraw $w # Frame 1 : arrow frame $w.f1 -bd 0 set data(w:label) [label $w.f1.lab -bd 0 -relief flat \ -bitmap [tix getbitmap balarrow]] pack $data(w:label) -side left -padx 1 -pady 1 # Frame 2 : Message frame $w.f2 -bd 0 set data(w:message) [label $w.f2.message -padx 0 -pady 0 -bd 0] pack $data(w:message) -side left -expand yes -fill both -padx 10 -pady 1 # Pack all pack $w.f1 -fill both pack $w.f2 -fill both # This is an event tag used by the clients # bind TixBal$w [list tixBalloon:ClientDestroy $w %W] } proc tixBalloon:Destructor {w} { global tixBalloon set bals "" foreach b $tixBalloon(bals) { if {$w != $b} { lappend bals $b } } set tixBalloon(bals) $bals tixChainMethod $w Destructor } #---------------------------------------------------------------------- # Config: #---------------------------------------------------------------------- proc tixBalloon:config-state {w value} { upvar #0 $w data set re {^(none|balloon|status|both)$} if {![regexp -- $re $value]} { error "invalid value $value, must be none, balloon, status, or both" } } #---------------------------------------------------------------------- # "RAW" event bindings: #---------------------------------------------------------------------- bind all "+tixBalloon_XXMotion %X %Y 1" bind all "+tixBalloon_XXMotion %X %Y 2" bind all "+tixBalloon_XXMotion %X %Y 3" bind all "+tixBalloon_XXMotion %X %Y 4" bind all "+tixBalloon_XXMotion %X %Y 5" bind all "+tixBalloon_XXMotion %X %Y 0" # Should %b be 0? %b is illegal bind all "+tixBalloon_XXMotion %X %Y 0" bind all