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

📄 projectoptionsdialog.cs

📁 全功能c#编译器
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
//     <version value="$version"/>
// </file>

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Xml;
using Reflector.UserInterface;

using ICSharpCode.Core.AddIns;
using ICSharpCode.Core.Services;
using ICSharpCode.Core.Properties;
using ICSharpCode.Core.AddIns.Codons;
using ICSharpCode.SharpDevelop.Internal.Project;
using ICSharpCode.SharpDevelop.Services;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs {
	/// <summary>
	/// Dialog for viewing the project options (plain treeview isn't good enough :/)
	/// </summary>
	public class ProjectOptionsDialog : TreeViewOptions
	{
		IProject  project;
		TreeNode configurationTreeNode;
		
		IAddInTreeNode configurationNode;
		
		public ProjectOptionsDialog(IProject project, IAddInTreeNode node, IAddInTreeNode configurationNode) : base(null, null)
		{
			this.project = project;
			this.configurationNode = configurationNode;
			this.Text = StringParserService.Parse("${res:Dialog.Options.ProjectOptions.DialogName}");
			
			((TreeView)ControlDictionary["optionsTreeView"]).MouseUp        += new MouseEventHandler(TreeViewMouseUp);
			((TreeView)ControlDictionary["optionsTreeView"]).AfterLabelEdit += new NodeLabelEditEventHandler(AfterLabelEdit);
			
			((TreeView)ControlDictionary["optionsTreeView"]).Font = boldFont;
			
			properties = new DefaultProperties();
			properties.SetProperty("Project", project);
			
			AddNodes(properties, ((TreeView)ControlDictionary["optionsTreeView"]).Nodes, node.BuildChildItems(this));
			
			configurationTreeNode = new TreeNode(StringParserService.Parse("${res:Dialog.Options.ProjectOptions.ConfigurationsNodeName}"));
			configurationTreeNode.NodeFont = plainFont;
			
			foreach (IConfiguration config in project.Configurations) {
				TreeNode newNode = new TreeNode(config.Name);
				newNode.Tag = config;
				if (config == project.ActiveConfiguration) {
					newNode.NodeFont = boldFont;
				} else {
					newNode.NodeFont = plainFont;
				}
				DefaultProperties configNodeProperties = new DefaultProperties();
				configNodeProperties.SetProperty("Project", project);
				configNodeProperties.SetProperty("Config", config);
				AddNodes(configNodeProperties, newNode.Nodes, configurationNode.BuildChildItems(this));
				configurationTreeNode.Nodes.Add(newNode);
			} 
			((TreeView)ControlDictionary["optionsTreeView"]).Nodes.Add(configurationTreeNode);
			
		}
		
		public void AddProjectConfiguration()
		{
			int    number  = -1;
			string name    = "New Configuration"; // don't localize this project configs should have per default an english name
			string newName = name;
			bool duplicateNumber;
			do {
				duplicateNumber = false;
				foreach (IConfiguration config in project.Configurations) {
					newName = number >= 0 ? name + number : name;
					if (newName == config.Name) {
						++number;
						duplicateNumber = true;
						break;
					}
				}
			} while (duplicateNumber);
			
			TreeNode newNode = new TreeNode(newName);
			IConfiguration newConfig = (IConfiguration)project.ActiveConfiguration.Clone();
			newConfig.Name = newName;
			newNode.Tag  = newConfig;
			newNode.NodeFont = plainFont;
			project.Configurations.Add(newConfig);
			properties.SetProperty("Config", newConfig);
			AddNodes(properties, newNode.Nodes, configurationNode.BuildChildItems(newConfig));
			configurationTreeNode.Nodes.Add(newNode);
			((TreeView)ControlDictionary["optionsTreeView"]).SelectedNode = newNode;
			((TreeView)ControlDictionary["optionsTreeView"]).LabelEdit    = true;
			newNode.BeginEdit();
		}
		
		public void RemoveProjectConfiguration()
		{
			IConfiguration config = (IConfiguration)((TreeView)ControlDictionary["optionsTreeView"]).SelectedNode.Tag;
			if (project.Configurations.Count > 1) {
				bool newActiveConfig = project.ActiveConfiguration == config;
				project.Configurations.Remove(config);
				project.ActiveConfiguration = (IConfiguration)project.Configurations[0];
				((TreeView)ControlDictionary["optionsTreeView"]).Nodes.Remove(((TreeView)ControlDictionary["optionsTreeView"]).SelectedNode);
				UpdateBoldConfigurationNode();
				configurationTreeNode.Expand();
			}
		}
		
		void UpdateBoldConfigurationNode()
		{
			foreach (TreeNode node in configurationTreeNode.Nodes) {
				if (node == ((TreeView)ControlDictionary["optionsTreeView"]).SelectedNode) {
					node.NodeFont = boldFont;
				} else {
					node.NodeFont = plainFont;
				}
			}
		}
		
		public void SetSelectedConfigurationAsStartup()
		{
			IConfiguration config = ((TreeView)ControlDictionary["optionsTreeView"]).SelectedNode.Tag as IConfiguration;
			if (config != null) {
				project.ActiveConfiguration = config;
				UpdateBoldConfigurationNode();
			}
		}
		
		public void RenameProjectConfiguration()
		{
			((TreeView)ControlDictionary["optionsTreeView"]).LabelEdit    = true;
			((TreeView)ControlDictionary["optionsTreeView"]).SelectedNode.BeginEdit();
		}
		
		void AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
		{
			((TreeView)ControlDictionary["optionsTreeView"]).LabelEdit = false;
			
			// canceled edit (or empty name)
			if (e.Label == null || e.Label.Length == 0) {
				return;
			}
			
			bool duplicateLabel       = false;
			foreach (IConfiguration config in project.Configurations) {
				if (e.Label == config.Name) {
					duplicateLabel = true;
					break;
				}
			}
			e.CancelEdit = true;
			
			if (!duplicateLabel) {
				e.Node.Text = e.Label;
				((IConfiguration)e.Node.Tag).Name = e.Label;
			}
		}
		
		static string configNodeMenu = "/SharpDevelop/Workbench/ProjectOptions/ConfigNodeMenu";
		static string selectConfigNodeMenu = "/SharpDevelop/Workbench/ProjectOptions/SelectedConfigMenu";
		
		void TreeViewMouseUp(object sender, MouseEventArgs e)
		{
			TreeNode clickedNode = ((TreeView)ControlDictionary["optionsTreeView"]).GetNodeAt(e.X, e.Y);
			
			if(clickedNode == null) {
				return;
			}
			
			if (e.Button == MouseButtons.Right) {
				MenuService menuService = (MenuService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(MenuService));
				if (clickedNode == configurationTreeNode) {
					b = false;
					((TreeView)ControlDictionary["optionsTreeView"]).SelectedNode = clickedNode;
					b = true;
					menuService.ShowContextMenu(this, configNodeMenu, this, e.X, e.Y);
				}
				if (clickedNode.Parent == configurationTreeNode) {
					b = false;
					((TreeView)ControlDictionary["optionsTreeView"]).SelectedNode = clickedNode;
					b = true;
					menuService.ShowContextMenu(this, selectConfigNodeMenu, this, e.X, e.Y);
				}
			}
		}
	}
}

⌨️ 快捷键说明

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