views:

564

answers:

4

I'm currently using DPack as this adds a "Collapse All Projects" option to the Solution node in Solution Explorer. It works pretty well but can take a while to execute and doesn't always collapse everything fully.

Are there any better alternatives? Preferably free and easy to install/setup. There are lots out there but which work best and don't have any bugs or performance issues.

+5  A: 

Power commands for visual studio will do the trick. Didn't notice any performance\stability issues with them.

aku
It's worth noting that this only works with Visual Studio 2008
tjrobinson
+5  A: 

For VS2005, I've been using CoolCommands 4.0. The feature description is more complete for the older 3.0 version. Version 3 had an .msi installer. Version 4 is a .zip file (which was easier for my environment anyway).

My favorite features (a subset of the complete list):

  • From the Solution explorer:
    • Collapse All Projects
    • Open containing folder (Project/file level only)
  • From the filename tabs above the editor
    • Locate in Solution Explorer
  • From the context menu in the editor
    • Demo Font
Andy Stevenson
CoolCommands is Open Source so you can add more features :-).
AlePani
Where's the open source version hosted?
tjrobinson
CoolCommands doesn't collapse all projects if you have projects underneath Solution Folders.
tjrobinson
+3  A: 

Here is a better list of features for CoolCommands 4.0.

To install it for VS 2005, execute the include setup.bat.

To install it for VS 2008, modify the following line from

regpkg CoolCommands.dll /codebase

to:

regpkg CoolCommands.dll /root:Software\Microsoft\VisualStudio\9.0 /codebase
Mario
A: 

I use the following Macro which works in Visual Studio 2005 and Visual Studio 2008:

  1. View > Other Windows > Macro Explorer (Alt+F8)
  2. Right-click on the MyMacros node in Macro Explorer
  3. New Module...
  4. Name it CollapseAll (or whatever you like)
  5. Replace the default code with the code shown below
  6. File > Save CollapseAll (Ctrl+S)
  7. Close the Macro editor

To set up a keyboard shortcut:

  1. Tools > Customize... > Commands
  2. Keyboard...
  3. Show commands containing: Macros.MyMacros.CollapseAll.CollapseAll
  4. Assign a keyboard shortcut (I use Alt+C)

Code

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public Module CollapseAll
    Sub CollapseAll()

        ' Get the the Solution Explorer tree
        Dim solutionExplorer As UIHierarchy
        solutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

        ' Check if there is any open solution
        If (solutionExplorer.UIHierarchyItems.Count = 0) Then
            Return
        End If

        ' Get the top node (the name of the solution)
        Dim rootNode As UIHierarchyItem = solutionExplorer.UIHierarchyItems.Item(1)

        rootNode.DTE.SuppressUI = True

        ' Collapse each project node
        Collapse(rootNode, solutionExplorer)

        ' Select the solution node, or else when you click 
        ' on the solution window
        ' scrollbar, it will synchronize the open document 
        ' with the tree and pop
        ' out the corresponding node which is probably not what you want.

        rootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
        rootNode.DTE.SuppressUI = False

    End Sub

    Sub CollapseSelected()

        ' Get the the Solution Explorer tree
        Dim solutionExplorer As UIHierarchy
        solutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

        ' Check if there is any open solution
        If (solutionExplorer.UIHierarchyItems.Count = 0) Then
            Return
        End If

        ' Get the top node (the name of the solution)
        Dim selected As Array = solutionExplorer.SelectedItems

        If (selected.Length = 0) Then Return

        Dim rootNode As UIHierarchyItem = selected(0)
        rootNode.DTE.SuppressUI = True

        ' Collapse each project node
        Collapse(rootNode, solutionExplorer)

        ' Select the solution node, or else when you click 
        ' on the solution window
        ' scrollbar, it will synchronize the open document 
        ' with the tree and pop
        ' out the corresponding node which is probably not what you want.

        rootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
        rootNode.DTE.SuppressUI = False

    End Sub

    Private Sub Collapse(ByVal item As UIHierarchyItem, ByRef solutionExplorer As UIHierarchy)

        For Each innerItem As UIHierarchyItem In item.UIHierarchyItems
            If innerItem.UIHierarchyItems.Count > 0 Then

                ' Re-cursive call
                Collapse(innerItem, solutionExplorer)

                ' Collapse
                If innerItem.UIHierarchyItems.Expanded Then
                    innerItem.UIHierarchyItems.Expanded = False
                    If innerItem.UIHierarchyItems.Expanded = True Then
                        ' Bug in VS 2005
                        innerItem.Select(vsUISelectionType.vsUISelectionTypeSelect)
                        solutionExplorer.DoDefaultAction()
                    End If
                End If

            End If
        Next

    End Sub

End Module

I didn't write this code and I'm not sure where this code came from, but there are variations of it online.

tjrobinson