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