Page 1 of 1

TreeViewGadget - #TVM_SORTCHILDREN

Posted: Mon Oct 09, 2017 9:07 am
by Josh
Did I misunderstand something or is there a bug in the API. According to MSDN, all subnodes should be sorted recursively, but only the first sublevel is sorted.

Code: Select all

EnableExplicit

Define hItem

OpenWindow(0, 0, 0, 200, 400, "Sort TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(0, 10, 10, 180, 380)

AddGadgetItem (0, -1, "Node00", 0, 0)

AddGadgetItem (0, -1, "Node40", 0, 1)
AddGadgetItem (0, -1, "Node30", 0, 1)
AddGadgetItem (0, -1, "Node20", 0, 1)
AddGadgetItem (0, -1, "Node10", 0, 1)

AddGadgetItem (0, -1, "Node14", 0, 2)
AddGadgetItem (0, -1, "Node13", 0, 2)
AddGadgetItem (0, -1, "Node12", 0, 2)
AddGadgetItem (0, -1, "Node11", 0, 2)

hItem = SendMessage_(GadgetID (0), #TVM_GETNEXTITEM, #TVGN_ROOT, 0)
SendMessage_(GadgetID (0), #TVM_SORTCHILDREN, #True, hItem)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
MSDN wrote:wParam
Value that specifies whether the sorting is recursive. Set wParam to TRUE to sort all levels of child items below the parent item. Otherwise, only the parent's immediate children are sorted.

Re: TreeViewGadget - #TVM_SORTCHILDREN

Posted: Mon Oct 09, 2017 9:22 am
by RSBasic
Isn't bug.

Correct example:

Code: Select all

EnableExplicit

Procedure SortTreeGadgetItems(Gadget)
  Protected a
  For a=0 To CountGadgetItems(Gadget)-1
    If SendMessage_(GadgetID(Gadget),#TVM_GETNEXTITEM,#TVGN_CHILD,GadgetItemID(Gadget,a))
      SendMessage_(GadgetID(Gadget),#TVM_SORTCHILDREN,0,GadgetItemID(Gadget,a))
    EndIf
  Next
  SendMessage_(GadgetID(Gadget),#TVM_SORTCHILDREN,0,0)
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TreeGadget(1,10,10,480,230,0)
  
  AddGadgetItem(1,-1,"n",0,0)
    AddGadgetItem(1,-1,"b",0,1)
    AddGadgetItem(1,-1,"z",0,1)
    AddGadgetItem(1,-1,"a",0,1)
  AddGadgetItem(1,-1,"a",0,0)
  AddGadgetItem(1,-1,"j",0,0)
  AddGadgetItem(1,-1,"v",0,0)
  AddGadgetItem(1,-1,"d",0,0)
  AddGadgetItem(1,-1,"b",0,0)
    AddGadgetItem(1,-1,"g",0,1)
    AddGadgetItem(1,-1,"b",0,1)
    AddGadgetItem(1,-1,"j",0,1)
    AddGadgetItem(1,-1,"d",0,1)
  AddGadgetItem(1,-1,"p",0,0)
  AddGadgetItem(1,-1,"s",0,0)
  
  SortTreeGadgetItems(1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: TreeViewGadget - #TVM_SORTCHILDREN

Posted: Mon Oct 09, 2017 10:46 am
by Josh
Thanks for your answer, but may I recall my quote from MSDN from my first post?
MSDN wrote:wParam
Value that specifies whether the sorting is recursive. Set wParam to TRUE to sort all levels of child items below the parent item. Otherwise, only the parent's immediate children are sorted.
As far as I understand this, ALL levels should be sorted if wParam is set to #True