diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index eca6beeac6..720bab0363 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -685,6 +685,7 @@
+
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs
index 850e9552da..4b99bdc69f 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs
@@ -24,25 +24,16 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{
public override void Run()
{
- throw new System.NotImplementedException();
-// ProjectBrowserView browser = Owner as ProjectBrowserView;
-// AbstractBrowserNode node = null;
-//
-// if (browser != null) {
-// node = browser.SelectedNode as FolderNode;
-// } else {
-// ICSharpCode.SharpDevelop.Gui.ProjectBrowser.ProjectBrowserView pbv = (ICSharpCode.SharpDevelop.Gui.ProjectBrowser.ProjectBrowserView)WorkbenchSingleton.Workbench.GetPad(typeof(ICSharpCode.SharpDevelop.Gui.ProjectBrowser.ProjectBrowserView));
-//
-// node = pbv.GetNodeFromProject(ProjectService.CurrentProject);
-// }
-//
-// if (node != null) {
-// Combine combine = node.Combine;
-// combine.SingleStartProjectName = node.Project.Name;
-// combine.SingleStartupProject = true;
-//
-// ProjectService.SaveCombine();
-// }
+ AbstractProjectBrowserTreeNode node = ProjectBrowserPad.Instance.SelectedNode;
+ Solution solution = ProjectService.OpenSolution;
+ if (node == null || solution == null) {
+ return;
+ }
+ if (node.Project.IsStartable) {
+ solution.Preferences.StartupProject = node.Project;
+ } else {
+ MessageService.ShowError("${res:BackendBindings.ExecutionManager.CantExecuteDLLError}");
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Project/Solution/Solution.cs b/src/Main/Base/Project/Src/Project/Solution/Solution.cs
index 3db965e54b..716423c6cd 100644
--- a/src/Main/Base/Project/Src/Project/Solution/Solution.cs
+++ b/src/Main/Base/Project/Src/Project/Solution/Solution.cs
@@ -144,6 +144,9 @@ namespace ICSharpCode.SharpDevelop.Project
if (!HasProjects) {
return null;
}
+ IProject startupProject = preferences.StartupProject;
+ if (startupProject != null)
+ return startupProject;
foreach (IProject project in Projects) {
if (project.IsStartable) {
return project;
@@ -206,8 +209,17 @@ namespace ICSharpCode.SharpDevelop.Project
#endregion
+ SolutionPreferences preferences;
+
+ public SolutionPreferences Preferences {
+ get {
+ return preferences;
+ }
+ }
+
public Solution()
{
+ preferences = new SolutionPreferences(this);
solutionFolderEnumerator = new SolutionFolderEnumerator(this);
solutionFolderContainerEnumerator = new SolutionFolderContainerEnumerator(this);
projectEnumerator = new ProjectEnumerator(this);
@@ -560,5 +572,6 @@ namespace ICSharpCode.SharpDevelop.Project
{
return MSBuildProject.RunMSBuild(FileName, "Publish");
}
+
}
}
diff --git a/src/Main/Base/Project/Src/Project/Solution/SolutionPreferences.cs b/src/Main/Base/Project/Src/Project/Solution/SolutionPreferences.cs
new file mode 100644
index 0000000000..e9a620447e
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/Solution/SolutionPreferences.cs
@@ -0,0 +1,57 @@
+/*
+ * Created by SharpDevelop.
+ * User: Daniel Grunwald
+ * Date: 19.08.2005
+ * Time: 12:09
+ */
+
+using System;
+using ICSharpCode.Core;
+
+namespace ICSharpCode.SharpDevelop.Project
+{
+ public class SolutionPreferences : IMementoCapable
+ {
+ Solution solution;
+
+ internal SolutionPreferences(Solution solution)
+ {
+ this.solution = solution;
+ }
+
+ string startupProject = "";
+
+ public IProject StartupProject {
+ get {
+ if (startupProject.Length == 0)
+ return null;
+ foreach (IProject project in solution.Projects) {
+ if (project.IdGuid.Equals(startupProject, StringComparison.OrdinalIgnoreCase))
+ return project;
+ }
+ return null;
+ }
+ set {
+ startupProject = (value != null) ? value.IdGuid : "";
+ }
+ }
+
+ ///
+ /// Creates a new memento from the state.
+ ///
+ public Properties CreateMemento()
+ {
+ Properties p = new Properties();
+ p.Set("StartupProject", startupProject);
+ return p;
+ }
+
+ ///
+ /// Sets the state to the given memento.
+ ///
+ public void SetMemento(Properties memento)
+ {
+ startupProject = memento.Get("StartupProject", "");
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
index b37eb1a90b..f4e8ee0af8 100644
--- a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
+++ b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
@@ -194,8 +194,12 @@ namespace ICSharpCode.SharpDevelop.Project
return;
OnSolutionLoaded(new SolutionEventArgs(openSolution));
try {
+ string file = GetPreferenceFileName(openSolution.FileName);
+ if (FileUtility.IsValidFileName(file) && File.Exists(file)) {
+ openSolution.Preferences.SetMemento(Properties.Load(file));
+ }
foreach (IProject project in openSolution.Projects) {
- string file = GetPreferenceFileName(project);
+ file = GetPreferenceFileName(project.FileName);
if (FileUtility.IsValidFileName(file) && File.Exists(file)) {
project.SetMemento(Properties.Load(file));
}
@@ -229,7 +233,7 @@ namespace ICSharpCode.SharpDevelop.Project
solution.Save(solutionFile);
openSolution = solution;
OnSolutionLoaded(new SolutionEventArgs(openSolution));
- string file = GetPreferenceFileName(project);
+ string file = GetPreferenceFileName(project.FileName);
if (FileUtility.IsValidFileName(file) && File.Exists(file)) {
project.SetMemento(Properties.Load(file));
}
@@ -246,10 +250,10 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
- static string GetPreferenceFileName(IProject project)
+ static string GetPreferenceFileName(string projectFileName)
{
string directory = PropertyService.ConfigDirectory + "preferences";
- string fileName = project.FileName.Substring(3).Replace('/', '.').Replace('\\', '.').Replace(Path.DirectorySeparatorChar, '.');
+ string fileName = projectFileName.Substring(3).Replace('/', '.').Replace('\\', '.').Replace(Path.DirectorySeparatorChar, '.');
string fullFileName = Path.Combine(directory, fileName + ".xml");
return fullFileName;
}
@@ -263,11 +267,21 @@ namespace ICSharpCode.SharpDevelop.Project
Directory.CreateDirectory(directory);
}
+ string fullFileName;
+ Properties memento = openSolution.Preferences.CreateMemento();
+ if (memento != null) {
+ fullFileName = GetPreferenceFileName(openSolution.FileName);
+
+ if (FileUtility.IsValidFileName(fullFileName)) {
+ FileUtility.ObservedSave(new NamedFileOperationDelegate(memento.Save), fullFileName, FileErrorPolicy.Inform);
+ }
+ }
+
foreach (IProject project in OpenSolution.Projects) {
- Properties memento = project.CreateMemento();
+ memento = project.CreateMemento();
if (memento == null) continue;
- string fullFileName = GetPreferenceFileName(project);
+ fullFileName = GetPreferenceFileName(project.FileName);
if (FileUtility.IsValidFileName(fullFileName)) {
FileUtility.ObservedSave(new NamedFileOperationDelegate(memento.Save), fullFileName, FileErrorPolicy.Inform);
}