コード例 #1
0
 protected override void OnExec()
 {
     if (template.IsVisibleFromContextMenu)
     {
         IConfigurationService configService =
             (IConfigurationService)ServiceProvider.GetService(typeof(IConfigurationService), true);
         if (template.Kind == TemplateKind.Project)
         {
             IVsSolution3             solution = (IVsSolution3)ServiceProvider.GetService(typeof(SVsSolution), true);
             IVsBrowseProjectLocation browseProjectLocation = null;
             uint cnpvdeFlags = (uint)(__VSCREATENEWPROJVIADLGEXFLAGS.VNPVDE_ALWAYSADDTOSOLUTION | __VSCREATENEWPROJVIADLGEXFLAGS.VNPVDE_ADDNESTEDTOSELECTION);
             //browseProjectLocation = this;
             //cnpvdeFlags |= (uint)(__VSCREATENEWPROJVIADLGEXFLAGS.VNPVDE_OVERRIDEBROWSEBUTTON);
             solution.CreateNewProjectViaDlgEx(Microsoft.Practices.RecipeFramework.VisualStudio.Properties.Resources.IDD_ADDPROJECTDLG,
                                               null,
                                               configService.CurrentPackage.Caption,
                                               this.template.Name,
                                               null,
                                               cnpvdeFlags,
                                               browseProjectLocation);
         }
         else if (template.Kind == TemplateKind.ProjectItem)
         {
             uint                  itemid            = 0;
             IVsProject            vsProject         = DteHelper.GetCurrentSelection(this.ServiceProvider, out itemid) as IVsProject;
             IVsAddProjectItemDlg2 addProjectItemDlg =
                 (IVsAddProjectItemDlg2)ServiceProvider.GetService(typeof(SVsAddProjectItemDlg), true);
             __VSADDITEMFLAGS addItemsFlags = __VSADDITEMFLAGS.VSADDITEM_AddNewItems | __VSADDITEMFLAGS.VSADDITEM_SuggestTemplateName;
             Guid             projectGuid   = this.template.ProjectFactory;
             string           location      = String.Empty;
             string           filter        = String.Empty;
             int dontShowAgain = VSConstantsEx.TRUE;
             addProjectItemDlg.AddProjectItemDlgTitled(itemid,
                                                       ref projectGuid,
                                                       vsProject,
                                                       (uint)addItemsFlags,
                                                       null,
                                                       configService.CurrentPackage.Caption,
                                                       this.template.Name,
                                                       ref location,
                                                       ref filter,
                                                       out dontShowAgain);
         }
     }
 }
コード例 #2
0
        public static bool AddProjectItemDialog(
            IServiceProvider provider,
            string title,
            string templateName, bool addExisting = false)
        {
            Guard.ArgumentNotNull(provider, "provider");
            Guard.ArgumentNotNullOrEmptyString(title, "title");
            Guard.ArgumentNotNullOrEmptyString(templateName, "templateName");

            try
            {
                IVsSolution solution = provider.GetService(typeof(IVsSolution)) as IVsSolution;
                uint        pitemid  = 0;
                using (HierarchyNode hierarchy = new HierarchyNode(solution, DteHelper2.GetCurrentSelection(provider, out pitemid)))
                    using (HierarchyNode child = new HierarchyNode(hierarchy, pitemid))
                    {
                        Guid       rguidProject = hierarchy.TypeGuid;
                        IVsProject project      = child.IsSolution ? null : (IVsProject)child.Hierarchy;

                        string strFilter    = String.Empty;
                        string templatePath = GetTemplatePathFromProject(hierarchy);
                        int    iDontShowAgain;

                        IVsAddProjectItemDlg2 addProjectItemDlg2 = (IVsAddProjectItemDlg2)provider.GetService(typeof(SVsAddProjectItemDlg));

                        uint uiFlags;
                        if (addExisting)
                        {
                            uiFlags = (uint)(__VSADDITEMFLAGS.VSADDITEM_AddExistingItems |
                                             __VSADDITEMFLAGS.VSADDITEM_ProjectHandlesLinks |
                                             __VSADDITEMFLAGS.VSADDITEM_AllowStickyFilter |
                                             __VSADDITEMFLAGS.VSADDITEM_ShowLocationField);
                            //strFilter = "Data Contract (*.datacontract)";
                        }
                        else
                        {
                            uiFlags = (uint)(__VSADDITEMFLAGS.VSADDITEM_AddNewItems |
                                             __VSADDITEMFLAGS.VSADDITEM_SuggestTemplateName |
                                             __VSADDITEMFLAGS.VSADDITEM_AllowHiddenTreeView |
                                             __VSADDITEMFLAGS.VSADDITEM_AllowStickyFilter |
                                             __VSADDITEMFLAGS.VSADDITEM_ShowLocationField);
                        }

                        ErrorHandler.ThrowOnFailure(
                            addProjectItemDlg2.AddProjectItemDlgTitled(
                                child.IsRoot ? VSConstants.VSITEMID_ROOT : pitemid,
                                ref rguidProject,
                                project,
                                uiFlags,
                                string.Format(CultureInfo.CurrentCulture, title, hierarchy.Name),
                                templatePath,
                                templateName,
                                ref strLocation,
                                ref strFilter,
                                out iDontShowAgain),
                            VSConstants.OLE_E_PROMPTSAVECANCELLED);
                        return(true);
                    }
            }
            catch (Exception error)
            {
                Logger.Write(error);
            }
            return(false);
        }