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

📄 favoritespad.cs

📁 c#源代码
💻 CS
字号:
/* ***********************************************************
 *
 * Help 2.0 Environment for SharpDevelop
 * Favorites Pad
 * Copyright (c) 2005, Mathias Simmack. All rights reserved.
 *
 * ********************************************************* */
namespace HtmlHelp2
{
	using System;
	using System.Drawing;
	using System.Windows.Forms;
	using System.Xml;
	using System.Collections;
	using ICSharpCode.Core.AddIns.Codons;
	using ICSharpCode.SharpDevelop.Gui;
	using ICSharpCode.Core.Services;
	using HtmlHelp2Service;

	public class ShowFavoritesMenuCommand : AbstractMenuCommand
	{
		public override void Run()
		{
			HtmlHelp2FavoritesPad favorites = (HtmlHelp2FavoritesPad)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();
		ToolBar tb                      = new ToolBar();
		
		public override Control Control
		{
			get { return mainPanel; }
		}

		public override void RedrawContent()
		{
			StringParserService sps = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService));
			for(int i = 0; i < toolbarButtons.Length; i++)
			{
				tb.Buttons[i].ToolTipText = sps.Parse(toolbarButtons[i]);
			}
		}

		public HtmlHelp2FavoritesPad() : base("${res:AddIns.HtmlHelp2.Favorites}", "HtmlHelp2.16x16.Favorites")
		{
			this.InitializeComponents();
		}

		private void InitializeComponents()
		{
			HtmlHelp2Environment h2env = (HtmlHelp2Environment)ServiceManager.Services.GetService(typeof(HtmlHelp2Environment));
			Help2EnvIsReady            = (h2env != null && h2env.Help2EnvironmentIsReady);
			
			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(tb);
			tb.Dock              = DockStyle.Top;
			tb.Enabled           = Help2EnvIsReady;
			tb.Divider           = false;
			tb.Appearance        = ToolBarAppearance.Flat;
			tb.ButtonClick      += new ToolBarButtonClickEventHandler(ToolBarButtonClicked);

			StringParserService sps  = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService));
			for(int i = 0; i < toolbarButtons.Length; i++)
			{
				ToolBarButton button = new ToolBarButton();
				button.ToolTipText   = sps.Parse(toolbarButtons[i]);
				button.ImageIndex    = i;
				button.Enabled       = false;
				tb.Buttons.Add(button);
			}
			
			tb.ImageList                  = new ImageList();
			tb.ImageList.ColorDepth       = ColorDepth.Depth4Bit;
			tb.ImageList.TransparentColor = Color.Red;
			tb.ImageList.Images.Add(ResourcesHelper.GetImage("Favorites.16x16.MoveUp"));
			tb.ImageList.Images.Add(ResourcesHelper.GetImage("Favorites.16x16.MoveDown"));
			tb.ImageList.Images.Add(ResourcesHelper.GetImage("Favorites.16x16.Rename"));
			tb.ImageList.Images.Add(ResourcesHelper.GetImage("Favorites.16x16.Delete"));
			
			if(Help2EnvIsReady) this.LoadFavorites();
		}

		#region TreeView
		private void TreeNodeAfterSelect(object sender, TreeViewEventArgs e)
		{
			TreeNode tn           = tv.SelectedNode;
			
			tb.Buttons[0].Enabled = (tn != null && tn.PrevNode != null);
			tb.Buttons[1].Enabled = (tn != null && tn.NextNode != null);
			tb.Buttons[2].Enabled = (tn != null);
			tb.Buttons[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 Toolbar
		private void ToolBarButtonClicked(object sender, ToolBarButtonClickEventArgs e)
		{
			if(tv.SelectedNode != null)
			{
				TreeNode tempNode = null;
				
				switch(tb.Buttons.IndexOf(e.Button))
				{
					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:
						StringParserService sps = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService));
						string text = sps.Parse("${res:AddIns.HtmlHelp2.RemoveFavorite}", new string[,] {{"0", tv.SelectedNode.Text}});
						DialogResult result = MessageBox.Show(text,
						                                      sps.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(sender, null);
			}
		}
		#endregion

		#region Favorites
		private void LoadFavorites()
		{
			tv.Nodes.Clear();
			tv.BeginUpdate();
			
			try
			{
				PropertyService propertyService = (PropertyService)ServiceManager.Services.GetService(typeof(PropertyService));

				XmlDocument xmldoc              = new XmlDocument();
				xmldoc.Load(propertyService.ConfigDirectory + help2FavoritesFile);
				
				XmlNodeList nl = xmldoc.SelectNodes("favorites/favorite");
				foreach(XmlNode node in nl)
				{
					XmlNode title = node.SelectSingleNode("title");
					XmlNode url   = node.SelectSingleNode("url");

					if(title != null && url != null && title.InnerText != "" && url.InnerText != "")
					{
						TreeNode treeNode = new TreeNode();
						treeNode.Text     = title.InnerText;
						treeNode.Tag      = url.InnerText;
						tv.Nodes.Add(treeNode);
					}
				}

//				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
			{
				PropertyService propertyService = (PropertyService)ServiceManager.Services.GetService(typeof(PropertyService));
				
				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
			{
				PropertyService propertyService = (PropertyService)ServiceManager.Services.GetService(typeof(PropertyService));

				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 + -