Expand/Collapse Node (including sub-nodes)

Category: Edit/Modify

Date: 02-16-2022

Return to Index


 
'Given a node in the TreeView, this snippet walks through the rest
'of the Tree and expands/collapses all nodes it finds. Start at the
'root to expand/collapse all nodes.
 
'Primary Code - Expand Tree
Sub TreeNodeExpandCollapse(ByVal hNode as Dword, Flag&)
   'Flag& = %True-Expand,  %False-Collapse
   Local iReturn As Dword, hStartNode as Dword
   hStartNode = hNode
   Do
      TreeView Set Expanded hDlg, %IDC_TreeView, hNode, Flag&    '%True-Expand,  %False-Collapse
      TreeView Get Child hDlg, %IDC_TreeView, hNode To iReturn                    'get child (1st choice)
      If iReturn = 0 Then TreeView Get Next hDlg, %IDC_TreeView, hNode To iReturn 'or sibling (2nd choice)
      If iReturn = 0 Then                                               'no child or sibling
         Do      'get sibling of first parent with sibling
            TreeView Get Parent hDlg, %IDC_TreeView, hNode To hNode            'parent
            If hNode = hStartNode Then iReturn = 0 : Exit Loop                              'if reach starting node, stop
            TreeView Get Next hDlg, %IDC_TreeView, hNode To iReturn            'sibling child of parent
         Loop Until iReturn Or (hNode = 0)  'stop when find sibling of parent with sibling, or no more choices
      End If
      hNode = iReturn    'possible values: 0, zero (no parent/no sibling), <>0 (parent or sibling)
   Loop While hNode
End Sub
 
'Compilable Example:  (Jose Includes)
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
%Unicode=1
#Include "Win32API.inc"
%IDC_TreeView = 100 : %IDC_ButtonE = 200 : %IDC_ButtonC = 201
Global hDlg As Dword
 
Function PBMain() As Long
   Local hItem As Dword, hTemp As Dword, hTemp2 As Dword, hTemp3 As Dword
   Dialog New Pixels, 0, "TreeView",200,200,155,300, %WS_SysMenu, 0 To hDlg
   Control Add TreeView, hDlg, %IDC_TreeView, "", 10,10,130,200
   Control Add Button, hDlg, %IDC_ButtonE,"Expand", 25,220,95,20
   Control Add Button, hDlg, %IDC_ButtonC,"Collapse", 25,250,95,20
   TreeView Insert Item hDlg, %IDC_TreeView, 0, %TVI_Last, 0,0,"RootTo hItem
   TreeView Insert Item hDlg, %IDC_TreeView, hItem, %TVI_Last, 0,0,"MotherTo hTemp
   TreeView Insert Item hDlg, %IDC_TreeView, hTemp, %TVI_Last, 0,0,"DanTo hTemp2
   TreeView Insert Item hDlg, %IDC_TreeView, hTemp, %TVI_Last, 0,0,"BobTo hTemp3
   TreeView Set Expanded hDlg, %IDC_TreeView, hTemp, %True
   TreeView Insert Item hDlg, %IDC_TreeView, hTemp3, %TVI_Last, 0,0,"FootTo hTemp2
   TreeView Insert Item hDlg, %IDC_TreeView, hTemp3, %TVI_Last, 0,0,"ArmTo hTemp2
   TreeView Set Expanded hDlg, %IDC_TreeView, hTemp3, %True
   TreeView Insert Item hDlg, %IDC_TreeView, hItem, %TVI_Last, 0,0,"FatherTo hTemp
   TreeView Insert Item hDlg, %IDC_TreeView, hTemp, %TVI_Last, 0,0,"HelenTo hTemp2
   TreeView Insert Item hDlg, %IDC_TreeView, hTemp, %TVI_Last, 0,0,"AnyTo hTemp3
   TreeView Set Expanded hDlg, %IDC_TreeView, hTemp, %True
   TreeView Insert Item hDlg, %IDC_TreeView, hTemp3, %TVI_Last, 0,0,"LegTo hTemp2
   TreeView Insert Item hDlg, %IDC_TreeView, hTemp3, %TVI_Last, 0,0,"FingerTo hTemp2
   TreeView Set Expanded hDlg, %IDC_TreeView, hTemp3, %True
   TreeView Set Expanded hDlg, %IDC_TreeView, hItem, %True
   Dialog Show Modal hDlg Call DlgProc
End Function
 
CallBack Function DlgProc() As Long
   Local hNode As Dword
   If CB.Msg = %WM_Command AND CB.Ctl = %IDC_ButtonE Then
      TreeView Get Select hDlg, %IDC_TreeView To hNode
      TreeNodeExpandCollapse(hNode, %True)
   End If
   If CB.Msg = %WM_Command AND CB.Ctl = %IDC_ButtonC Then
      TreeView Get Select hDlg, %IDC_TreeView To hNode
      TreeNodeExpandCollapse(hNode, %False)
   End If
End Function
 
Sub TreeNodeExpandCollapse(ByVal hNode as Dword, Flag&)
   'Flag& = %True-Expand,  %False-Collapse
   Local iReturn As Dword, hStartNode as Dword
   hStartNode = hNode
   Do
      TreeView Set Expanded hDlg, %IDC_TreeView, hNode, Flag&    '%True-Expand,  %False-Collapse
      TreeView Get Child hDlg, %IDC_TreeView, hNode To iReturn                    'get child (1st choice)
      If iReturn = 0 Then TreeView Get Next hDlg, %IDC_TreeView, hNode To iReturn 'or sibling (2nd choice)
      If iReturn = 0 Then                                               'no child or sibling
         Do      'get sibling of first parent with sibling
            TreeView Get Parent hDlg, %IDC_TreeView, hNode To hNode            'parent
            If hNode = hStartNode Then iReturn = 0 : Exit Loop                              'if reach starting node, stop
            TreeView Get Next hDlg, %IDC_TreeView, hNode To iReturn            'sibling child of parent
         Loop Until iReturn Or (hNode = 0)  'stop when find sibling of parent with sibling, or no more choices
      End If
      hNode = iReturn    'possible values: 0, zero (no parent/no sibling), <>0 (parent or sibling)
   Loop While hNode
End Sub
 
'gbs_00268
'Date: 03-10-2012


created by gbSnippets
http://www.garybeene.com/sw/gbsnippets.htm