Imports System
Imports EnvDTE
Imports Microsoft.VisualBasic

Namespace ToolboxSnippetsInstaller
	''' <summary>
	''' Summary description for ToolboxInstaller.
	''' </summary>
	Public Class ToolboxInstaller
		Public Sub New()
			'
			' TODO: Add constructor logic here
			'
		End Sub

		''' <summary>
        ''' Metoda ładuje dowolną liczbę fragmentów kodu do okienka narzędziowego
		''' </summary>
		Public Shared Sub LoadSnippets()
            ' Zarejestrowanie filtra komunikatów OLE, by uniknąć wyjątków "call rejected"
			MessageFilter.Register()

            ' Pobranie odwołania do obiektu DTE
            Dim latestDTE As Type = Type.GetTypeFromProgID("VisualStudio.DTE.7.1")
            Dim env As EnvDTE.DTE = CType(Activator.CreateInstance(latestDTE), EnvDTE.DTE)

            ' Pobranie okna narzędziowego Toolbox
            Dim win As Window = env.Windows.Item(EnvDTE.Constants.vsWindowKindToolbox)

            ' Pobranie okna narzędziowego
			Dim toolBox As ToolBox = CType(win.Object, ToolBox)

			Dim tab As ToolBoxTab = Nothing

            ' Przejście przez kolekcję zakładek i sprawdzenie, czy odpowiednia zakładka już istnieje
			For Each tb As ToolBoxTab In toolBox.ToolBoxTabs
                If tb.Name = "Nasze kontrolki" Then
                    tab = tb
                End If
            Next tb

            ' Zakładka nie istnieje, więc trzeba ją dodać
			If tab Is Nothing Then
                tab = toolBox.ToolBoxTabs.Add("Nasze kontrolki")
			End If

            ' Wyświetlenie okna właściwości, by ustrzec się błędów
			env.ExecuteCommand("View.PropertiesWindow","")

            ' Uaktywnienie zakładki (ponieważ metoda Add dodaje kontrolki tylko do aktywnej zakładki)		
			tab.Activate()

            ' Wybranie pierwszej pozycji (jest to jedyny sposób, by wszystko poszło dobrze)
			tab.ToolBoxItems.Item(1).Select()

            ' Dodanie do okna narzędziowego nowych pozycji - własnych kontrolek
			Dim tbi1 As ToolBoxItem = tab.ToolBoxItems.Add("not used", "C:\windows\Microsoft.NET\Framework\v1.1.4322\System.Web.dll", vsToolBoxItemFormat.vsToolBoxItemFormatDotNETComponent)

            ' Zamknięcie środowiska
			env.Quit()
            ' Odłączenie filtra komunikatów
			MessageFilter.Revoke()

		End Sub
	End Class
End Namespace
