⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nantpadcontent.cs

📁 c#源代码
💻 CS
字号:
//
// SharpDevelop NAnt add-in
//
// Copyright (C) 2004 Matthew Ward
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
// Matthew Ward (mrward@users.sourceforge.net)

using ICSharpCode.Core.Services;
using ICSharpCode.NAntAddIn.Commands;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Internal.Project;
using ICSharpCode.SharpDevelop.Services;
using Reflector.UserInterface;
using System;
using System.Windows.Forms;

namespace ICSharpCode.NAntAddIn.Gui
{
	/// <summary>
	/// The NAnt pad.
	/// </summary>
	public class NAntPadContent : AbstractPadContent
	{
		Panel contentPanel;
		NAntPadTreeView treeView;
		CommandBarButton runButton;
		CommandBarButton refreshButton;
		CommandBarButton stopButton;
		TextBox textBox;
		
		public NAntPadContent() : base("NAnt", "NAntAddIn.Icons.16x16.NAntPad")
		{
			// Initialise treeview.
			treeView = new NAntPadTreeView();
			treeView.Dock = DockStyle.Fill;
			
			// Create command bar.
			CommandBar commandBar = new CommandBar();
			commandBar.Dock = DockStyle.Top;
			
			// Create text box.
			textBox = new TextBox();
			textBox.WordWrap = false;
			textBox.Dock = DockStyle.Bottom;
			
			// Tooltip.
			ToolTip toolTip = new ToolTip();
			toolTip.SetToolTip(textBox, SharpDevelopApplication.StringParserService.Parse("${res:ICSharpCode.NAntAddIn.NAntPadContent.NAntPropertiesToolTip}"));
			
			IconService iconService = (IconService)ServiceManager.Services.GetService(typeof(IconService));
			
			// Run button.
			runButton = new CommandBarButton(SharpDevelopApplication.StringParserService.Parse("${res:ICSharpCode.NAntAddIn.NAntPadContent.RunCommandBarButtonText}"));
			runButton.Image = iconService.GetBitmap("Icons.16x16.RunProgramIcon");
			runButton.Click += new EventHandler(RunButtonClick);
			commandBar.Items.Add(runButton);			

			// Refresh button.
			refreshButton = new CommandBarButton(SharpDevelopApplication.StringParserService.Parse("${res:ICSharpCode.NAntAddIn.NAntPadContent.RefreshCommandBarButtonText}"));
			refreshButton.Image = iconService.GetBitmap("Icons.16x16.BrowserRefresh");
			refreshButton.Click += new EventHandler(RefreshButtonClick);
			commandBar.Items.Add(refreshButton);
			
			// Stop button.
			stopButton = new CommandBarButton(SharpDevelopApplication.StringParserService.Parse("${res:ICSharpCode.NAntAddIn.NAntPadContent.StopCommandBarButtonText}"));
			stopButton.Image = iconService.GetBitmap("Icons.16x16.BrowserCancel");
			//stopButton.Click += new EventHandler(StopButtonClick);
			commandBar.Items.Add(stopButton);
			
			// Create main panel.
			contentPanel = new Panel();
			
			contentPanel.Controls.Add(treeView);
			contentPanel.Controls.Add(commandBar);
			contentPanel.Controls.Add(textBox);
			
			SharpDevelopApplication.ProjectService.CombineOpened += new CombineEventHandler(CombineOpened);
			SharpDevelopApplication.ProjectService.CombineClosed += new CombineEventHandler(CombineClosed);
			//SharpDevelopApplication.ProjectService.FileAddedToProject += new FileEventHandler(FileAdded);
			SharpDevelopApplication.ProjectService.FileRemovedFromProject += new FileEventHandler(FileRemoved);			
			SharpDevelopApplication.FileService.FileRemoved += new FileEventHandler(FileRemoved);
			SharpDevelopApplication.FileService.FileRenamed += new FileEventHandler(FileRenamed);
			//SharpDevelopApplication.FileUtilityService.FileSaved += new FileNameEventHandler(FileSaved);
		}
		
		/// <summary>
		/// Gets any extra command line arguments entered in the pad's text box.
		/// </summary>
		public string Arguments {
			get {
				return textBox.Text;
			}
		}
		
		#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()
		{
			base.Dispose();
			treeView.Dispose();
			contentPanel.Dispose();			
		}
		
		#endregion		
		
		void CombineClosed(object sender, CombineEventArgs e)
		{
			treeView.Clear();
		}
		
		void CombineOpened(object sender, CombineEventArgs e)
		{
			treeView.AddCombine(e.Combine);
		}	
		
		void FileRenamed(object sender, FileEventArgs 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 FileAdded(object sender, FileEventArgs e)
		{
			if (!e.IsDirectory) {
				if (NAntBuildFile.IsBuildFile(e.FileName)) {
					AddBuildFile(e.FileName);
				}
			}
		}
		
		void FileRemoved(object sender, FileEventArgs e)
		{
			if (!e.IsDirectory) {
				if (NAntBuildFile.IsBuildFile(e.FileName)) {
					treeView.RemoveBuildFile(e.FileName);
				}
			}
		}
		
//		void FileSaved(object sender, FileNameEventArgs e)
//		{
//			if (NAntBuildFile.IsBuildFile(e.FileName)) {
//				treeView.UpdateBuildFile(e.FileName);
//			}
//		}
		
		void AddBuildFile(string fileName)
		{
			IProject project = FindProjectContainingFile(fileName);
					
			if (project != null) {
				treeView.AddBuildFile(project.Name, fileName);
			}
		}
		
		IProject FindProjectContainingFile(string fileName)
		{
			// Try selected project first.
			IProject project = SharpDevelopApplication.ProjectService.CurrentSelectedProject;
			if (project != null) {
				
				if (!project.IsFileInProject(fileName)) {
					
					// Try all project's in the combine.
					project = FindProjectContainingFile(fileName, SharpDevelopApplication.ProjectService.CurrentOpenCombine);
				}
			}
			
			return project;
		}
		
		IProject FindProjectContainingFile(string fileName, Combine combine)
		{
			IProject project = null;
			
			foreach (CombineEntry entry in combine.Entries) {
				
				if (entry.Entry is IProject) {
					if (((IProject)entry.Entry).IsFileInProject(fileName)) {
						project = (IProject)entry.Entry;
					}
				} else {
					project = FindProjectContainingFile(fileName, (Combine)entry.Entry);
				}
				
				if (project != null) {
					break;
				}
			}			
			
			return project;
		}
		
		void RefreshButtonClick(object sender, EventArgs e)
		{
			treeView.Clear();
			
			Combine combine = SharpDevelopApplication.ProjectService.CurrentOpenCombine;
			if ( combine != null) {
				treeView.AddCombine(combine);
			}
		}
		
		void RunButtonClick(object sender, EventArgs e)
		{
			if (treeView.IsTargetSelected) {
				RunSelectedNAntTargetCommand command = new RunSelectedNAntTargetCommand();
				command.Owner = treeView;
				command.Run();
			} else {
				RunSelectedNAntBuildFileCommand command = new RunSelectedNAntBuildFileCommand();
				command.Owner = treeView;
				command.Run();
			}
		}
	}
}

⌨️ 快捷键说明

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