/***************************************************************************************/ /* */ /* SCS editor Version 2 */ /* File : ToolTip.pkg */ /* Version : 27 juillet 2000 */ /* Tool-Tips package */ /* */ /***************************************************************************************/ struct EmToolTip = [ EmTOOLTIPchnl: Chn,/* Canal de création et destruction des tooltips */ EmTOOLTIPfatherCont : ObjContainer, /* conteneur du père du tooltip */ EmTOOLTIPcont : ObjContainer, /* conteneur du tooltip */ EmTOOLTIPfont: ObjFont,/* Fonte des tooltips */ EmTOOLTIPfgColors: [I I I I],/* font and selection colors */ EmTOOLTIPbgColor: I,/* background color */ EmTOOLTIPbgMotif: AlphaBitmap,/* bitmap for the tooltips background */ EmTOOLTIPbgCoord: [I I I I], /* coordinates for bg cut */ EmTOOLTIPactive: I, /* 0 = tooltip not active / !0 = tooltip active */ EmTOOLTIPtext: S, /* tooltip text */ EmTOOLTIPdynText: fun [] S /* returns the tooltip text */ ] mkEmToolTip;; fun Em_TOOLTIP_Create (chan, fatherCont, font, fgColors, bgColors, bgBitmap, bgCoord, text, dyntext) = mkEmToolTip [ chan fatherCont nil font fgColors bgColors bgBitmap bgCoord 1 text dyntext ] ;; fun Em_reflexShowToolTip (node, toolTip, text, posx, posy) = if toolTip.EmTOOLTIPactive then let if toolTip.EmTOOLTIPdynText==nil then toolTip.EmTOOLTIPtext else exec toolTip.EmTOOLTIPdynText with [] -> text in { /* Position & Size */ let realGETstringSize toolTip.EmTOOLTIPfont text -> [w h] in let toolTip.EmTOOLTIPbgCoord -> [p1x p1y p2x p2y] in let ( if toolTip.EmTOOLTIPbgMotif!=nil then _GETalphaBitmapSize toolTip.EmTOOLTIPbgMotif else [p2x+3 p2y+3] ) -> [mw mh] in let [p1x mw-p2x p1y mh-p2y] -> [eg ed eh eb] in let _GETscreenSize -> [sw sh] in let if (posx+w+p1x+10)>sw then posx-w-eg-5 else posx+10 -> x in let if (posy+h+p1y+10)>sh then posy-h-eh-10 else posy+10 -> y in ( /*.................*/ set toolTip.EmTOOLTIPcont = _CRcontainerFromObjCont toolTip.EmTOOLTIPchnl toolTip.EmTOOLTIPfatherCont x y w+eg+ed h+eh+eb+1 CO_NOCAPTION|CO_NOBORDER toolTip.EmTOOLTIPbgColor nil; /* create background */ if toolTip.EmTOOLTIPbgMotif!=nil then let _CRbitmap toolTip.EmTOOLTIPchnl w+eg+ed h+eh+eb+1 -> bmp in ( let [0 0]::[eg eg]::[p2x eg+w]::[mw-1 w+eg+ed-1]::nil -> xCoord in let [0 0]::[eh eh]::[p2x eh+h]::[mw-1 h+eh+eb-1]::nil -> yCoord in _STRETCHalphaBitmap bmp toolTip.EmTOOLTIPbgMotif xCoord yCoord; let _CRalphaBitmap toolTip.EmTOOLTIPchnl bmp nil 0 0 -> abmp in _CRcompBitmap toolTip.EmTOOLTIPchnl toolTip.EmTOOLTIPcont nil [0 0] OBJ_ENABLE|OBJ_VISIBLE 0 abmp 0 0 w+eg+ed h+eh+eb; _DSbitmap bmp ) else nil; /* write text */ _CRcompText toolTip.EmTOOLTIPchnl toolTip.EmTOOLTIPcont nil [eg eh] OBJ_ENABLE|OBJ_VISIBLE|CT_LEFT 0 w h+1 text toolTip.EmTOOLTIPfont toolTip.EmTOOLTIPfgColors nil nil nil; /* end */ _SETfocusContainer toolTip.EmTOOLTIPfatherCont; _PAINTcontainer toolTip.EmTOOLTIPcont; ) } else nil ;; fun Em_reflexHideTip (node, toolTip, text) = _DScontainer toolTip.EmTOOLTIPcont;; fun _CR_TOOLTIP (chan, cont, fatherCont, font, fgColors, bgColors, bgBitmap, bgCoord, text, dyntext, timeout) = let Em_TOOLTIP_Create chan cont font if fgColors == nil then [0x000000 0x000000 0x000000 0x000000] else fgColors if bgColors == nil then 0xffffdf else bgColors bgBitmap if bgCoord == nil then [0 0 0 0] else bgCoord text dyntext -> tt in { _CRtoolTip fatherCont timeout text @Em_reflexShowToolTip tt @Em_reflexHideTip tt; tt } ;; fun TOOLTIP_UnLink (pere) = _DStoolTip pere;;