Perşembe, Ekim 07, 2010

Tek vuruşta Solution Explorer daki tüm açılır nesneleri Collapsed durumuna getirebilirmisiniz? Bu işkenceden bedavaya kurtulun!



Visual Studio solution açıldığında explorer da tüm nesnelerin açık durumda gelmesi bende bir süredir karın ağrısına sebep oluyordu. Microsoftun böyle bariz şeyleri pakete koymamasını da anlamak mümkün değil. Buna kesin ve etkili çözümü bulduğumda buraya not geçmeyi unutmuşum. Birkaç değerli abimizin scriptlerinden derlenerek hazırlanan hicaz makamındaki "Collapse Solution Explorer" adlı toolbar butonu eserini icra edeceğiz :p


Tools -> Macros -> Macro Explorer açıyoruz.
"My Macros" sağ tık new module diyip Collapse ismini verdiğimiz modul içeriğine aşağıdakini yerleştiriyoruz


Imports System
Imports EnvDTE
Imports System.Diagnostics

Public Module Collapse
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

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


Sonrasında Toolbarların orada boş biryere sağ tıklayıp customize diyoruz.

Toolbars sekmesinde new diyerek kendi toolbarımızı yaratıyoruz. (Örn: Mahmut)

Commands sekmesine geçip MyMacros.Collapse.CollapseAll nesnesini yeni oluşan Mahmut toolbarının üstüne sürüklüyoruz.

Toolbarımızı IDE üzerinde uygun bir yere yrleştiriyoruz. Ben solution explorerın sağ üstünü tercih ediyorum.

Sript her türlü çalışıyor. Çalışma süresini çok büyük solution larda 30 saniyeye kadar vurduğunu gördüm ama ederi bu zaten tüm nodları recursive olarak kapatıyor.
Az laf, çok iş, daha bir otomasyon



Teknoloji geliştirirken, Ar-Ge yaparken, yazılım yaparken veya genel olarak katma değeri yüksek bir iş yaparken, bir yandan da formaliteleri azaltıp otomasyonu artırıcı işlere zaman ayırmamanın maliyeti bence sandığımızdan daha yüksek. Verimliliği artıramıyorsak, büyük sistemler üretmek imkansız hale gelecektir. Buna küçük bir örnek olarak aklıma gelmişken not alacağım bir şey var. Visual Studio da proje şablonları ile oynayarak her yeni proje yaratmada tekrarladığımız hareketleri azaltabiliriz. Bunun için aşağıdaki folderlardan gerekli proje tipini bulup düzenlemek gerekiyor.

VS 2008 için

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplatesCache


Ben düzenlemeyle scriptle fln uğraşmak istemiyorum diyorsanız, ozaman kendi şablonunuzu yarataacksınız. Kendi yazılım altyapınızın ihtiyacını karşılayacak türden proje tiplerini bu şekilde yaratıp, şirketinizdeki farklı proje ekiplerinin kullanımına sunabilirsiniz. Önce yeni bir proje yaratıp bunu istediğiniz formata getiriyorsunuz. Referanslar ekleme, assamblyinfo verme, dizinler ve sınıflar yaratma vs. işleri tamamlandıktan sonra projeyi kaydedip, File -> Export template e tıklıyorsunuz. Yönergeleri takip ederek proje şablonunuza kavuşuyorsunuz.