Click here to Skip to main content
Click here to Skip to main content

Mole For Visual Studio - With Editing - Visualize All Project Types

By , , , 29 Jan 2008
 
mole4_2_pdf_manaul.zip
Mole v42.pdf
moleforvisualstudio_4_1_vs2005_sourceandtestbenches.zip
Mole For Visual Studio
Mole.Visualizer
bin
Custom Controls
Data Source
Image Processing
Data
Debugger Visualizer
Editors
Enums Constants
Event Args
Extended Controls
Images
Edit.ico
MoleVisualUnavailable.gif
Mole.Visualizer.csi
Mole.Visualizer.suo
Mole.Visualizer.vbproj.user
My Project
Application.myapp
Settings.settings
Settings
Visualizer UI
XSLT
Mole.WCF.TestBench
Client
My Project
Application.myapp
Settings.settings
HelloIndigo
My Project
Application.myapp
Settings.settings
Mole.WCF.TestBench.suo
ServiceHost
My Project
Application.myapp
Settings.settings
Mole.WinForms.TestBench
Mole.WinForms.TestBench.csi
Mole.WinForms.TestBench.suo
Mole.WinForms.TestBench.vbproj.user
My Project
Application.myapp
Settings.settings
Mole.WPF.TestBench
bach.jpg
mole.gif
Mole.TestBench.csi
Mole.WPF.TestBench.csi
Mole.WPF.TestBench.vbproj.user
My Project
Settings.settings
MoleASPNETTestBench
mole.gif
MoleASPNETTestBench.vbproj.user
My Project
Application.myapp
Settings.settings
moleforvisualstudio_4_1_vs2008_sourceandtestbenches.zip
Edit.ico
MoleVisualUnavailable.gif
Mole.Visualizer.csi
Mole.Visualizer.suo
Mole.Visualizer.vbproj.user
Application.myapp
Settings.settings
Application.myapp
Settings.settings
Application.myapp
Settings.settings
Mole.WCF.TestBench.suo
Application.myapp
Settings.settings
Mole.WinForms.TestBench.csi
Mole.WinForms.TestBench.suo
Mole.WinForms.TestBench.vbproj.user
Application.myapp
Settings.settings
bach.jpg
mole.gif
Mole.TestBench.csi
Mole.WPF.TestBench.csi
Mole.WPF.TestBench.vbproj.user
Settings.settings
mole.gif
MoleASPNETTestBench.vbproj.user
Application.myapp
Settings.settings
moleforvisualstudio_4_2_vs2005_sourceandtestbenches.zip
Edit.ico
MoleVisualUnavailable.gif
Mole.Visualizer.csi
Mole.Visualizer.suo
Mole.Visualizer.vbproj.user
Application.myapp
Settings.settings
Application.myapp
Settings.settings
Application.myapp
Settings.settings
Mole.WCF.TestBench.suo
Application.myapp
Settings.settings
Mole.WF. TestBench
Mole.WF. TestBench
Mole.WF.TestBench.vbproj.user
My Project
MySettings.settings
Mole.WF.TestBench.suo
Mole.WinForms.TestBench.csi
Mole.WinForms.TestBench.suo
Mole.WinForms.TestBench.vbproj.user
Application.myapp
Settings.settings
bach.jpg
mole.gif
Mole.TestBench.csi
Mole.WPF.TestBench.csi
Mole.WPF.TestBench.vbproj.user
Settings.settings
mole.gif
MoleASPNETTestBench.suo
MoleASPNETTestBench.vbproj.user
Application.myapp
Settings.settings
moleforvisualstudio_4_2_vs2008_sourceandtestbenches.zip
Edit.ico
MoleVisualUnavailable.gif
Mole.Visualizer.csi
Mole.Visualizer.suo
Mole.Visualizer.vbproj.user
Application.myapp
Settings.settings
Application.myapp
Settings.settings
Application.myapp
Settings.settings
Mole.WCF.TestBench.suo
Application.myapp
Settings.settings
Mole.WF.TestBench.vbproj.user
MySettings.settings
Mole.WF.TestBench.suo
Mole.WinForms.TestBench.csi
Mole.WinForms.TestBench.suo
Mole.WinForms.TestBench.vbproj.user
Application.myapp
Settings.settings
bach.jpg
mole.gif
Mole.TestBench.csi
Mole.WPF.TestBench.csi
Mole.WPF.TestBench.vbproj.user
Settings.settings
mole.gif
MoleASPNETTestBench.suo
MoleASPNETTestBench.vbproj.user
Application.myapp
Settings.settings
moleforvisualstudio_4_vs2005_sourceandtestbenches.zip
TransferDataRequest.vb.bak
Enums.vb.bak
Edit.ico
MoleVisualUnavailable.gif
Mole.Visualizer.csi
Mole.Visualizer.suo
Mole.Visualizer.vbproj.user
Application.myapp
Settings.settings
frmMole.vb.bak
Application.myapp
Settings.settings
Application.myapp
Settings.settings
Mole.WCF.TestBench.suo
Application.myapp
Settings.settings
Mole.WinForms.TestBench.csi
Mole.WinForms.TestBench.vbproj.user
Application.myapp
Settings.settings
bach.jpg
Mole.TestBench.csi
Mole.WPF.TestBench.csi
Mole.WPF.TestBench.vbproj.user
Settings.settings
mole.gif
MoleASPNETTestBench.vbproj.user
Application.myapp
Settings.settings
moleforvisualstudio_4_vs2008_sourceandtestbenches.zip
TransferDataRequest.vb.bak
Enums.vb.bak
Edit.ico
MoleVisualUnavailable.gif
Mole.Visualizer.csi
Mole.Visualizer.suo
Mole.Visualizer.vbproj.user
Application.myapp
Settings.settings
frmMole.vb.bak
Application.myapp
Settings.settings
Application.myapp
Settings.settings
Mole.WCF.TestBench.suo
Application.myapp
Settings.settings
Mole.WinForms.TestBench.csi
Mole.WinForms.TestBench.vbproj.user
Application.myapp
Settings.settings
bach.jpg
Mole.TestBench.csi
Mole.WPF.TestBench.csi
Mole.WPF.TestBench.vbproj.user
Settings.settings
mole.gif
MoleASPNETTestBench.vbproj.user
Application.myapp
Settings.settings
molev41_pdf_manual.zip
Mole v41.pdf
molev4pdfmanual.zip
Mole v4.pdf
molevisualizer_4_1_vs2005_release.zip
Mole.Visualizer.dll
molevisualizer_4_1_vs2008_release.zip
Mole.Visualizer.dll
molevisualizer_4_2_vs2005_release.zip
Mole.Visualizer.dll
molevisualizer_4_2_vs2008_release.zip
Mole.Visualizer.dll
molevisualizer_4_vs2005_release.zip
Mole.Visualizer.dll
molevisualizer_4_vs2008_release.zip
Mole.Visualizer.dll
mole_v41.zip
Mole v41.pdf
Imports System.Windows.Forms
Imports System.ComponentModel

Public Class MoleTreeView
    Inherits TreeView

#Region " Declarations "

    Private _bolShowNamespaces As Boolean = False
    Private _objInitialNode As MoleTreeNode
    Private _objTree As Tree

#End Region

#Region " Properties "

    <Description("Enable to display the full type names in the tree view"), Category("Custom"), DefaultValue(False)> _
    Public Property ShowNamespaces() As Boolean
        Get
            Return _bolShowNamespaces
        End Get
        Set(ByVal Value As Boolean)
            _bolShowNamespaces = Value
        End Set
    End Property

    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), _
     Browsable(False)> _
    Public Property TreeData() As Tree
        Get
            Return _objTree
        End Get
        Set(ByVal value As Tree)

            If value Is Nothing Then
                Throw New ArgumentNullException("TreeData")
            End If

            _objTree = value
            Me.Nodes.Clear()

            Dim objRootMoleTreeNode As MoleTreeNode = New MoleTreeNode(_objTree.RootElement, Me.ShowNamespaces)
            Me.Nodes.Add(objRootMoleTreeNode)
            LocateInitialNode(objRootMoleTreeNode, _objTree.InitialElementId)

            If _objInitialNode IsNot Nothing Then
                _objInitialNode.BackColor = Drawing.Color.LightGreen
                SelectInitialNode()
            End If

            SelectInitialNode()
        End Set
    End Property

#End Region

#Region " Methods "

    ''' <summary>
    ''' This is Josh Smith's awesome lazy load code.  I was using a different approach but his is just better so I'm going Josh here.
    ''' </summary>
    Private Sub LazyLoadChildNodes(ByVal objParentMoleTreeNode As MoleTreeNode)
        objParentMoleTreeNode.Nodes.Clear()

        For Each objTreeElement As TreeElement In objParentMoleTreeNode.TreeElement.Children
            objParentMoleTreeNode.Nodes.Add(New MoleTreeNode(objTreeElement, Me.ShowNamespaces))
        Next

    End Sub

    ''' <summary>
    ''' This is Josh Smith's awesome lazy load code.  I was using a different approach but his is just better so I'm going Josh here.
    ''' </summary>
    Private Sub LocateInitialNode(ByVal objMoleTreeNode As MoleTreeNode, ByVal intInitialElementID As Integer)

        If objMoleTreeNode.TreeElement.Id = intInitialElementID Then
            _objInitialNode = objMoleTreeNode

        Else
            LazyLoadChildNodes(objMoleTreeNode)

            Dim objTargetMoleTreeNode As MoleTreeNode = Nothing

            For Each objChildNode As MoleTreeNode In objMoleTreeNode.Nodes

                If intInitialElementID < objChildNode.TreeElement.Id Then
                    Exit For
                End If

                objTargetMoleTreeNode = objChildNode
            Next

            If objTargetMoleTreeNode IsNot Nothing Then
                LocateInitialNode(objTargetMoleTreeNode, intInitialElementID)
            End If

        End If

    End Sub

    Private Sub SetText(ByVal objMoleTreeNode As MoleTreeNode, ByVal bolShowNamespaces As Boolean)
        objMoleTreeNode.SetText(bolShowNamespaces)

        For Each obj As TreeNode In objMoleTreeNode.Nodes

            If obj.Text <> STRING_MOLE_DUMMY_TREENODE_MARKER AndAlso TypeOf obj Is MoleTreeNode Then
                SetText(DirectCast(obj, MoleTreeNode), bolShowNamespaces)
            End If

        Next

    End Sub

    Public Sub SelectFirstNode()

        If Me.Nodes.Count <> 0 Then
            Me.SelectedNode = Me.Nodes(0)
            Me.SelectedNode.EnsureVisible()
            Me.Focus()
        End If

    End Sub

    Public Sub SelectInitialNode()

        If _objInitialNode IsNot Nothing Then
            Me.SelectedNode = _objInitialNode
            Me.SelectedNode.EnsureVisible()
            Me.Focus()
        End If

    End Sub

    Public Sub SetShowNamespaces(ByVal bolShowNamespaces As Boolean)
        Me.ShowNamespaces = bolShowNamespaces

        If Me.Nodes.Count > 0 Then

            For Each obj As MoleTreeNode In Me.Nodes
                SetText(obj, bolShowNamespaces)
            Next

        End If

    End Sub

    Protected Overrides Sub OnBeforeExpand(ByVal e As System.Windows.Forms.TreeViewCancelEventArgs)
        MyBase.OnBeforeExpand(e)

        If e.Node IsNot Nothing AndAlso e.Node.Nodes.Count = 1 AndAlso String.Compare(e.Node.Nodes(0).Text, STRING_MOLE_DUMMY_TREENODE_MARKER, StringComparison.Ordinal) = 0 Then
            LazyLoadChildNodes(DirectCast(e.Node, MoleTreeNode))
        End If

    End Sub

#End Region

End Class

By viewing downloads associated with this article you agree to the Terms of use and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Authors

Andrew Smith
Architect Infragistics, Inc.
United States United States
Andrew currently works as an architect for Infragistics working with windows forms and WPF. You can check out his blog here.

Josh Smith
Software Developer (Senior) Cynergy Systems
United States United States
Josh creates software, for iOS and Windows.
 
He works at Cynergy Systems as a Senior Experience Developer.
 
Read his iOS Programming for .NET Developers[^] book to learn how to write iPhone and iPad apps by leveraging your existing .NET skills.
 
Use his Master WPF[^] app on your iPhone to sharpen your WPF skills on the go.
 
Check out his Advanced MVVM[^] book.
 
Visit his WPF blog[^] or stop by his iOS blog[^].
Follow on   Twitter

Karl Shifflett
Architect Gayle Manufacturing Company
United States United States
Karl loves .NET, WPF, WCF, ASP.NET, VB.NET and C#.
 
Awards:
 
  • December 2008 VB.NET Code Project Article Award
  • 2009 Code Project MVP
  • 2008 Code Project MVP
  • 2008 Microsoft MVP - Client App Dev
  • December 2007 VB.NET Code Project Article Award
  • Gold Medal Winner at IBM's 1998 PROIV Programming Contest in Las Vegas
Click here to check out my Blog
 
Click here to learn about Mole 2010 debugging tool for Visual Studio 2010
 
Click here to read about XAML Power Toys
 

Just a grain of sand on the worlds beaches.

Follow on   Twitter

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130617.1 | Last Updated 29 Jan 2008
Article Copyright 2007 by Andrew Smith, Josh Smith, Karl Shifflett
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid