One Node Down

Category: Traverse/Walk Tree

Date: 03-28-2012

Return to Index


 
'Given a node in the TreeView, this snippet returns the next node in the tree.
 
'Primary Code:
'returns node one down from the specified Node
'returns 0 if does not exist
Function OneNodeDown(ByVal hNode As DWordas DWord
   Local iReturn As DWord
'   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
               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 Select hDlg, %IDC_TreeView, hNode : Sleep 300 'for demo only - selection/pause is optional
      Function = hNode
'   Loop While hNode
End Function
 
'Compilable Example:
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
#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, temp$
   If CB.Msg = %WM_Command AND CB.Ctl = %IDC_Button Then
      TreeView Get Select CB.Hndl, %IDC_TreeView To hNode
      hNode = OneNodeDown(hNode)
      TreeView Get Text hDlg, %IDC_TreeView, hNode TO temp$
      MsgBox temp$
   End If
End Function
 
Function OneNodeDown(ByVal hNode As DWordas DWord
   'returns node one down from the specified Node
   'returns 0 if does not exist
   Local iReturn As DWord
   '   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
         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 Select hDlg, %IDC_TreeView, hNode : Sleep 300 'for demo only - selection/pause is optional
   Function = hNode
   '   Loop While hNode
End Function
 
'gbs_00279
'Date: 03-10-2012


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