// // // // // $Revision$ // using System; using System.Collections.Generic; using System.Diagnostics; using System.Windows.Forms; using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Project.Commands { public abstract class AbstractBuildMenuCommand : AbstractMenuCommand { public virtual bool CanRunBuild { get { return ProjectService.OpenSolution!=null; } } public virtual void BeforeBuild() { TaskService.BuildMessageViewCategory.ClearText(); TaskService.InUpdate = true; TaskService.ClearExceptCommentTasks(); TaskService.InUpdate = false; ICSharpCode.SharpDevelop.Commands.SaveAllFiles.SaveAll(); } public virtual void AfterBuild() {} public override void Run() { if (CanRunBuild) { if (DebuggerService.IsDebuggerLoaded && DebuggerService.CurrentDebugger.IsDebugging) { if (MessageService.AskQuestion("${res:XML.MainMenu.RunMenu.Compile.StopDebuggingQuestion}", "${res:XML.MainMenu.RunMenu.Compile.StopDebuggingTitle}")) { DebuggerService.CurrentDebugger.Stop(); } else { return; } } BeforeBuild(); StartBuild(); } else { MSBuildEngine.AddNoSingleFileCompilationError(); } } protected void CallbackMethod(BuildResults results) { MSBuildEngine.ShowResults(results); AfterBuild(); if (BuildComplete != null) BuildComplete(this, EventArgs.Empty); } public abstract void StartBuild(); public event EventHandler BuildComplete; } public sealed class Build : AbstractBuildMenuCommand { public override void StartBuild() { ProjectService.RaiseEventStartBuild(); ProjectService.OpenSolution.Build(CallbackMethod); } public override void AfterBuild() { ProjectService.RaiseEventEndBuild(); } } public sealed class Rebuild : AbstractBuildMenuCommand { public override void StartBuild() { ProjectService.RaiseEventStartBuild(); ProjectService.OpenSolution.Rebuild(CallbackMethod); } public override void AfterBuild() { ProjectService.RaiseEventEndBuild(); } } public sealed class Clean : AbstractBuildMenuCommand { public override void StartBuild() { ProjectService.OpenSolution.Clean(CallbackMethod); } } public sealed class Publish : AbstractBuildMenuCommand { public override void StartBuild() { ProjectService.OpenSolution.Publish(CallbackMethod); } } public abstract class AbstractProjectBuildMenuCommand : AbstractBuildMenuCommand { protected IProject targetProject; protected IProject ProjectToBuild { get { return targetProject ?? ProjectService.CurrentProject; } } public override bool CanRunBuild { get { return base.CanRunBuild && this.ProjectToBuild != null; } } } public class BuildProject : AbstractProjectBuildMenuCommand { IDictionary additionalProperties = new SortedList(); public IDictionary AdditionalProperties { get { return additionalProperties; } } public BuildProject() { } public BuildProject(IProject targetProject) { this.targetProject = targetProject; } public override void StartBuild() { ProjectService.RaiseEventStartBuild(); this.ProjectToBuild.Build(CallbackMethod, AdditionalProperties); } public override void AfterBuild() { ProjectService.RaiseEventEndBuild(); } } public sealed class RebuildProject : BuildProject { public RebuildProject() {} public RebuildProject(IProject targetProject) : base(targetProject) {} public override void StartBuild() { ProjectService.RaiseEventStartBuild(); this.ProjectToBuild.Rebuild(CallbackMethod, AdditionalProperties); } } public class CleanProject : AbstractProjectBuildMenuCommand { public override void StartBuild() { this.ProjectToBuild.Clean(CallbackMethod, null); } } public class PublishProject : AbstractProjectBuildMenuCommand { public override void StartBuild() { this.ProjectToBuild.Publish(CallbackMethod, null); } } public class SetConfigurationMenuBuilder : ISubmenuBuilder { public ToolStripItem[] BuildSubmenu(Codon codon, object owner) { if (ProjectService.OpenSolution == null) return new ToolStripItem[0]; IList configurationNames = ProjectService.OpenSolution.GetConfigurationNames(); string activeConfiguration = ProjectService.OpenSolution.Preferences.ActiveConfiguration; ToolStripMenuItem[] items = new ToolStripMenuItem[configurationNames.Count]; for (int i = 0; i < items.Length; i++) { items[i] = new ToolStripMenuItem(configurationNames[i]); items[i].Click += SetConfigurationItemClick; items[i].Checked = activeConfiguration == configurationNames[i]; } return items; } void SetConfigurationItemClick(object sender, EventArgs e) { ToolStripMenuItem item = (ToolStripMenuItem)sender; ProjectService.OpenSolution.Preferences.ActiveConfiguration = item.Text; ProjectService.OpenSolution.ApplySolutionConfigurationAndPlatformToProjects(); } } public class EditConfigurationsCommand : AbstractMenuCommand { public override void Run() { using (SolutionConfigurationEditor sce = new SolutionConfigurationEditor()) { sce.ShowDialog(); ProjectService.OpenSolution.Save(); ProjectService.OpenSolution.ApplySolutionConfigurationAndPlatformToProjects(); } } } }