Imports System.Reflection
Imports Softelvdm.Controls
Imports Softelvdm.SftTreeNET

Public Class Form1

Private m_PlusImage As Image = Bitmap.FromFile("..\\..\\ExpandableNormal.bmp") ' a small + bitmap
Private m_MinusImage As Image = Bitmap.FromFile("..\\..\\CollapsableNormal.bmp") ' a small - bitmap

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' This sample demonstrates how use the control as a category list (similar to 
    ' Visual Studio's Toolbox.
    ' To prepare for this sample, create a new project with a blank form and add
    ' a SftTree/NET control named sftTree1.
    ' In addition, adjust the following FromFile methods to use a (small) bitmaps
    ' that are located on your system.
    Dim img As Image = Bitmap.FromFile("..\\..\\test.gif") ' a small sample bitmap

    ' Most of this initialization code could be eliminated by designing the control.
    sftTree1.Initializing = True
    sftTree1.Headers.Rows = 0
    sftTree1.Footers.Rows = 0
    sftTree1.Dimensions.LevelIndent = 5 ' indent just a few pixels for level 1 items
    sftTree1.TreeLineStyle = TreeLineStyleEnum.None
    sftTree1.ShowExpandCollapseButtons = ShowExpandCollapseButtonsEnum.None
    sftTree1.RowHeaders.Width = 0
    sftTree1.ShowFocusRectangle = False
    sftTree1.ToolTip.ShowAlways = True
    sftTree1.ToolTip.Style = ToolTipAppearanceEnum.Balloon

    Dim cat As ItemClass
    cat = AddCategory("Category 1")
     AddItem(cat, img, "Item 1")
     AddItem(cat, img, "Item 2")
     AddItem(cat, img, "Item 3")
    cat = AddCategory("Category 2")
     AddItem(cat, img, "Item A")
     AddItem(cat, img, "Item B")
     AddItem(cat, img, "Item C")
     AddItem(cat, img, "Item D")
     AddItem(cat, img, "Item E")
    cat = AddCategory("Category 3")
     AddItem(cat, img, "Item A1")
     AddItem(cat, img, "Item A2")
    cat = AddCategory("Category 4")
     AddItem(cat, img, "Item D1")
    cat = AddCategory("Category 5")
     AddItem(cat, img, "Item G1")
     AddItem(cat, img, "Item G2")
     AddItem(cat, img, "Item G3")
     AddItem(cat, img, "Item G4")
     AddItem(cat, img, "Item G5")
     AddItem(cat, img, "Item G6")
     AddItem(cat, img, "Item G7")
     AddItem(cat, img, "Item G8")
    cat = AddCategory("Category 6")
     AddItem(cat, img, "Item aa")
     AddItem(cat, img, "Item bb")
     AddItem(cat, img, "Item cc")
     AddItem(cat, img, "Item dd")
     AddItem(cat, img, "Item ee")
    cat = AddCategory("Category 7")
     AddItem(cat, img, "Item 123")
     AddItem(cat, img, "Item abc")

    sftTree1.Columns.MakeOptimal(0, False)
    sftTree1.RecalcHorizontalExtent()
    sftTree1.Initializing = False
End Sub

Private Function AddCategory(ByVal Category As String) As ItemClass
    Dim item As ItemClass = sftTree1.ItemCollection.Add()
    Dim cell As CellClass = item.Cells(0)
    cell.Appearance = BackgroundAppearanceEnum.ThemedSystemHeaderNeverPressed
    cell.Parts.Add(New ImagePartClass(m_PlusImage))
    cell.Parts.Add(New TextPartClass(Category))
    item.TagString = "This is a tooltip explaining " & Category
    Return item
End Function

Private Sub AddItem(ByVal cat As ItemClass, ByVal img As Image, ByVal ItemText As String)
    Dim item As ItemClass = cat.Add()
    Dim cell As CellClass = item.Cells(0)
    cell.Parts.Add(New ImagePartClass(img))
    cell.Parts.Add(New TextPartClass(ItemText))
    item.TagString = "This is a tooltip for an item labeled " & ItemText
End Sub

Private Sub ClickCategory(ByVal item As ItemClass)
    If item.Level = 0 Then
        Dim fWasExpanded As Boolean = item.Expanded
        If fWasExpanded Then
            item.Collapse(CollapseStyleEnum.All)
            item.Cells(0).Image = m_PlusImage
        Else
            item.Expand(ExpandStyleEnum.All)
            item.Cells(0).Image = m_MinusImage
        End If
        item.ScrollIntoView()
    Else
        ' selected an item
    End If
End Sub

Private Sub sftTree1_ItemClick(ByVal sender As Object, ByVal e As Softelvdm.SftTreeNET.ItemClickEventArgs) Handles sftTree1.ItemClick
    If e.MouseEv.Button = Windows.Forms.MouseButtons.Left And e.Area = ItemClickAreaEnum.CellSel Then
        ClickCategory(e.Item)
    End If
End Sub

Private Sub sftTree1_ItemDoubleClick(ByVal sender As Object, ByVal e As Softelvdm.SftTreeNET.ItemClickEventArgs) Handles sftTree1.ItemDoubleClick
    If e.MouseEv.Button = Windows.Forms.MouseButtons.Left And e.Area = ItemClickAreaEnum.CellSel Then
        ClickCategory(e.Item)
    End If
End Sub

Private Sub sftTree1_ShowToolTip(ByVal sender As Object, ByVal e As Softelvdm.SftTreeNET.ToolTipEventArgs) Handles sftTree1.ShowToolTip
    Dim item As ItemClass = e.Cell.OwningItem
    e.ToolTipText = item.TagString
End Sub

' This is a small helper routine to show all properties and fields of an object
Private Sub DumpValues(ByVal o As Object)
    Dim api() As PropertyInfo = o.GetType().GetProperties()
    For Each pi As PropertyInfo In api
        Debug.Write(" " & pi.Name & " " & pi.GetValue(o, New Object() {}))
    Next
    Dim afi() As FieldInfo = o.GetType().GetFields()
    For Each fi As FieldInfo In afi
        Dim t As Object = fi.GetValue(o)
        Dim s As String = "(null)"
        If Not t Is Nothing Then s = t.ToString()
        Debug.Write(" " & fi.Name & " " & s)
    Next
    Debug.WriteLine("")
End Sub

End Class