Node Child Count (including sub-nodes)

Category: Information

Date: 02-16-2022

Return to Index


 
'This simply counts the total number of parent nodes plus child nodes for
'a specified node. Count does not include the selected node. The number
'of Parent nodes and Child nodes are returned also.
 
'Primary Code:
Function TreeNodeCount(ByVal hNode As DWordas DWord
   Local iReturn As DWord, hStartNode as DWord, iChildTest as DWord
   hStartNode = hNode
   Do
      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)
         If hNode Then
            TreeView Get Child hDlg, %IDC_TreeView, hNode iChildTest
            If iChildTest Then Incr iParent& Else Incr iChildren&
         End If
   Loop While hNode
End Function
 
 
'Compilable Example:  (Jose Includes)
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
%Unicode=1
#Include "Win32API.inc"
%IDC_TreeView = 100 : %IDC_Button = 200
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,250, %WS_SysMenu, 0 To hDlg
   Control Add TreeView, hDlg, %IDC_TreeView, "", 10,10,130,200
   Control Add Button, hDlg, %IDC_Button,"Start", 25,220,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, iCount&, iParents&, iChildren&
   If CB.Msg = %WM_Command AND CB.Ctl = %IDC_Button Then
      TreeView Get Select CB.Hndl, %IDC_TreeView To hNode
      iCount& = TreeNodeCount(hNode, iParents&, iChildren&)
      MsgBox "Total:" + Str$(iParents& + iChildren&) + $crlf + "Parents: " + Str$(iParents&) + $CrLf + "Children: " + Str$(iChildren&)
   End If
End Function
 
   'Primary Code:
 
Function TreeNodeCount(ByVal hNode As DWord, iParents&, iChildren&) as DWord
   Local iReturn As DWord, hStartNode as DWord, iChildTest as DWord
   hStartNode = hNode
   Do
      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)
      If hNode Then
         TreeView Get Child hDlg, %IDC_TreeView, hNode To iChildTest
         If iChildTest Then Incr iParents& Else Incr iChildren&
      End If
   Loop While hNode
End Function
 
'gbs_00275
'Date: 03-10-2012


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