4 using System.Collections.Generic;
5 using System.ComponentModel.Design;
6 using System.Diagnostics;
7 using System.Globalization;
10 using System.Runtime.CompilerServices;
11 using System.Runtime.InteropServices;
12 using System.ServiceModel;
16 using Microsoft.Build.Evaluation;
17 using Microsoft.VisualStudio;
18 using Microsoft.VisualStudio.CommandBars;
19 using Microsoft.VisualStudio.Shell;
20 using Microsoft.VisualStudio.Shell.Interop;
22 using SiliconStudio.Paradox.VisualStudio.BuildEngine;
24 using SiliconStudio.Paradox.VisualStudio.Shaders;
26 namespace SiliconStudio.
Paradox.VisualStudio
43 [PackageRegistration(UseManagedResourcesOnly =
true)]
46 [InstalledProductRegistration(
"#110",
"#112", Version, IconResourceID = 400)]
51 [Guid(GuidList.guidParadox_VisualStudio_PackagePkgString)]
55 "Paradox Shader Language",
57 EnableCommenting =
true,
58 EnableFormatSelection =
true,
59 EnableLineNumbers =
true,
60 DefaultToInsertSpaces =
true
72 [ProvideMenuResource(
"Menus.ctmenu", 1)]
73 [ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string)]
76 public const string Version =
"1.145";
79 private AppDomain buildMonitorDomain;
92 Debug.WriteLine(string.Format(CultureInfo.CurrentCulture,
"Entering constructor for: {0}", ToString()));
100 private void ShowToolWindow(
object sender,
EventArgs e)
114 private void MenuItemCallback(
object sender,
EventArgs e)
116 Environment.SetEnvironmentVariable(
"Test1",
"Test2");
119 #region Package Members
127 Debug.WriteLine(string.Format(CultureInfo.CurrentCulture,
"Entering Initialize() of: {0}", ToString()));
130 IDEBuildLogger.UserRegistryRoot = UserRegistryRoot;
133 solutionEventsListener.AfterSolutionBackgroundLoadComplete += solutionEventsListener_AfterSolutionBackgroundLoadComplete;
138 dte2 = GetGlobalService(typeof(SDTE)) as DTE2;
141 var serviceContainer =
this as IServiceContainer;
143 langService.SetSite(
this);
147 var mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
150 ParadoxCommands.ServiceProvider =
this;
151 ParadoxCommands.RegisterCommands(mcs);
155 var generalOutputPane = GetGeneralOutputPane();
157 var paradoxSdkDir = ParadoxCommandsProxy.ParadoxSdkDir;
158 if (paradoxSdkDir == null)
160 generalOutputPane.OutputStringThreadSafe(
"Could not find Paradox SDK directory.\r\n");
161 generalOutputPane.Activate();
165 buildMonitorDomain = ParadoxCommandsProxy.CreateAppDomain();
168 var remoteCommands = ParadoxCommandsProxy.CreateProxy(buildMonitorDomain);
169 remoteCommands.StartRemoteBuildLogServer(
new BuildMonitorCallback(dte2), buildLogPipeGenerator.LogPipeUrl);
173 generalOutputPane.OutputStringThreadSafe(string.Format(
"Error loading Paradox SDK: {0}\r\n", e));
174 generalOutputPane.Activate();
177 AppDomain.Unload(buildMonitorDomain);
178 buildMonitorDomain = null;
182 private void solutionEventsListener_AfterSolutionBackgroundLoadComplete()
184 var solution = (IVsSolution)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(IVsSolution));
185 var updatedProjects =
new List<string>();
187 foreach (var dteProject
in VsHelper.GetDteProjectsInSolution(solution))
189 var buildProjects = ProjectCollection.GlobalProjectCollection.GetLoadedProjects(dteProject.FileName);
190 foreach (var buildProject
in buildProjects)
192 var packageVersion = buildProject.GetPropertyValue(
"SiliconStudioPackageParadoxVersion");
193 var currentPackageVersion = buildProject.GetPropertyValue(
"SiliconStudioPackageParadoxVersionLast");
194 if (!
string.IsNullOrEmpty(packageVersion) && packageVersion != currentPackageVersion)
196 var buildPropertyStorage = VsHelper.ToHierarchy(dteProject) as IVsBuildPropertyStorage;
197 if (buildPropertyStorage != null)
199 buildPropertyStorage.SetPropertyValue(
"SiliconStudioPackageParadoxVersionLast", string.Empty, (uint)_PersistStorageType.PST_USER_FILE, packageVersion);
202 if (!
string.IsNullOrEmpty(currentPackageVersion))
203 updatedProjects.Add(buildProject.FullPath);
209 if (updatedProjects.Count > 0)
211 var messageBoxResult = VsShellUtilities.ShowMessageBox(
this,
212 "Paradox needs to update IntelliSense cache for some projects.\nThis will resave the .csproj and Visual Studio will offer to reload them.\n\nProceed?",
213 "Paradox IntelliSense cache",
214 OLEMSGICON.OLEMSGICON_QUERY,
215 OLEMSGBUTTON.OLEMSGBUTTON_YESNO,
216 OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
218 if (messageBoxResult == 6)
221 foreach (var updatedProject
in updatedProjects)
223 File.SetLastWriteTimeUtc(updatedProject, DateTime.UtcNow);
229 protected override void Dispose(
bool disposing)
232 if (buildMonitorDomain != null)
233 AppDomain.Unload(buildMonitorDomain);
236 private IVsOutputWindowPane GetGeneralOutputPane()
238 var outputWindow = (IVsOutputWindow)Package.GetGlobalService(typeof(SVsOutputWindow));
241 IVsOutputWindowPane pane;
242 Guid generalPaneGuid = VSConstants.GUID_OutWindowGeneralPane;
243 outputWindow.CreatePane(ref generalPaneGuid,
"General", 1, 0);
244 outputWindow.GetPane(ref generalPaneGuid, out pane);
override void Initialize()
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 initialization code that rely on services provided by VisualStudio.
Supported extensions. Loaded by NShaderScannerFactory. WARNING, you need also to add those extensions...
const string InternalName
ParadoxPackage()
Default constructor of the package. Inside this method you can place any initialization code that doe...
const string InternalName
const string Paradox_Shader
const string Paradox_Effect
Quick and temporary VS package to allow platform switch for Paradox. This code needs to be largely re...
override void Dispose(bool disposing)