Hello again. I've modified the example, and it will now display the selected node, along with its parent, siblings, and sub-levels, if any:
Code: Select all
EnableExplicit
Enumeration
#MainWindow
#Tree
#List
EndEnumeration
Declare InitialiseTree()
Define L, appQuit, selectionLevel, parentNode, subExists, siblingsExists
OpenWindow(#MainWindow, 0, 0, 400, 400, "TreeGadget (select with mouse or keyboard)",
#PB_Window_SystemMenu |
#PB_Window_ScreenCentered)
TreeGadget(#Tree, 10, 10, 180, 380)
ListViewGadget(#List, 200, 10, 190, 380)
InitialiseTree()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
appQuit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case #Tree
Select EventType()
Case #PB_EventType_LeftClick, #PB_EventType_Change
subExists = 0
siblingsExists = 0
ClearGadgetItems(#List)
selectionLevel = GetGadgetItemAttribute(#Tree, GetGadgetState(#Tree),
#PB_Tree_SubLevel)
AddGadgetItem(#List, -1, "You selected: " +
UCase(GetGadgetItemText(#Tree, GetGadgetState(#Tree))))
AddGadgetItem(#List, -1, "")
For L = GetGadgetState(#Tree) To 0 Step -1
If GetGadgetItemAttribute(#Tree, L, #PB_Tree_SubLevel) < selectionLevel
parentNode = L
AddGadgetItem(#List, -1, "Parent node: " + UCase(GetGadgetItemText(#Tree, L)))
AddGadgetItem(#List, -1, "")
Break
EndIf
Next L
AddGadgetItem(#List, -1, "Sub-levels:")
For L = GetGadgetState(#Tree) + 1 To CountGadgetItems(#Tree) - 1
If GetGadgetItemAttribute(#Tree, L, #PB_Tree_SubLevel) <= selectionLevel
Break
Else
AddGadgetItem(#List, -1, "- " + UCase(GetGadgetItemText(#Tree, L)))
subExists = 1
EndIf
Next L
If Not subExists
AddGadgetItem(#List, -1, "- NONE -")
EndIf
AddGadgetItem(#List, -1, "")
AddGadgetItem(#List, -1, "Sibling Nodes:")
For L = parentNode + 1 To CountGadgetItems(#Tree) - 1
If GetGadgetItemAttribute(#Tree, L, #PB_Tree_SubLevel) > selectionLevel
Continue
ElseIf GetGadgetItemAttribute(#Tree, L, #PB_Tree_SubLevel) < selectionLevel
Break
EndIf
If GetGadgetItemText(#Tree, GetGadgetState(#Tree)) <> GetGadgetItemText(#Tree, L)
AddGadgetItem(#List, -1, "- " + UCase(GetGadgetItemText(#Tree, L)))
siblingsExists = 1
EndIf
Next L
If Not siblingsExists
AddGadgetItem(#List, -1, "- NONE -")
EndIf
EndSelect
EndSelect
EndSelect
Until appQuit = 1
Procedure InitialiseTree()
Protected L, LL, item.s
AddGadgetItem(#Tree, -1, "Random Lists", 0, 0)
For L = 1 To 5
Read.s item
AddGadgetItem(#Tree, -1, item, 0, 1)
For LL = 1 To 6
Read.s item
AddGadgetItem(#Tree, -1, item, 0, 2)
Next LL
SetGadgetItemState(#Tree, CountGadgetItems(#Tree) - 7, #PB_Tree_Expanded)
Next L
SetGadgetItemState(#Tree, 0, #PB_Tree_Expanded)
SetGadgetState(#Tree, 0)
EndProcedure
DataSection
Data.s "Colours", "Red", "Blue", "Green", "Yellow", "Cyan", "Magenta"
Data.s "Fruits", "Apple", "Banana", "Cherry", "Lemon", "Mango", "Strawberry"
Data.s "Animals", "Monkey", "Giraffe", "Horse", "Lion", "Tiger", "Zebra"
Data.s "Planets", "Pluto", "Jupiter", "Neptune", "Venus", "Mercury", "Mars"
Data.s "Countries", "France", "Germany", "China", "Japan", "United Kingdom", "U.S.A."
EndDataSection
Hope it helps.