// VsPkg.cs : Implementation of OrigoVSIntegration // using System; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.ComponentModel.Design; using Microsoft.Win32; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.OLE.Interop; using Microsoft.VisualStudio.Shell; using ETHZurich.OrigoVSIntegration.Dialogs; namespace ETHZurich.OrigoVSIntegration { /// /// This is the class that implements the package exposed by this assembly. /// /// The minimum requirement for a class to be considered a valid package for Visual Studio /// is to implement the IVsPackage interface and register itself with the shell. /// This package uses the helper classes defined inside the Managed Package Framework (MPF) /// to do it: it derives from the Package class that provides the implementation of the /// IVsPackage interface and uses the registration attributes defined in the framework to /// register itself and its components with the shell. /// // This attribute tells the registration utility (regpkg.exe) that this class needs // to be registered as package. [PackageRegistration(UseManagedResourcesOnly = true)] // A Visual Studio component can be registered under different regitry roots; for instance // when you debug your package you want to register it in the experimental hive. This // attribute specifies the registry root to use if no one is provided to regpkg.exe with // the /root switch. [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\8.0")] // This attribute is used to register the informations needed to show the this package // in the Help/About dialog of Visual Studio. [InstalledProductRegistration(true, null, null, null)] // In order be loaded inside Visual Studio in a machine that has not the VS SDK installed, // package needs to have a valid load key (it can be requested at // http://msdn.microsoft.com/vstudio/extend/). This attributes tells the shell that this // package has a load key embedded in its resources. [ProvideLoadKey("Standard", "1.0", "Origo Visual Studio Integration", "ETH Zürich", 104)] // This attribute is needed to let the shell know that this package exposes some menus. [ProvideMenuResource(1000, 1)] [ProvideOptionPage(typeof(OrigoSettings), "Origo", "General", 1001, 1002, true)] [ProvideOptionPage(typeof(OrigoWorkitemSetting), "Origo", "Workitem Display", 1003, 1004, true)] [ProvideToolWindow(typeof(OrigoWorkitemToolwindow))] [Guid(GuidList.guidOrigoVSIntegrationPkgString)] public sealed class OrigoVSIntegration : Package, IVsInstalledProduct { /// /// Default constructor of the package. /// Inside this method you can place any initialization code that does not require /// any Visual Studio service because at this point the package object is created but /// not sited yet inside Visual Studio environment. The place to do all the other /// initialization is the Initialize method. /// public OrigoVSIntegration() { Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString())); } ///////////////////////////////////////////////////////////////////////////// // Overriden Package Implementation #region Package Members /// /// Initialization of the package; this method is called right after the package is sited, so this is the place /// where you can put all the initilaization code that rely on services provided by VisualStudio. /// protected override void Initialize() { Trace.WriteLine (string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString())); base.Initialize(); // Add our command handlers for menu (commands must exist in the .ctc file) OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if ( null != mcs ) { // Create the command for the menu item. //show origo main dialog CommandID menuCommandID = new CommandID(GuidList.guidOrigoVSIntegrationCmdSet, (int)PkgCmdIDList.cmdidOrigo); MenuCommand menuItem = new MenuCommand( new EventHandler(MenuItemCallback), menuCommandID ); mcs.AddCommand( menuItem ); //show workitem display menuCommandID = new CommandID(GuidList.guidOrigoVSIntegrationCmdSet, (int)PkgCmdIDList.cmdidOrigoToolwnd); menuItem = new MenuCommand(new EventHandler(ShowToolWindow), menuCommandID); mcs.AddCommand(menuItem); } } #endregion /// /// This function is the callback used to execute a command when the a menu item is clicked. /// See the Initialize method to see how the menu item is associated to this function using /// the OleMenuCommandService service and the MenuCommand class. /// private void MenuItemCallback(object sender, EventArgs e) { OrigoMainDialog mainDialog = new OrigoMainDialog(this); mainDialog.ShowDialog(); } private void ShowToolWindow(object sender, EventArgs e) { // Get the instance number 0 of this tool window. This window is single instance so this instance // is actually the only one. // The last flag is set to true so that if the tool window does not exists it will be created. ToolWindowPane window = this.FindToolWindow(typeof(OrigoWorkitemToolwindow), 0, true); if ((null == window) || (null == window.Frame)) { throw new COMException("Could not create OrigoWorkitemToolwindow"); } IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); } #region IVsInstalledProduct Member public int IdBmpSplash(out uint pIdBmp) { pIdBmp = 500; return Microsoft.VisualStudio.VSConstants.S_OK; } public int IdIcoLogoForAboutbox(out uint pIdIco) { pIdIco = 600; return Microsoft.VisualStudio.VSConstants.S_OK; } public int OfficialName(out string pbstrName) { pbstrName = "Origo VS Integration"; return Microsoft.VisualStudio.VSConstants.S_OK; } public int ProductDetails(out string pbstrProductDetails) { pbstrProductDetails = "Origo IDE integration for Visual Studio 2005"; return Microsoft.VisualStudio.VSConstants.S_OK; } public int ProductID(out string pbstrPID) { pbstrPID = "Origo VS Integration ID"; return Microsoft.VisualStudio.VSConstants.S_OK; } #endregion } }