Thanks Brian this conversion to pPath to an array of keys hit the nail on the head.
So, for anyone else looking to show the (full non-truncated) content of a node in a read-only Tree widget in a tooltip, by clicking the actionInspect icon, is… on actionInspect pPath put the arrayData of widget "Tree" into aContent -- get the Tree's data split pPath by comma -- convert pPath from list to an array of keys set the tooltip of widget "Tree" to aContent[pPath] -- the current Tree node's content end actionInspect Thanks too Jaque, Paul, Bob & Henry for playing! :-) Best, Keith > On 24 Apr 2021, at 14:31, Brian Milby via use-livecode > <use-livecode@lists.runrev.com> wrote: > > I guess I should reply to myself and say why this works. At some point the > feature was added that you could use an array as an index into an array. > The format is a one based ordered array of keys. So tPath[1] is the first > level key, tPath[2] is the second level, etc. If you wanted to get > tTree["one"]["two"] then tPath[1]="one" and tPath[2]="two" so you could > just get tTree[tPath]. Since comma is the default path delimiter (which > can be changed), you can use split to turn a path list into a path array. > > On Sat, Apr 24, 2021 at 9:26 AM Brian Milby <br...@milby7.com> wrote: > >> Easiest way is to use split... >> >> Given a tree widget this will take a path from field 1 and put the value >> at that path in field 2 >> >> on mouseUp pMouseButton >> local tTree, tLoc >> put the arrayData of widget 1 into tTree >> put field 1 into tLoc >> split tLoc by comma >> put tTree[tLoc] into field 2 >> end mouseUp >> >> Thanks, >> Brian >> >> On Sat, Apr 24, 2021 at 9:06 AM Paul Dupuis via use-livecode < >> use-livecode@lists.runrev.com> wrote: >> >>> I have only partially been following this thread, but if you need to >>> find the array 'content' in an arbitrary nested array from a comma >>> delimited path of array keys, recursion is the way to do it: >>> >>> function fetchArrayContentFromPath pArray,pPath >>> -- pArray is an array >>> -- pPath is a comma delimited 'path' of array keys to the desired >>> content >>> local tKey >>> if pArray is not an array then >>> return pArray -- I have reached the content, so return that content >>> else if pPath is empty then >>> return pArray -- should not happen in a tree widget, but this is if >>> the path ends in an array instead of the content of an array element >>> else >>> put item 1 of pPath into tKey -- get the key of element in the >>> currnet path >>> delete item 1 of pPath -- remove it from the current path, >>> so the path is the next set of key(s) >>> return fetchArrayContentFromPath(pArray[tKey],pPath) - recursively >>> fetch the remainig keys from the currnet array element >>> end if >>> end fetchArrayContentFromPath >>> >>> It will not matter is the 'path' is key1,key1 or >>> key1,key2,key3,key4,key5,key6,key7, or whatever. >>> >>> >>> On 4/24/2021 7:10 AM, Keith Clarke via use-livecode wrote: >>>> Hi folks, >>>> Inspired by Jaque’s (working - thank you!) response to my question >>> “Show Tree widget row contents on hover” I’ve isolated the final piece of >>> that puzzle that leaves me baffled. >>>> >>>> Specifically, can LiveCode accept a dynamically built key for a nested >>> multi-dimensional array? Copy the button script recipe below to see the >>> problem. >>>> >>>> Perhaps the LC array experts here can help explain why Jaque’s >>> hard-wired key definition works but my attempts to replicate this syntax >>> via scripting to support variable depth of arrays get ignored? Is it my >>> syntax or just the way arrays work in LC…? >>>> on mouseUp pButtonNumber >>>> >>>> # Create a nested array >>>> >>>> put "Content" into tArray["key1"]["key2"]["key3"]["key4"] >>>> >>>> >>>> # Replicate the path response from the Tree widget actionInspect >>> function >>>> >>>> put "key1,key2,key3,key4" into pPath >>>> >>>> >>>> # Jaque's 'hard-wired' array key recipe works! >>>> >>>> answer tArray[item 1 of pPath][item 2 of pPath][item 3 of pPath][item 4 >>> of pPath] --returns 'Content' >>>> >>>> >>>> # Replicate Jaque's syntax dynamically >>>> >>>> put the number of items in pPath into tKeyCount >>>> >>>> put empty into iNum >>>> >>>> repeat for each item i in pPath >>>> >>>> add 1 to iNum >>>> >>>> # Try building the full key string >>>> >>>> put "[" & item iNum of pPath & "]"after tKey1 >>>> >>>> >>>> # Try building keys string to 'embed' into the regular array key syntax >>>> >>>> put item iNum of pPath after tKey2 >>>> >>>> if iNum < tKeyCount then put "][" after tKey2 >>>> >>>> >>>> # Try building by each key >>>> >>>> if i is not empty then put "[" & item iNum of pPath & "]" after tArray2 >>>> >>>> end repeat >>>> >>>> >>>> # Dynamic tKey1 results >>>> >>>> answer tKey1 -- returns '["key1"]["key2"]["key3"]["key4"]' ...seems >>> 'correct' >>>> >>>> answer tArray & tKey1 -- returns '["key1"]["key2"]["key3"]["key4"]' >>> ...dynamic key definition is not appended to array(?) >>>> >>>> >>>> # Dynamic tKey2 results >>>> >>>> answer tKey2 -- returns '"key1"]["key2"]["key3"]["key4"' >>>> >>>> answer tArray[tKey2] -- returns null ...dynamic key definition is not >>> understood (as first level key)? >>>> >>>> >>>> answer tArray2 -- returns '["key1"]["key2"]["key3"]["key4"]' ...dynamic >>> key definition is not appended to array(?) >>>> >>>> end mouseUp >>>> >>>> >>>> Best, >>>> Keith >>>> >>>> _______________________________________________ >>>> use-livecode mailing list >>>> use-livecode@lists.runrev.com >>>> Please visit this url to subscribe, unsubscribe and manage your >>> subscription preferences: >>>> http://lists.runrev.com/mailman/listinfo/use-livecode >>> >>> >>> _______________________________________________ >>> use-livecode mailing list >>> use-livecode@lists.runrev.com >>> Please visit this url to subscribe, unsubscribe and manage your >>> subscription preferences: >>> http://lists.runrev.com/mailman/listinfo/use-livecode >>> >> > _______________________________________________ > use-livecode mailing list > use-livecode@lists.runrev.com > Please visit this url to subscribe, unsubscribe and manage your subscription > preferences: > http://lists.runrev.com/mailman/listinfo/use-livecode _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode