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

📄 indexpad.cs

📁 c#源代码
💻 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 + -