I'm a treeview item; who's my parent?
Posted: Thu Oct 16, 2003 4:54 pm
Does anyone know the way to know the itemindex of a node (parent) item knowing the itemindex of another item (child)?
Thanx
Thanx

http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
hItem.l = GadgetItemID(#Tree, ChildNumber)
hParent.l = SendMessage_(GadgetID(#Tree), #TVM_GETNEXTITEM, #TVGN_PARENT, hItem)
PArentNumber = TreeGadgetItemNumber(#Tree, hParent)
Code: Select all
CurrentLevel = GetGadgetItemAttribute(#TreeGadget, CurrentItem, #PB_Tree_SubLevel)
For index = CurrentItem-1 To 0 Step -1
If GetGadgetItemAttribute(#TreeGadget, index, #PB_Tree_SubLevel) < CurrentLevel
; index is the parent of CurrentItem
EndIf
Next index
Code: Select all
OpenWindow(0,0,0,320,370,"untitled",#WS_OVERLAPPEDWINDOW | 1)
CreateGadgetList(WindowID(0))
TreeGadget(0,5,5,310,360)
For i=0 To 20
AddGadgetItem(0,-1,"Tree-View Item #" + RSet(Str(i+1),2,"0"),0,Random(2))
SetGadgetState(0,i)
Next
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget And EventType() = #PB_EventType_LeftClick
CurrentItem = GetGadgetState(0)
CurrentLevel = GetGadgetItemAttribute(0,CurrentItem,#PB_Tree_SubLevel)
If CurrentLevel > 0
For i = CurrentItem-1 To 0 Step -1
If GetGadgetItemAttribute(0,i,#PB_Tree_SubLevel) < CurrentLevel
Debug "ITEM PARENT ID: #" + RSet(Str(i+1),2,"0")
Break
EndIf
Next
Else
Debug "ITEM DOESN'T HAVE A PARENT"
EndIf
EndIf
Until EventID = 16
Code: Select all
Procedure.l TreeGadgetItemNumber(Gadget.l,ItemID.l)
Protected Count.l = CountGadgetItems(Gadget.l)
While Count.l
If GadgetItemID(Gadget.l,Count.l)=ItemID.l:ProcedureReturn Count:EndIf
Count.l-1
Wend
ProcedureReturn -1
EndProcedure