/// <summary> /// Execute Addin Command /// </summary> /// <param name="cmdName"> /// Command name /// </param> /// <param name="executeOption"> /// Execute options /// </param> /// <param name="variantIn"> /// object variant in /// </param> /// <param name="variantOut"> /// object variant out /// </param> /// <param name="handled"> /// Handled true or false /// </param> public void Exec(string cmdName, vsCommandExecOption executeOption, ref object variantIn, ref object variantOut, ref bool handled) { handled = false; if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) { if (cmdName == "Xsd2Code.Addin.Connect.Xsd2CodeAddin") { UIHierarchy uIH = this.applicationObjectField.ToolWindows.SolutionExplorer; var item = (UIHierarchyItem)((Array)uIH.SelectedItems).GetValue(0); UIHierarchyItems items = item.UIHierarchyItems; ProjectItem proitem = uIH.DTE.SelectedItems.Item(1).ProjectItem; Project proj = proitem.ContainingProject; // Try to get default nameSpace string defaultNamespace = string.Empty; uint? targetFramework = 0; bool? isSilverlightApp = false; try { defaultNamespace = proj.Properties.Item("DefaultNamespace").Value as string; targetFramework = proj.Properties.Item("TargetFramework").Value as uint?; isSilverlightApp = proj.Properties.Item("SilverlightProject.IsSilverlightApplication").Value as bool?; } catch { } CodeModel codeModel = proitem.ContainingProject.CodeModel; string fileName = proitem.FileNames[0]; try { proitem.Save(fileName); } catch (Exception) { } TargetFramework framework = TargetFramework.Net20; if (targetFramework.HasValue) { uint target = targetFramework.Value; switch (target) { case 196608: framework = TargetFramework.Net30; break; case 196613: framework = TargetFramework.Net35; break; case 262144: framework = TargetFramework.Net40; break; } } if (isSilverlightApp.HasValue) { if (isSilverlightApp.Value) { framework = TargetFramework.Silverlight; } } var frm = new FormOption(); frm.Init(fileName, proj.CodeModel.Language, defaultNamespace, framework); DialogResult result = frm.ShowDialog(); GeneratorParams generatorParams = frm.GeneratorParams.Clone(); generatorParams.InputFilePath = fileName; var gen = new GeneratorFacade(generatorParams); // Close file if open in IDE ProjectItem projElmts; bool found = FindInProject(proj.ProjectItems, gen.GeneratorParams.OutputFilePath, out projElmts); if (found) { Window window = projElmts.Open(Constants.vsViewKindCode); window.Close(vsSaveChanges.vsSaveChangesNo); } if (fileName.Length > 0) { if (result == DialogResult.OK) { Result <string> generateResult = gen.Generate(); string outputFileName = generateResult.Entity; if (!generateResult.Success) { MessageBox.Show(generateResult.Messages.ToString(), "XSD2Code", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { if (!found) { projElmts = proitem.Collection.AddFromFile(outputFileName); } if (frm.OpenAfterGeneration) { Window window = projElmts.Open(Constants.vsViewKindCode); window.Activate(); window.SetFocus(); try { // this.applicationObjectField.DTE.ExecuteCommand("Edit.RemoveAndSort", ""); applicationObjectField.DTE.ExecuteCommand("Edit.FormatDocument", string.Empty); } catch (Exception) { } } } } } handled = true; return; } } }
/// <summary> /// Execute Addin Command /// </summary> /// <param name="cmdName"> /// Command name /// </param> /// <param name="executeOption"> /// Execute options /// </param> /// <param name="variantIn"> /// object variant in /// </param> /// <param name="variantOut"> /// object variant out /// </param> /// <param name="handled"> /// Handled true or false /// </param> public void Exec(string cmdName, vsCommandExecOption executeOption, ref object variantIn, ref object variantOut, ref bool handled) { handled = false; if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) { if (cmdName == "Xsd2Code.Addin.Connect.Xsd2CodeAddin") { UIHierarchy uIH = this.applicationObjectField.ToolWindows.SolutionExplorer; var item = (UIHierarchyItem)((Array)uIH.SelectedItems).GetValue(0); UIHierarchyItems items = item.UIHierarchyItems; ProjectItem proitem = uIH.DTE.SelectedItems.Item(1).ProjectItem; Project proj = proitem.ContainingProject; // Try to get default nameSpace string defaultNamespace = string.Empty; uint? targetFramework = 0; bool? isSilverlightApp = false; try { defaultNamespace = proj.Properties.Item("DefaultNamespace").Value as string; targetFramework = proj.Properties.Item("TargetFramework").Value as uint?; isSilverlightApp = proj.Properties.Item("SilverlightProject.IsSilverlightApplication").Value as bool?; } catch { } CodeModel codeModel = proitem.ContainingProject.CodeModel; string fileName = proitem.FileNames[0]; try { proitem.Save(fileName); } catch (Exception) { } TargetFramework framework = TargetFramework.Net20; if (targetFramework.HasValue) { uint target = targetFramework.Value; switch (target) { case 196608: framework = TargetFramework.Net30; break; case 196613: framework = TargetFramework.Net35; break; case 262144: framework = TargetFramework.Net40; break; } } if (isSilverlightApp.HasValue) { if (isSilverlightApp.Value) { framework = TargetFramework.Silverlight; } } var frm = new FormOption(); frm.Init(fileName, proj.CodeModel.Language, defaultNamespace, framework); DialogResult result = frm.ShowDialog(); GeneratorParams generatorParams = frm.GeneratorParams.Clone(); generatorParams.InputFilePath = fileName; var gen = new GeneratorFacade(generatorParams); // Close file if open in IDE ProjectItem projElmts; bool found = FindInProject(proj.ProjectItems, gen.GeneratorParams.OutputFilePath, out projElmts); if (found) { Window window = projElmts.Open(Constants.vsViewKindCode); window.Close(vsSaveChanges.vsSaveChangesNo); } if (fileName.Length > 0) { if (result == DialogResult.OK) { Result<string> generateResult = gen.Generate(); string outputFileName = generateResult.Entity; if (!generateResult.Success) MessageBox.Show(generateResult.Messages.ToString(), "XSD2Code", MessageBoxButtons.OK, MessageBoxIcon.Error); else { if (!found) { projElmts = proitem.Collection.AddFromFile(outputFileName); } if (frm.OpenAfterGeneration) { Window window = projElmts.Open(Constants.vsViewKindCode); window.Activate(); window.SetFocus(); try { // this.applicationObjectField.DTE.ExecuteCommand("Edit.RemoveAndSort", ""); applicationObjectField.DTE.ExecuteCommand("Edit.FormatDocument", string.Empty); } catch (Exception) { } } } } } handled = true; return; } } }