📄 indexpad.cs
字号:
/* ***********************************************************
*
* Help 2.0 Environment for SharpDevelop
* Index Pad
* Copyright (c) 2005, Mathias Simmack. All rights reserved.
*
* ********************************************************* */
namespace HtmlHelp2
{
using System;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core.AddIns.Codons;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.Core.Services;
using AxMSHelpControls;
using MSHelpControls;
using MSHelpServices;
using HtmlHelp2Service;
using HtmlHelp2Browser;
public class ShowIndexMenuCommand : AbstractMenuCommand
{
public override void Run()
{
HtmlHelp2IndexPad index = (HtmlHelp2IndexPad)WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2IndexPad));
if(index != null) index.BringPadToFront();
}
}
public class HtmlHelp2IndexPad : AbstractPadContent
{
protected MsHelp2IndexControl help2IndexControl;
Panel containerPanel;
public override Control Control
{
get { return containerPanel; }
}
public override void Dispose()
{
if (help2IndexControl != null)
{
help2IndexControl.Dispose();
}
}
public override void RedrawContent()
{
if (help2IndexControl != null)
{
help2IndexControl.RedrawContent();
}
}
public HtmlHelp2IndexPad() : base("${res:AddIns.HtmlHelp2.Index}", "HtmlHelp2.16x16.Index")
{
containerPanel = new Panel();
containerPanel.VisibleChanged += new EventHandler(OnVisibleChanged);
containerPanel.SizeChanged += new EventHandler(OnVisibleChanged);
}
void OnVisibleChanged(object sender, EventArgs e)
{
if (containerPanel.IsHandleCreated && containerPanel.Width > 0 && containerPanel.Visible)
{
containerPanel.BeginInvoke(new MethodInvoker(InitIfVisible));
}
}
void InitIfVisible()
{
if (containerPanel.Width > 0 && containerPanel.Visible)
{
Init();
}
}
void Init()
{
if (help2IndexControl == null)
{
containerPanel.VisibleChanged -= new EventHandler(OnVisibleChanged);
containerPanel.SizeChanged -= new EventHandler(OnVisibleChanged);
help2IndexControl = new MsHelp2IndexControl();
help2IndexControl.LoadIndex();
help2IndexControl.Dock = DockStyle.Fill;
containerPanel.Controls.Add(help2IndexControl);
}
}
}
public class MsHelp2IndexControl : UserControl
{
HtmlHelp2Environment h2env = null;
AxHxIndexCtrl indexControl = null;
ComboBox filterCombobox = new ComboBox();
ComboBox searchTerm = new ComboBox();
Label label1 = new Label();
Label label2 = new Label();
bool itemClicked = false;
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if(disposing && indexControl != null)
{
indexControl.Dispose();
}
}
public void RedrawContent()
{
StringParserService sps = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService));
label1.Text = sps.Parse("${res:AddIns.HtmlHelp2.FilteredBy}");
label2.Text = sps.Parse("${res:AddIns.HtmlHelp2.LookFor}");
}
public MsHelp2IndexControl()
{
StringParserService sps = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService));
h2env = (HtmlHelp2Environment)ServiceManager.Services.GetService(typeof(HtmlHelp2Environment));
bool Help2EnvIsReady = (h2env != null && h2env.Help2EnvironmentIsReady && Help2ControlsValidation.IsIndexControlRegistered);
if(Help2EnvIsReady)
{
try
{
indexControl = new AxHxIndexCtrl();
indexControl.BeginInit();
indexControl.Dock = DockStyle.Fill;
indexControl.ItemClick += new AxMSHelpControls.IHxIndexViewEvents_ItemClickEventHandler(this.IndexItemClicked);
indexControl.EndInit();
Controls.Add(indexControl);
indexControl.CreateControl();
indexControl.BorderStyle = HxBorderStyle.HxBorderStyle_FixedSingle;
indexControl.FontSource = HxFontSourceConstant.HxFontExternal;
h2env.FilterQueryChanged += new EventHandler(this.FilterQueryChanged);
h2env.NamespaceReloaded += new EventHandler(this.NamespaceReloaded);
}
catch
{
this.FakeHelpControl();
}
}
else
{
this.FakeHelpControl();
}
// Filter Combobox
Panel panel1 = new Panel();
Controls.Add(panel1);
panel1.Dock = DockStyle.Top;
panel1.Height = filterCombobox.Height + 7;
panel1.Controls.Add(filterCombobox);
filterCombobox.Dock = DockStyle.Top;
filterCombobox.DropDownStyle = ComboBoxStyle.DropDownList;
filterCombobox.Sorted = true;
filterCombobox.Enabled = Help2EnvIsReady;
filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged);
// Filter label
Controls.Add(label1);
label1.Text = sps.Parse("${res:AddIns.HtmlHelp2.FilteredBy}");
label1.Dock = DockStyle.Top;
label1.TextAlign = ContentAlignment.MiddleLeft;
label1.Enabled = Help2EnvIsReady;
// SearchTerm Combobox
Panel panel2 = new Panel();
Controls.Add(panel2);
panel2.Dock = DockStyle.Top;
panel2.Height = searchTerm.Height + 7;
panel2.Controls.Add(searchTerm);
searchTerm.Dock = DockStyle.Top;
searchTerm.Enabled = Help2EnvIsReady;
searchTerm.TextChanged += new EventHandler(this.SearchTextChanged);
searchTerm.KeyPress += new KeyPressEventHandler(this.SearchTextKeyPress);
// SearchTerm Label
Controls.Add(label2);
label2.Text = sps.Parse("${res:AddIns.HtmlHelp2.LookFor}");
label2.Dock = DockStyle.Top;
label2.TextAlign = ContentAlignment.MiddleLeft;
label2.Enabled = Help2EnvIsReady;
}
private void FakeHelpControl()
{
if(indexControl != null) indexControl.Dispose();
indexControl = null;
Panel nohelpPanel = new Panel();
Controls.Add(nohelpPanel);
nohelpPanel.Dock = DockStyle.Fill;
nohelpPanel.BorderStyle = BorderStyle.Fixed3D;
}
public void LoadIndex()
{
searchTerm.Text = "";
searchTerm.Items.Clear();
indexControl.IndexData = h2env.GetIndex(h2env.CurrentFilterQuery);
filterCombobox.SelectedIndexChanged -= new EventHandler(FilterChanged);
h2env.BuildFilterList(filterCombobox);
filterCombobox.SelectedIndexChanged += new EventHandler(FilterChanged);
}
private void FilterChanged(object sender, EventArgs e)
{
string selectedFilterName = filterCombobox.SelectedItem.ToString();
if(selectedFilterName != "")
{
Cursor.Current = Cursors.WaitCursor;
indexControl.IndexData = h2env.GetIndex(h2env.FindFilterQuery(selectedFilterName));
Cursor.Current = Cursors.Default;
}
}
#region Help 2.0 Environment Events
private void FilterQueryChanged(object sender, EventArgs e)
{
Application.DoEvents();
string currentFilterName = filterCombobox.SelectedItem.ToString();
if(String.Compare(currentFilterName, h2env.CurrentFilterName) != 0)
{
filterCombobox.SelectedIndexChanged -= new EventHandler(FilterChanged);
filterCombobox.SelectedIndex = filterCombobox.Items.IndexOf(h2env.CurrentFilterName);
indexControl.IndexData = h2env.GetIndex(h2env.CurrentFilterQuery);
filterCombobox.SelectedIndexChanged += new EventHandler(FilterChanged);
}
}
private void NamespaceReloaded(object sender, EventArgs e)
{
this.LoadIndex();
}
#endregion
private void SearchTextChanged(object sender, EventArgs e)
{
if(!itemClicked && searchTerm.Text != "")
{
indexControl.Selection = indexControl.IndexData.GetSlotFromString(searchTerm.Text);
}
}
private void SearchTextKeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == (char)13)
{
int indexSlot = indexControl.IndexData.GetSlotFromString(searchTerm.Text);
string indexTerm = indexControl.IndexData.GetFullStringFromSlot(indexSlot, ",");
searchTerm.Items.Insert(0,indexTerm);
searchTerm.SelectedIndex = 0;
if(searchTerm.Items.Count > 10) searchTerm.Items.RemoveAt(10);
this.ShowSelectedItemEntry(indexTerm, indexSlot);
}
}
private void IndexItemClicked(object sender, IHxIndexViewEvents_ItemClickEvent e)
{
string indexTerm = indexControl.IndexData.GetFullStringFromSlot(e.iItem, ",");
int indexSlot = e.iItem;
itemClicked = true;
searchTerm.Items.Insert(0,indexTerm);
searchTerm.SelectedIndex = 0;
itemClicked = false;
this.ShowSelectedItemEntry(indexTerm, indexSlot);
}
private void ShowSelectedItemEntry(string indexTerm, int indexSlot)
{
HtmlHelp2IndexResultsPad indexResults = (HtmlHelp2IndexResultsPad)WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2IndexResultsPad));
if(indexResults == null)
return;
try
{
IHxTopicList matchingTopics = indexControl.IndexData.GetTopicsFromSlot(indexSlot);
try
{
indexResults.CleanUp();
indexResults.IndexResultsListView.BeginUpdate();
foreach(IHxTopic topic in matchingTopics)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle,HxTopicGetTitleDefVal.HxTopicGetTitleFileName);
lvi.SubItems.Add(topic.Location);
lvi.Tag = topic;
indexResults.IndexResultsListView.Items.Add(lvi);
}
// for(int i = 1; i <= matchingTopics.Count; i++) {
// IHxTopic topic = matchingTopics.ItemAt(i);
//
// if(topic != null) {
// ListViewItem lvi = new ListViewItem();
// lvi.Text = topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle,HxTopicGetTitleDefVal.HxTopicGetTitleFileName);
// lvi.SubItems.Add(topic.Location);
// lvi.Tag = topic;
//
// indexResults.IndexResultsListView.Items.Add(lvi);
// }
// }
}
finally
{
indexResults.IndexResultsListView.EndUpdate();
indexResults.SortLV(0);
indexResults.SetStatusMessage(indexTerm);
}
switch(matchingTopics.Count)
{
case 0:
break;
case 1:
IHxTopic topic = (IHxTopic)matchingTopics.ItemAt(1);
if(topic != null) ShowHelpBrowser.OpenHelpView(topic);
break;
default:
indexResults.BringPadToFront();
break;
}
}
catch {}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -