dgToolTip Snippet
Bob Sneidar
bobsneidar at iotecdigital.com
Wed Jul 12 18:04:16 EDT 2017
Hi all.
If anyone is interested, I have a working version of a datagrid tooltip handler. It requires the arrayToText handler as written but that can be replaced by another function of your choosing that takes an array and returns some kind of text representation of it. (printKeys comes to mind but I'm not sure it would work well for a tooltip).
Put this code in your datagrid script:
--------
on mouseEnter
put the long id of the target into tTarget
-- replace the following key list with whatever datagrid column names you want in the tooltip
-- if you exclude tKeyList it will include every column of the datagrid
-- if you hold down the shift key when entering the datagrid it will also include every column of the datagrid
put "customername,industry,salesperson,contactname,contactphone,contactemail" into tKeyList
dgToolTip tTarget, tKeyList
end mouseEnter
on mouseLeave
try
set the tooltip of tTarget to empty
end try
end mouseLeave
--------
Put this code in a backscript somewhere:
--------
on dgToolTip tTarget, tKeyList
put the name of tTarget into tTargetName
if tTargetName contains "HeaderLabel" or the first word of tTargetName is not "field" then
exit dgToolTip
end if
replace quote with empty in tTargetName
put the last word of tTargetName into tLine
put the dgDataOfLine [tLine] of tTarget into aLineData
if tKeyList is empty or the shiftKey is down then
put the keys of aLineData into tKeyList
sort lines of tKeyList ascending
replace cr with comma in tKeyList
end if
repeat for each item tKey in tKeyList
add 1 to tCounter
put aLineData [tKey] into aRecordData [tCounter & ". " & tKey]
end repeat
put arrayToText(aRecordData, "record") into tText
sort lines of tText numeric ascending by word 1 of each
set the tooltip of tTarget to tText
end dgToolTip
function arrayToText aArrayData, pFormat, pStripRecordKeys
if aArrayData is not an array then
put "ERROR: Data passed is not an array!" into theValue
return theValue
end if
if pStripRecordKeys is not in "true|false" then put false into pStripRecordKeys
-- sort tArrayKeys ascending
-- may be an array of values
put the keys of aArrayData into tArrayKeys
sort lines of tArrayKeys numeric ascending
put line 1 of tArrayKeys is 0 into tHasHeader
-- convert single array to numeric array of arrays
if line 1 of tArrayKeys is not a number then
put aArrayData into aTempArray [1]
put aTempArray into aArrayData
put the keys of aArrayData into tArrayKeys
end if
switch pFormat
case "record"
repeat for each line tArrayKey in tArrayKeys
put aArrayData [tArrayKey] into aArrayRecord
put the keys of aArrayRecord into tColumnKeys
repeat for each line tColumnKey in tColumnKeys
put tColumnKey & ": " & aArrayRecord [tColumnKey] & cr after tValue
end repeat
end repeat
break
case "table"
-- table header
if not tHasHeader then put cr into tValue
repeat for each line tArrayKey in tArrayKeys
add 1 to tCount
put aArrayData [tArrayKey] into aArrayRecord
put the keys of aArrayRecord into tColumnKeys
sort lines of tColumnKeys numeric ascending
repeat for each line tColumnKey in tColumnKeys
if pStripRecordKeys and (char 1 of tColumnKey is "@") then next repeat
if tCount = 1 and not tHasHeader then put tColumnKey & tab after line 1 of tValue
put aArrayRecord [tColumnKey] & tab after tValue
end repeat
put cr into last char of tValue
end repeat
break
end switch
return tValue
end arrayToText
--------
More information about the use-livecode
mailing list