📄 nantpadcontent.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 + -