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

📄 favoritespad.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Mathias Simmack" email="mathias@simmack.de"/>
//     <version>$Revision: 987 $</version>
// </file>

namespace HtmlHelp2
{
	using System;
	using System.Drawing;
	using System.Reflection;
	using System.Windows.Forms;
	using System.Xml;
	using System.Collections;
	using ICSharpCode.Core;
	using ICSharpCode.SharpDevelop;
	using ICSharpCode.SharpDevelop.Gui;
	using HtmlHelp2.Environment;
	using HtmlHelp2.ResourcesHelperClass;


	public class ShowFavoritesMenuCommand : AbstractMenuCommand
	{
		public override void Run()
		{
			PadDescriptor favorites = WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2FavoritesPad));
			if (favorites != null) favorites.BringPadToFront();
		}
	}

	public class HtmlHelp2FavoritesPad : AbstractPadContent
	{
		const string help2FavoritesFile = "help2favorites.xml";
		string[] toolbarButtons         = new string[] {
			"${res:AddIns.HtmlHelp2.MoveUp}",
			"${res:AddIns.HtmlHelp2.MoveDown}",
			"${res:AddIns.HtmlHelp2.Rename}",
			"${res:AddIns.HtmlHelp2.Delete}"
		};
	
		bool Help2EnvIsReady            = false;
		Panel mainPanel                 = new Panel();
		TreeView tv                     = new TreeView();
		ToolStrip toolStrip             = new ToolStrip();

		public override Control Control
		{
			get { return mainPanel;	}
		}

		public override void RedrawContent()
		{
			for (int i = 0; i < toolbarButtons.Length; i++)
			{
				toolStrip.Items[i].ToolTipText = StringParser.Parse(toolbarButtons[i]);
			}
		}

		public HtmlHelp2FavoritesPad()
		{
			this.InitializeComponents();
		}

		private void InitializeComponents()
		{
			Help2EnvIsReady      = HtmlHelp2Environment.IsReady;
			
			mainPanel.Controls.Add(tv);
			tv.Dock              = DockStyle.Fill;
			tv.Enabled           = Help2EnvIsReady;
			tv.ShowLines         = false;
			tv.ShowRootLines     = false;
			tv.LabelEdit         = true;
			tv.HideSelection     = false;
			tv.AfterSelect      += new TreeViewEventHandler(this.TreeNodeAfterSelect);
			tv.BeforeLabelEdit  += new NodeLabelEditEventHandler(this.BeforeLabelEdit);
			tv.AfterLabelEdit   += new NodeLabelEditEventHandler(this.AfterLabelEdit);
			tv.KeyDown          += new KeyEventHandler(this.TreeViewKeyDown);
			tv.DoubleClick      += new EventHandler(this.TreeNodeDoubleClick);

			mainPanel.Controls.Add(toolStrip);
			toolStrip.Dock             = DockStyle.Top;
			toolStrip.Enabled          = Help2EnvIsReady;
			toolStrip.AllowItemReorder = false;
			for (int i = 0; i < toolbarButtons.Length; i++)
			{
				ToolStripButton button = new ToolStripButton();
				button.ToolTipText     = StringParser.Parse(toolbarButtons[i]);
				button.ImageIndex      = i;
				button.Enabled         = false;
				button.Click          += new EventHandler(this.ToolStripButtonClicked);

				toolStrip.Items.Add(button);
			}

			toolStrip.ImageList                  = new ImageList();
			toolStrip.ImageList.ColorDepth       = ColorDepth.Depth4Bit;
			toolStrip.ImageList.TransparentColor = Color.Red;
			toolStrip.ImageList.Images.Add(ResourcesHelper.GetBitmap("Favorites.16x16.MoveUp.bmp"));
			toolStrip.ImageList.Images.Add(ResourcesHelper.GetBitmap("Favorites.16x16.MoveDown.bmp"));
			toolStrip.ImageList.Images.Add(ResourcesHelper.GetBitmap("Favorites.16x16.Rename.bmp"));
			toolStrip.ImageList.Images.Add(ResourcesHelper.GetBitmap("Favorites.16x16.Delete.bmp"));

			if (Help2EnvIsReady) this.LoadFavorites();
		}

		#region TreeView
		private void TreeNodeAfterSelect(object sender, TreeViewEventArgs e)
		{
			TreeNode tn           = tv.SelectedNode;

			toolStrip.Items[0].Enabled = (tn != null && tn.PrevNode != null);
			toolStrip.Items[1].Enabled = (tn != null && tn.NextNode != null);
			toolStrip.Items[2].Enabled = (tn != null);
			toolStrip.Items[3].Enabled = (tn != null);
		}
		
		private void BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
		{
			e.CancelEdit = (e.Node == null);
		}
		
		private void AfterLabelEdit(object Sender, NodeLabelEditEventArgs e)
		{
			if (e.Label != null && e.Label.Length > 0)
			{
				if (e.Node.Tag != null && e.Node.Tag is string && (string)e.Node.Tag != "")
				{
					this.PatchFavoriteName(e.Label.ToString(), (string)e.Node.Tag);
				}
			}
		}
		
		private void TreeViewKeyDown(object sender, KeyEventArgs e)
		{
			if (tv.SelectedNode != null)
			{
				switch (e.KeyCode)
				{
					case Keys.F2:
						tv.SelectedNode.BeginEdit();
						break;
					case Keys.Delete:
						tv.Nodes.Remove(tv.SelectedNode);
						this.SaveFavorites();
						break;
				}
			}
		}
		
		private void TreeNodeDoubleClick(object sender, EventArgs e)
		{
			TreeNode tn = tv.SelectedNode;
			
			if (tn != null && tn.Tag != null && tn.Tag is string && (string)tn.Tag != "")
			{
				ShowHelpBrowser.OpenHelpView((string)tn.Tag);
			}
		}
		#endregion

		#region ToolStrip
		private void ToolStripButtonClicked(object sender, EventArgs e)
		{
			if (tv.SelectedNode == null) return;

			ToolStripItem item = (ToolStripItem)sender;
			TreeNode tempNode  = null;

			switch (item.ImageIndex)
			{
				case 0:
					tempNode              = (TreeNode)tv.SelectedNode.Clone();
					tv.Nodes.Insert(tv.SelectedNode.PrevNode.Index, tempNode);
					tv.Nodes.Remove(tv.SelectedNode);
					tv.SelectedNode       = tempNode;
					this.SaveFavorites();
					break;
				case 1:
					tempNode              = (TreeNode)tv.SelectedNode.Clone();
					TreeNode nextNextNode = tv.SelectedNode.NextNode.NextNode;
					if (nextNextNode == null)
						tv.Nodes.Add(tempNode);
					else
						tv.Nodes.Insert(nextNextNode.Index, tempNode);
					tv.Nodes.Remove(tv.SelectedNode);
					tv.SelectedNode       = tempNode;
					this.SaveFavorites();
					break;
				case 2:
					tv.SelectedNode.BeginEdit();
					break;
				case 3:
					string text = StringParser.Parse("${res:AddIns.HtmlHelp2.RemoveFavorite}", new string[,] {{"0", tv.SelectedNode.Text}});
					DialogResult result = MessageBox.Show(text,
					                                      StringParser.Parse("${res:MainWindow.Windows.HelpScoutLabel}"),
					                                      MessageBoxButtons.YesNo,
					                                      MessageBoxIcon.Question,
					                                      MessageBoxDefaultButton.Button2);
					if (result == DialogResult.Yes)
					{
						tv.Nodes.Remove(tv.SelectedNode);
						this.SaveFavorites();
					}
					break;
			}

			this.TreeNodeAfterSelect(null, null);
		}
		#endregion

		#region Favorites
		private void LoadFavorites()
		{
			tv.Nodes.Clear();
			tv.BeginUpdate();
			
			try
			{
				XmlDocument xmldoc = new XmlDocument();
				xmldoc.Load(PropertyService.ConfigDirectory + help2FavoritesFile);
				
				XmlNodeList nl = xmldoc.SelectNodes("favorites/favorite");
				for (int i = 0; i < nl.Count; i++)
				{
					XmlNode title = nl.Item(i).SelectSingleNode("title");
					XmlNode url   = nl.Item(i).SelectSingleNode("url");
					
					if (title != null && url != null && title.InnerText != "" && url.InnerText != "")
					{
						TreeNode node = new TreeNode();
						node.Text     = title.InnerText;
						node.Tag      = url.InnerText;
						tv.Nodes.Add(node);
					}
				}
			}
			catch {}
			
			tv.EndUpdate();
		}
		
		private void SaveFavorites()
		{
			try
			{
				XmlDocument xmldoc = new XmlDocument();
				xmldoc.LoadXml("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><favorites/>");
				
				foreach (TreeNode node in tv.Nodes)
				{
					if (node.Text != "" && node.Tag != null && node.Tag is string && (string)node.Tag != "")
					{
						XmlNode favorite = xmldoc.CreateElement("favorite");
						
						XmlNode title    = xmldoc.CreateElement("title");
						title.InnerText  = node.Text;
						favorite.AppendChild(title);
						
						XmlCDataSection cdata = xmldoc.CreateCDataSection((string)node.Tag);
						XmlNode url           = xmldoc.CreateElement("url");
						url.AppendChild(cdata);
						favorite.AppendChild(url);
						xmldoc.DocumentElement.AppendChild(favorite);
					}
				}
				
				xmldoc.Save(PropertyService.ConfigDirectory + help2FavoritesFile);
			}
			catch {}
		}
		
		private void PatchFavoriteName(string newName, string topicUrl)
		{
			try
			{
				XmlDocument xmldoc = new XmlDocument();
				xmldoc.Load(PropertyService.ConfigDirectory + help2FavoritesFile);
				
				XmlNode node = xmldoc.SelectSingleNode(String.Format("/favorites/favorite[url=\"{0}\"]/title", topicUrl));
				
				if (node != null)
				{
					node.InnerText = newName;
					xmldoc.Save(PropertyService.ConfigDirectory + help2FavoritesFile);
				}
			}
			catch {}
		}
		
		public void AddToFavorites(string topicName, string topicUrl)
		{
			if (Help2EnvIsReady && topicName != "" && topicUrl != "")
			{
				bool urlFound = false;
				
				foreach (TreeNode node in tv.Nodes)
				{
					if (node.Tag != null &&
					    node.Tag is string &&
					    String.Compare(topicUrl, (string)node.Tag) == 0)
					{
						urlFound = true;
						break;
					}
				}
				
				if (!urlFound) 
				{
					TreeNode node = new TreeNode();
					node.Text     = topicName;
					node.Tag      = topicUrl;
					
					tv.Nodes.Add(node);
					this.SaveFavorites();
				}
			}
		}
		#endregion
	}
}

⌨️ 快捷键说明

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