Posted: Sun Nov 13, 2005 10:15 pm
cool 

http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
#ButtonSameLevel = 0
#ButtonChild = 1
#ButtonTVAddItemChild = 2
#ButtonTVAddItemSameLevel = 3
#Tree = 4
#StringRowNumber = 5
#TextRowNumber = 6
#InsertChild = #True
#InsertSameLevel = #False
#DummyImage = 0
; These Structures are needed for: TVAddItem()
; ********************************************
;
Structure TVITEM
mask.l
hItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
iSelectedImage.l
cChildren.l
lParam.l
EndStructure
;
Structure TVINSERTSTRUCT
hParent.l
hInsertAfter.l
item.TVITEM
EndStructure
;
;
;
;
Procedure TVAddItem(gadget.l, position.l, text.s, hImg.l, openflag.l)
;
; Insert a Item in a TreeView Gadget.
; not like AddGadgetItem(), this one supports the position parameter.
;
; Usage:
;***********
; gadget.l = PB Gadget Number
; position.l = Item to insert the new one after (starting with 0)
; text.s = Item Text
; hImg.l = ImageID if Image to display
; openflag.l = If #TRUE, a new TreeViewNode is created at 'position.l' and the new Item
; is added as it's Child, if #FALSE, the new one is just inserted after the 'position.l'
; Item.
;
; Note: The hImg.l parameter is only supported, if there are allready some Items with Images.
;
hwndTV.l = GadgetID(gadget)
hRoot.l = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_ROOT, 0)
hItem = hRoot: hParent.l = 0
For i.l = 0 To position-1
hItem2.l = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_CHILD, hItem)
Repeat
If hItem2 = #Null: hItem2 = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_NEXT, hItem): EndIf
If hItem2 = #Null: hItem = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem): EndIf
Until hItem2 <> #Null
hItem = hItem2
Next i
lpis.TVINSERTSTRUCT
If openflag = #True
pitem.TVITEM
pitem\mask = #TVIF_CHILDREN | #TVIF_HANDLE
pitem\hItem = hItem
pitem\cChildren = 1
SendMessage_(hwndTV, #TVM_SETITEM, 0, @pitem)
lpis\hParent = hItem
lpis\hInsertAfter = hItem
Else
lpis\hParent = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem)
lpis\hInsertAfter = hItem
EndIf
lpis\item\mask = #TVIF_TEXT
If hImg <> 0
himl.l = SendMessage_(hwndTV, #TVM_GETIMAGELIST, #TVSIL_NORMAL ,0)
If himl <> #Null
lpis\item\mask | #TVIF_IMAGE
; @@@ Makes it crash so commented out. Put back in if you want an image associated
; iImage.l = ImageList_AddIcon_(himl, hImg)
; @@@
lpis\item\iImage = iImage
lpis\item\iSelectedImage = iImage
EndIf
EndIf
lpis\item\cchTextMax = Len(text)
lpis\item\pszText = @text
SendMessage_(hwndTV, #TVM_INSERTITEM, 0, @lpis)
EndProcedure
If OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "TreeGadget")
If CreateGadgetList(WindowID())
TreeGadget(#Tree, 5, 5, 290, 400)
TextGadget(#TextRowNumber, 5, 410, 40, 20, "Row:")
StringGadget(#StringRowNumber, 35, 410, 60, 17, "", #PB_String_ReadOnly)
ButtonGadget(#ButtonSameLevel, 5, 470, 110, 25, "Same Level")
ButtonGadget(#ButtonChild, 120, 470, 110, 25, "Child")
ButtonGadget(#ButtonTVAddItemChild, 235, 470, 110, 25, "TV Child")
ButtonGadget(#ButtonTVAddItemSameLevel, 350, 470, 110, 25, "TV Same Level")
AddGadgetItem(#Tree, -1, "Item 0")
AddGadgetItem(#Tree, -1, "Item 1")
OpenTreeGadgetNode(#Tree, 1)
AddGadgetItem(#Tree, -1, "ChildItem 1")
AddGadgetItem(#Tree, -1, "ChildItem 2")
AddGadgetItem(#Tree, -1, "ChildItem 3")
CloseTreeGadgetNode(#Tree, 1)
AddGadgetItem(#Tree, -1, "Item 2")
AddGadgetItem(#Tree, -1, "Item 3")
AddGadgetItem(#Tree, -1, "Item 4")
Repeat
Event= WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadgetID() = #Tree
Item = GetGadgetState(#Tree)
SetGadgetText(#StringRowNumber, Str(Item))
EndIf
If EventGadgetID() = #ButtonChild
; get the item that is selected
Item = GetGadgetState(#Tree)
OpenTreeGadgetNode(#Tree, Item)
AddGadgetItem(#Tree, Item+1, "New Child")
CloseTreeGadgetNode(#Tree, Item)
; automatically expand the node, but keep the selection
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
; give focus from the button back to the tree to show the selection
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonSameLevel
Item = GetGadgetState(#Tree)
AddGadgetItem(#Tree, Item+1, "New Same Level")
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonTVAddItemChild
Item = GetGadgetState(#Tree)
TVAddItem(#Tree, Item, "TV Child", #DummyImage, #InsertChild)
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonTVAddItemSameLevel
Item = GetGadgetState(#Tree)
TVAddItem(#Tree, Item, "TV Same Level", #DummyImage, #InsertSameLevel)
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
End
Code: Select all
#ButtonSameLevel = 0
#ButtonChild = 1
#ButtonTVAddItemChild = 2
#ButtonTVAddItemSameLevel = 3
#Tree = 4
#StringRowNumber = 5
#TextRowNumber = 6
#InsertChild = #True
#InsertSameLevel = #False
#DummyImage = 0
; These Structures are needed for: TVAddItem()
; ********************************************
;
Structure TVITEM
mask.l
hItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
iSelectedImage.l
cChildren.l
lParam.l
EndStructure
;
Structure TVINSERTSTRUCT
hParent.l
hInsertAfter.l
item.TVITEM
EndStructure
;
;
;
;
Procedure TVAddItem(gadget.l, position.l, text.s, hImg.l, openflag.l)
;
; Insert a Item in a TreeView Gadget.
; not like AddGadgetItem(), this one supports the position parameter.
;
; Usage:
;***********
; gadget.l = PB Gadget Number
; position.l = Item to insert the new one after (starting with 0)
; text.s = Item Text
; hImg.l = ImageID if Image to display
; openflag.l = If #TRUE, a new TreeViewNode is created at 'position.l' and the new Item
; is added as it's Child, if #FALSE, the new one is just inserted after the 'position.l'
; Item.
;
; Note: The hImg.l parameter is only supported, if there are allready some Items with Images.
;
hwndTV.l = GadgetID(gadget)
hRoot.l = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_ROOT, 0)
hItem = hRoot: hParent.l = 0
For i.l = 0 To position-1
hItem2.l = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_CHILD, hItem)
Repeat
If hItem2 = #Null: hItem2 = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_NEXT, hItem): EndIf
If hItem2 = #Null: hItem = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem): EndIf
Until hItem2 <> #Null
hItem = hItem2
Next i
lpis.TVINSERTSTRUCT
If openflag = #True
pitem.TVITEM
pitem\mask = #TVIF_CHILDREN | #TVIF_HANDLE
pitem\hItem = hItem
pitem\cChildren = 1
SendMessage_(hwndTV, #TVM_SETITEM, 0, @pitem)
lpis\hParent = hItem
lpis\hInsertAfter = hItem
Else
lpis\hParent = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem)
lpis\hInsertAfter = hItem
EndIf
lpis\item\mask = #TVIF_TEXT
If hImg <> 0
himl.l = SendMessage_(hwndTV, #TVM_GETIMAGELIST, #TVSIL_NORMAL ,0)
If himl <> #Null
lpis\item\mask | #TVIF_IMAGE
; @@@ Makes it crash so commented out. Put back in if you want an image associated
; iImage.l = ImageList_AddIcon_(himl, hImg)
; @@@
lpis\item\iImage = iImage
lpis\item\iSelectedImage = iImage
EndIf
EndIf
lpis\item\cchTextMax = Len(text)
lpis\item\pszText = @text
SendMessage_(hwndTV, #TVM_INSERTITEM, 0, @lpis)
EndProcedure
If OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "TreeGadget")
If CreateGadgetList(WindowID())
TreeGadget(#Tree, 5, 5, 290, 400)
TextGadget(#TextRowNumber, 5, 410, 40, 20, "Row:")
StringGadget(#StringRowNumber, 35, 410, 60, 17, "", #PB_String_ReadOnly)
ButtonGadget(#ButtonSameLevel, 5, 470, 110, 25, "Same Level")
ButtonGadget(#ButtonChild, 120, 470, 110, 25, "Child")
ButtonGadget(#ButtonTVAddItemChild, 235, 470, 110, 25, "TV Child")
ButtonGadget(#ButtonTVAddItemSameLevel, 350, 470, 110, 25, "TV Same Level")
AddGadgetItem(#Tree, -1, "Item 0")
AddGadgetItem(#Tree, -1, "Item 1")
OpenTreeGadgetNode(#Tree, 1)
AddGadgetItem(#Tree, -1, "ChildItem 1")
AddGadgetItem(#Tree, -1, "ChildItem 2")
AddGadgetItem(#Tree, -1, "ChildItem 3")
CloseTreeGadgetNode(#Tree, 1)
AddGadgetItem(#Tree, -1, "Item 2")
AddGadgetItem(#Tree, -1, "Item 3")
AddGadgetItem(#Tree, -1, "Item 4")
Repeat
Event= WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadgetID() = #Tree
Item = countgadgetitems(#Tree)
SetGadgetText(#StringRowNumber, Str(Item))
EndIf
If EventGadgetID() = #ButtonChild
; get the item that is selected
Item = GetGadgetState(#Tree)
OpenTreeGadgetNode(#Tree, Item)
AddGadgetItem(#Tree, Item+1, "New Child")
CloseTreeGadgetNode(#Tree, Item)
; automatically expand the node, but keep the selection
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
; give focus from the button back to the tree to show the selection
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonSameLevel
Item = GetGadgetState(#Tree)
AddGadgetItem(#Tree, Item+1, "New Same Level")
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonTVAddItemChild
Item = GetGadgetState(#Tree)
TVAddItem(#Tree, Item, "TV Child", #DummyImage, #InsertChild)
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonTVAddItemSameLevel
Item = GetGadgetState(#Tree)
TVAddItem(#Tree, Item, "TV Same Level", #DummyImage, #InsertSameLevel)
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
End
Code: Select all
#ButtonSameLevel = 0
#ButtonChild = 1
#ButtonTVAddItemChild = 2
#ButtonTVAddItemSameLevel = 3
#Tree = 4
#StringRowNumber = 5
#TextRowNumber = 6
#InsertChild = #True
#InsertSameLevel = #False
#DummyImage = 0
; These Structures are needed for: TVAddItem()
; ********************************************
;
Structure TVITEM
mask.l
hItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
iSelectedImage.l
cChildren.l
lParam.l
EndStructure
;
Structure TVINSERTSTRUCT
hParent.l
hInsertAfter.l
item.TVITEM
EndStructure
;
;
;
;
Procedure TVAddItem(gadget.l, position.l, text.s, hImg.l, openflag.l)
;
; Insert a Item in a TreeView Gadget.
; not like AddGadgetItem(), this one supports the position parameter.
;
; Usage:
;***********
; gadget.l = PB Gadget Number
; position.l = Item to insert the new one after (starting with 0)
; text.s = Item Text
; hImg.l = ImageID if Image to display
; openflag.l = If #TRUE, a new TreeViewNode is created at 'position.l' and the new Item
; is added as it's Child, if #FALSE, the new one is just inserted after the 'position.l'
; Item.
;
; Note: The hImg.l parameter is only supported, if there are allready some Items with Images.
;
hwndTV.l = GadgetID(gadget)
hRoot.l = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_ROOT, 0)
hItem = hRoot: hParent.l = 0
For i.l = 0 To position-1
hItem2.l = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_CHILD, hItem)
Repeat
If hItem2 = #Null: hItem2 = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_NEXT, hItem): EndIf
If hItem2 = #Null: hItem = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem): EndIf
Until hItem2 <> #Null
hItem = hItem2
Next i
lpis.TVINSERTSTRUCT
If openflag = #True
pitem.TVITEM
pitem\mask = #TVIF_CHILDREN | #TVIF_HANDLE
pitem\hItem = hItem
pitem\cChildren = 1
SendMessage_(hwndTV, #TVM_SETITEM, 0, @pitem)
lpis\hParent = hItem
lpis\hInsertAfter = hItem
Else
lpis\hParent = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem)
lpis\hInsertAfter = hItem
EndIf
lpis\item\mask = #TVIF_TEXT
If hImg <> 0
himl.l = SendMessage_(hwndTV, #TVM_GETIMAGELIST, #TVSIL_NORMAL ,0)
If himl <> #Null
lpis\item\mask | #TVIF_IMAGE
; @@@ Makes it crash so commented out. Put back in if you want an image associated
; iImage.l = ImageList_AddIcon_(himl, hImg)
; @@@
lpis\item\iImage = iImage
lpis\item\iSelectedImage = iImage
EndIf
EndIf
lpis\item\cchTextMax = Len(text)
lpis\item\pszText = @text
SendMessage_(hwndTV, #TVM_INSERTITEM, 0, @lpis)
EndProcedure
If OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "TreeGadget")
If CreateGadgetList(WindowID())
TreeGadget(#Tree, 5, 5, 290, 400)
TextGadget(#TextRowNumber, 5, 410, 40, 20, "Row:")
StringGadget(#StringRowNumber, 35, 410, 60, 17, "", #PB_String_ReadOnly)
ButtonGadget(#ButtonSameLevel, 5, 470, 110, 25, "Same Level")
ButtonGadget(#ButtonChild, 120, 470, 110, 25, "Child")
ButtonGadget(#ButtonTVAddItemChild, 235, 470, 110, 25, "TV Child")
ButtonGadget(#ButtonTVAddItemSameLevel, 350, 470, 110, 25, "TV Same Level")
AddGadgetItem(#Tree, -1, "Item 0")
AddGadgetItem(#Tree, -1, "Item 1")
OpenTreeGadgetNode(#Tree, 1)
AddGadgetItem(#Tree, -1, "ChildItem 1")
AddGadgetItem(#Tree, -1, "ChildItem 2")
AddGadgetItem(#Tree, -1, "ChildItem 3")
CloseTreeGadgetNode(#Tree, 1)
AddGadgetItem(#Tree, -1, "Item 2")
AddGadgetItem(#Tree, -1, "Item 3")
AddGadgetItem(#Tree, -1, "Item 4")
Repeat
Event= WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadgetID() = #Tree
Item = sendmessage_(gadgetid(#Tree), #TVM_GETCOUNT,0,0)
SetGadgetText(#StringRowNumber, Str(Item))
EndIf
If EventGadgetID() = #ButtonChild
; get the item that is selected
Item = GetGadgetState(#Tree)
OpenTreeGadgetNode(#Tree, Item)
AddGadgetItem(#Tree, Item+1, "New Child")
CloseTreeGadgetNode(#Tree, Item)
; automatically expand the node, but keep the selection
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
; give focus from the button back to the tree to show the selection
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonSameLevel
Item = GetGadgetState(#Tree)
AddGadgetItem(#Tree, Item+1, "New Same Level")
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonTVAddItemChild
Item = GetGadgetState(#Tree)
TVAddItem(#Tree, Item, "TV Child", #DummyImage, #InsertChild)
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
If EventGadgetID() = #ButtonTVAddItemSameLevel
Item = GetGadgetState(#Tree)
TVAddItem(#Tree, Item, "TV Same Level", #DummyImage, #InsertSameLevel)
SetGadgetItemState(#Tree, Item, #PB_Tree_Expanded|#PB_Tree_Selected)
ActivateGadget(#Tree)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
End
Code: Select all
#ButtonSameLevel = 0
#ButtonChild = 1
ID=2
If OpenWindow(0,0,0,355,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"TreeGadget") And CreateGadgetList(WindowID(0))
TreeGadget(ID, 10,10,160,160)
ButtonGadget(#ButtonSameLevel, 200, 30, 100, 25, "Same Level")
ButtonGadget(#ButtonChild, 200, 80, 100, 25, "Child")
ButtonGadget(10, 200, 230, 100, 25, "State")
AddGadgetItem(ID, -1, "Item 0")
AddGadgetItem(ID, -1, "Item 1")
OpenTreeGadgetNode(ID, 1)
AddGadgetItem(ID, -1, "ChildItem 1")
AddGadgetItem(ID, -1, "ChildItem 2")
AddGadgetItem(ID, -1, "ChildItem 3")
CloseTreeGadgetNode(ID, 1)
AddGadgetItem(ID, -1, "Item 2")
AddGadgetItem(ID, -1, "Item 3")
AddGadgetItem(ID, -1, "Item 4")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
case #ButtonSameLevel
if GetGadgetState(ID) <>-1
;Check if there are any subitems. This is so the index of the new item is correct.
count=counttreegadgetnodeitems(ID, GetGadgetState(ID))
addgadgetitem(ID, GetGadgetState(ID)+count+1, "New "+str(GetGadgetState(ID)+count+1))
setgadgetstate(ID,GetGadgetState(ID))
endif
case #ButtonChild
if GetGadgetState(ID) <>-1
;Check if there are any subitems. This is so the index of the new item is correct.
count=counttreegadgetnodeitems(ID, GetGadgetState(ID))
OpenTreeGadgetNode(ID, GetGadgetState(ID))
AddGadgetItem(ID, GetGadgetState(ID)+count+1, "New child "+str(GetGadgetState(ID)+count+1))
CloseTreeGadgetNode(ID, GetGadgetState(ID))
setgadgetstate(ID,GetGadgetState(ID))
endif
case 10
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
Code: Select all
#ButtonSameLevel = 0
#ButtonChild = 1
global ID
ID=2
declare AddItemToForwardNode(item)
If OpenWindow(0,0,0,355,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"TreeGadget") And CreateGadgetList(WindowID(0))
TreeGadget(ID, 10,10,160,160)
ButtonGadget(#ButtonSameLevel, 200, 30, 100, 25, "Same Level")
ButtonGadget(#ButtonChild, 200, 80, 100, 25, "Child")
AddGadgetItem(ID, -1, "Item 0")
AddGadgetItem(ID, -1, "Item 1")
OpenTreeGadgetNode(ID, 1)
AddGadgetItem(ID, -1, "ChildItem 1")
AddGadgetItem(ID, -1, "ChildItem 2")
AddGadgetItem(ID, -1, "ChildItem 3")
CloseTreeGadgetNode(ID, 1)
AddGadgetItem(ID, -1, "Item 2")
AddGadgetItem(ID, -1, "Item 3")
AddGadgetItem(ID, -1, "Item 4")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
case #ButtonSameLevel
if GetGadgetState(ID) <>-1
;Check if there are any subitems. This is so the index of the new item is correct.
count=counttreegadgetnodeitems(ID, GetGadgetState(ID))
if SendMessage_(GadgetID(ID), #TVM_GETNEXTITEM, #TVGN_NEXT, GadgetItemID(ID, GetGadgetState(ID))) = 0 and GetGadgetState(ID) < countgadgetitems(ID)-1
;This means we are at the last item in a node, but not the last item in the tree.
parentitem = TreeGadgetItemNumber(ID, SendMessage_(GadgetID(ID), #TVM_GETNEXTITEM, #TVGN_PARENT, GadgetItemID(ID, GetGadgetState(ID))))
AddItemToForwardNode(parentitem)
Else
addgadgetitem(ID, GetGadgetState(ID)+count+1, "New "+str(GetGadgetState(ID)+count+1))
endif
setgadgetstate(ID,GetGadgetState(ID))
endif
case #ButtonChild
if GetGadgetState(ID) <>-1
;Check if there are any subitems. This is so the index of the new item is correct.
AddItemToForwardNode(GetGadgetState(ID))
setgadgetstate(ID,GetGadgetState(ID))
endif
case 10
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
procedure AddItemToForwardNode(item)
protected count
;Check if there are any subitems. This is so the index of the new item is correct.
count=counttreegadgetnodeitems(ID, item)
OpenTreeGadgetNode(ID, item)
AddGadgetItem(ID, item+count+1, "New "+str(item+count+1))
CloseTreeGadgetNode(ID, item)
endprocedure