Hi folks,
For future reference, below is how I managed to get this sorted. The solution 
seems rather ugly, but it works for the fixed depth of Tree View data I’m 
interested in.

The root cause seems to be down to the way LiveCode handles array keys passed 
in from variables. It doesn't seem possible to define a complete 
multidimensional array in as a text string (as one might build URLs with 
parameters). Rather, variables seem to be recognised and processed only if 
passed in for each individual array key, within its square brackets. 
Furthermore, the square brackets seem to need to be present in the markup of 
the array access call - hence the ugly switch statement with explicit cases for 
each level of Tree View depth rather than something more dynamic & generic...
on hiliteChanged

put the arrayData of control "Tree" into tTreeData

put the hilitedElement of control "Tree" into tHilitedElement

// Identify element depth

put the number of items in tHilitedElement into tDepth

put 0 into tLevelCount

repeat for each item tKey in tHilitedElement

add 1 to tLevelCount

put tKey into tLevel[tLevelCount]

put "[tLevel[" & tLevelCount & "]]" after tElement

end repeat

// Build array key to show element value in field

switch tDepth

case 1

put tTreeData[tLevel[1]] into field "Test"

break

case 2

put tTreeData[tLevel[1]][tLevel[2]] into field "Test"

break

case 3

put tTreeData[tLevel[1]][tLevel[2]][tLevel[3]] into field "Test"

break

end switch

end hiliteChanged    

I’m sure the experienced developers here would find cleaner ways to achieve 
this but this hack works and I can get back to evaluating the data accessible 
from the PDF widget! :) 

Best,
Keith

> On 20 Dec 2021, at 21:13, Keith Clarke via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> I’m using the Tree View widget to provide a quick and dirty read-only display 
> of the various arrays of information that can be extracted from the PDF 
> Widget.
> 
> Each PDF page contains too much text to read & understand within the 
> constraints of a single line in a Tree View control. So, on highlighting an 
> element in the Tree View, I want to display its value - such as 
> arrayData[“Pages”][“1”][“text”] - into a field to read the detail extracted. 
> (Currently I’m putting it into the message box as an interim step, as I tend 
> to build & debug my scripts line by line and this is as far as I’ve got!)
> 
> I may have misread the docs but it seems that when a Tree View element is 
> hilited, one doesn’t get immediate access to the element’s value. Instead, 
> one has to jump through hoops, by handling the hilitedElement, which returns 
> the nested keys of the element. So, I’m simply trying to convert this 
> comma-separated list to an array reference, so that I can get the value 
> associated with this key.
> 
> If I’ve missed a simple means to access the Tree View element’s value 
> directly ‘on click', I’ll gladly change course!
> Best,
> Keith     
> 
>> On 20 Dec 2021, at 20:46, J. Landman Gay via use-livecode 
>> <use-livecode@lists.runrev.com> wrote:
>> 
>> I'm confused about what the goal is. The hilitedElement contains the text of 
>> the selection. The array is already in place, so you don't really need to 
>> add to it.
>> 
>> The reason you're seeing text in the message box is because the last line 
>> contains an unspecified "put". Without a destination for the "put" it will 
>> go automatically to the message box. If you want to work with it, you'd need 
>> to put the value into a variable.
>> 
>> What's the purpose of the concatenation, and what do you want to do with the 
>> selection?
>> 
>> On 12/20/21 11:11 AM, Keith Clarke via use-livecode wrote:
>>> Hi folks,
>>> I’m struggling to access the value from a Tree View widget’s data array as 
>>> the hilitedElement changes - though I think my issue is more about working 
>>> with arrays than the Tree View widget.
>>> The following test script (on the Tree widget) successfully gets the Tree’s 
>>> arrayData into tTreeData and creates a ‘correct-looking’ nested array key 
>>> syntax for any changing tHilitedElement.
>>> However, the last line displays the tHilitedElement variable string in the 
>>> message box rather than concatenating it to tTreeData as the nested key to 
>>> return the element’s value.
>>> on hiliteChanged
>>> put the hilitedElement of me into tHilitedElement
>>> if char -1 of tHilitedElement is comma then delete char -1 of 
>>> tHilitedElement
>>> replace comma with quote & "][" & quote in tHilitedElement
>>> put "[" & quote before tHilitedElement
>>> put quote & "]" after tHilitedElement
>>> put the arrayData of me into tTreeData
>>> put tTreeData & tHilitedElement
>>> end hiliteChanged
>>> I’ve tried various forms of brackets around the tHilitedElement variable 
>>> containing the nested key string with no success - what am I doing wrong?
>>> TIA.
>>> 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
>> 
>> 
>> -- 
>> Jacqueline Landman Gay         |     jac...@hyperactivesw.com
>> HyperActive Software           |     http://www.hyperactivesw.com
>> _______________________________________________
>> 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

Reply via email to