nantpadcontent.cs

来自「SharpDevelop2.0.0 c#开发免费工具」· CS 代码 · 共 273 行

CS
273
字号
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
//     <version>$Revision: 915 $</version>
// </file>

using ICSharpCode.Core;
using ICSharpCode.NAntAddIn;
using ICSharpCode.NAntAddIn.Commands;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop;
using System;
using System.Windows.Forms;

namespace ICSharpCode.NAntAddIn.Gui
{
	/// <summary>
	/// The NAnt pad.
	/// </summary>
	public class NAntPadContent : AbstractPadContent
	{
		Panel contentPanel;
		NAntPadTreeView treeView;
		TextBox textBox;
		ToolStrip toolStrip;
		bool disposed;
		
		public NAntPadContent()
		{			
			LoggingService.Debug("NAntPadContent.ctor");
			// Create main panel.
			contentPanel = new Panel();
			
			// Initialise treeview.
			treeView = new NAntPadTreeView();
			treeView.Dock = DockStyle.Fill;
			
			// Create ToolStrip.
			toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/NAntPad/Toolbar");
			toolStrip.GripStyle = ToolStripGripStyle.Hidden;
			
			// Create text box.
			textBox = new TextBox();
			textBox.WordWrap = false;
			textBox.Dock = DockStyle.Bottom;
			
			// Tooltip.
			ToolTip toolTip = new ToolTip();
			toolTip.SetToolTip(textBox, StringParser.Parse("${res:ICSharpCode.NAntAddIn.NAntPadContent.NAntPropertiesToolTip}"));			
			
			contentPanel.Controls.Add(treeView);
			contentPanel.Controls.Add(toolStrip);
			contentPanel.Controls.Add(textBox);
			
			ProjectService.SolutionLoaded += SolutionLoaded;
			ProjectService.SolutionClosed += SolutionClosed;
			ProjectService.ProjectItemRemoved += ProjectItemRemoved;
			ProjectService.ProjectItemAdded += ProjectItemAdded;
			FileService.FileRenamed += FileRenamed;
			FileService.FileRemoved += FileRemoved;
			FileUtility.FileSaved += FileSaved;
			
			NAntRunnerSingleton.Runner.NAntStarted += NAntStarted;
			NAntRunnerSingleton.Runner.NAntStopped += NAntStopped;
			NAntRunnerSingleton.Runner.NAntExited += NAntExited;
			
			// Due to lazy loading we have missed the solution loaded event
			// so add it now.
			
			AddSolutionToPad(ProjectService.OpenSolution);
		}
		
		/// <summary>
		/// Gets any extra command line arguments entered in the pad's text box.
		/// </summary>
		public string Arguments {
			get {
				return textBox.Text;
			}
		}
		
		public static NAntPadContent Instance {
			get {
				PadDescriptor descriptor = WorkbenchSingleton.Workbench.GetPad(typeof(NAntPadContent));
				return (NAntPadContent)descriptor.PadContent;
			}
		}	

		/// <summary>
		/// Refreshes the contents NAnt pad.
		/// </summary>
		public void Refresh()
		{
			treeView.Clear();
			
			Solution solution = ProjectService.OpenSolution;
			if (solution != null) {
				treeView.AddSolution(solution);
			}
		}
		
		/// <summary>
		/// Gets the currently selected <see cref="NAntBuildFile"/>.
		/// </summary>
		/// <remarks>This will return a NAntBuildFile if
		/// a target node is selected.</remarks>
		public NAntBuildFile SelectedBuildFile {
			get {
				return treeView.SelectedBuildFile;
			}
		}
		
		/// <summary>
		/// Gets the current selected <see cref="NAntBuildTarget"/>
		/// </summary>
		public NAntBuildTarget SelectedTarget {
			get {
				return treeView.SelectedTarget;
			}
		}
		
		#region AbstractPadContent requirements
		
		/// <summary>
		/// The <see cref="System.Windows.Forms.Control"/> representing the pad
		/// </summary>
		public override Control Control {
			get {
				return contentPanel;
			}
		}
		
		/// <summary>
		/// Refreshes the pad
		/// </summary>
		public override void RedrawContent()
		{
		}
		
		/// <summary>
		/// Cleans up all used resources
		/// </summary>
		public override void Dispose()
		{
			if (!disposed) {
				disposed = true;
				
				treeView.Dispose();
				contentPanel.Dispose();	
				
				ProjectService.SolutionLoaded -= SolutionLoaded;
				ProjectService.SolutionClosed -= SolutionClosed;
				ProjectService.ProjectItemRemoved -= ProjectItemRemoved;
				ProjectService.ProjectItemAdded -= ProjectItemAdded;
				FileService.FileRenamed -= FileRenamed;
				FileService.FileRemoved -= FileRemoved;
				FileUtility.FileSaved -= FileSaved;
				
				NAntRunnerSingleton.Runner.NAntStarted -= NAntStarted;
				NAntRunnerSingleton.Runner.NAntStopped -= NAntStopped;
				NAntRunnerSingleton.Runner.NAntExited -= NAntExited;

				base.Dispose();
			}
		}
		
		#endregion		
		
		void SolutionClosed(object sender, EventArgs e)
		{
			LoggingService.Debug("SolutionClosed.");
			treeView.Clear();
			UpdateToolbar();
		}
		
		void SolutionLoaded(object sender, SolutionEventArgs e)
		{
			LoggingService.Debug("SolutionLoaded.");
			AddSolutionToPad(e.Solution);
		}	
		
		void AddSolutionToPad(Solution solution)
		{
			if (solution != null) {
				treeView.AddSolution(solution);
				UpdateToolbar();
			}
		}
		
		void UpdateToolbar()
		{
			ToolbarService.UpdateToolbar(toolStrip);
		}
		
		void FileRenamed(object sender, FileRenameEventArgs e)
		{
			if (!e.IsDirectory) {
				// source and target are populated.
				
				if (NAntBuildFile.IsBuildFile(e.SourceFile) && NAntBuildFile.IsBuildFile(e.TargetFile)) {
					treeView.RenameBuildFile(e.SourceFile, e.TargetFile);
				} else if (NAntBuildFile.IsBuildFile(e.SourceFile)) {
					treeView.RemoveBuildFile(e.SourceFile);
				} else {
					AddBuildFile(e.TargetFile);
				}
			}
		}
		
		void AddBuildFile(string fileName)
		{
			if (ProjectService.OpenSolution == null) return;
			IProject project = ProjectService.OpenSolution.FindProjectContainingFile(fileName);
			if (project != null) {
				treeView.AddBuildFile(project.Name, fileName);
			}
		}
		
		void ProjectItemAdded(object sender, ProjectItemEventArgs e)
		{
			LoggingService.Debug("ProjectItemAdded.");
			if (e.ProjectItem.ItemType != ItemType.Folder) {
				if (NAntBuildFile.IsBuildFile(e.ProjectItem.FileName)) {
					treeView.AddBuildFile(e.Project.Name, e.ProjectItem.FileName);
				}
			}
		}
	
		void ProjectItemRemoved(object sender, ProjectItemEventArgs e)
		{
			LoggingService.Debug("ProjectItemRemoved.");
			if (e.ProjectItem.ItemType != ItemType.Folder) {
				if (NAntBuildFile.IsBuildFile(e.ProjectItem.FileName)) {
					treeView.RemoveBuildFile(e.ProjectItem.FileName);
				}
			}
		}
		
		void FileSaved(object sender, FileNameEventArgs e)
		{
			LoggingService.Debug("FileSaved.");
			if (NAntBuildFile.IsBuildFile(e.FileName)) {
				treeView.UpdateBuildFile(e.FileName);
			}
		}
		
		void FileRemoved(object sender, FileEventArgs e)
		{
			LoggingService.Debug("FileRemoved.");
			if (NAntBuildFile.IsBuildFile(e.FileName)) {
				treeView.RemoveBuildFile(e.FileName);
			}
		}
		
		void NAntStarted(object sender, EventArgs e)
		{
			UpdateToolbar();
		}
		
		void NAntStopped(object sender, EventArgs e)
		{
			UpdateToolbar();
		}
		
		void NAntExited(object sender, NAntExitEventArgs e)
		{
			WorkbenchSingleton.SafeThreadAsyncCall(this, "UpdateToolbar");
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?