From f03fbe2c1c2fe28a89adf61531adc03d307788a0 Mon Sep 17 00:00:00 2001 From: Mathias Simmack Date: Sat, 17 Jun 2006 18:06:16 +0000 Subject: [PATCH] fixed some flaws in the TOC and Index control git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1496 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/src/BaseControls/IndexPad.cs | 276 ++++++++------- .../Project/src/BaseControls/TocPad.cs | 332 ++++++++++-------- 2 files changed, 335 insertions(+), 273 deletions(-) diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexPad.cs index 3fe78866b3..84403ada66 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexPad.cs @@ -51,58 +51,47 @@ namespace HtmlHelp2 public HtmlHelp2IndexPad() { help2IndexControl = new MsHelp2IndexControl(); - if (help2IndexControl.IsEnabled) help2IndexControl.LoadIndex(); } } - + public class MsHelp2IndexControl : UserControl { AxHxIndexCtrl indexControl = null; - ComboBox filterCombobox = new ComboBox(); - ComboBox searchTerm = new ComboBox(); - Label label1 = new Label(); - Label label2 = new Label(); - bool itemClicked = false; - bool controlIsEnabled = false; - + ComboBox filterCombobox = new ComboBox(); + ComboBox searchTerm = new ComboBox(); + Label label1 = new Label(); + Label label2 = new Label(); + bool itemClicked = false; + bool isEnabled = false; + protected override void Dispose(bool disposing) { base.Dispose(disposing); - if (disposing && indexControl != null) { indexControl.Dispose(); } - } - - public bool IsEnabled - { - get { return this.controlIsEnabled; } - } - - public void RedrawContent() - { - label1.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.FilteredBy}"); - label2.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.LookFor}"); + if (disposing && indexControl != null) + { + indexControl.Dispose(); + } } public MsHelp2IndexControl() { - this.controlIsEnabled = (HtmlHelp2Environment.IsReady && - Help2ControlsValidation.IsIndexControlRegistered); + this.isEnabled = (HtmlHelp2Environment.IsReady && + Help2ControlsValidation.IsIndexControlRegistered); - if (this.controlIsEnabled) + if (this.isEnabled) { try { - indexControl = new AxHxIndexCtrl(); + indexControl = new AxHxIndexCtrl(); indexControl.BeginInit(); - indexControl.Dock = DockStyle.Fill; - indexControl.ItemClick += new AxMSHelpControls.IHxIndexViewEvents_ItemClickEventHandler(this.IndexItemClicked); + indexControl.Dock = DockStyle.Fill; + indexControl.ItemClick += + new AxMSHelpControls.IHxIndexViewEvents_ItemClickEventHandler(this.IndexItemClick); indexControl.EndInit(); Controls.Add(indexControl); indexControl.CreateControl(); - indexControl.BorderStyle = HxBorderStyle.HxBorderStyle_FixedSingle; - indexControl.FontSource = HxFontSourceConstant.HxFontExternal; - - HtmlHelp2Environment.FilterQueryChanged += new EventHandler(FilterQueryChanged); - HtmlHelp2Environment.NamespaceReloaded += new EventHandler(NamespaceReloaded); + indexControl.BorderStyle = HxBorderStyle.HxBorderStyle_FixedSingle; + indexControl.FontSource = HxFontSourceConstant.HxFontExternal; } catch (Exception ex) { @@ -114,147 +103,152 @@ namespace HtmlHelp2 { this.FakeHelpControl(); } - - // Filter Combobox - Panel panel1 = new Panel(); + + Panel panel1 = new Panel(); Controls.Add(panel1); - panel1.Dock = DockStyle.Top; - panel1.Height = filterCombobox.Height + 7; + 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 = this.controlIsEnabled; - filterCombobox.SelectedIndexChanged += new EventHandler(FilterChanged); + filterCombobox.Dock = DockStyle.Top; + filterCombobox.DropDownStyle = ComboBoxStyle.DropDownList; + filterCombobox.Sorted = true; + filterCombobox.Enabled = this.isEnabled; + filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); - // Filter label Controls.Add(label1); - label1.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.FilteredBy}"); - label1.Dock = DockStyle.Top; + label1.Dock = DockStyle.Top; label1.TextAlign = ContentAlignment.MiddleLeft; - label1.Enabled = this.controlIsEnabled; + label1.Enabled = this.isEnabled; - // SearchTerm Combobox - Panel panel2 = new Panel(); + Panel panel2 = new Panel(); Controls.Add(panel2); - panel2.Dock = DockStyle.Top; - panel2.Height = searchTerm.Height + 7; + panel2.Dock = DockStyle.Top; + panel2.Height = searchTerm.Height + 7; + panel2.Controls.Add(searchTerm); - searchTerm.Dock = DockStyle.Top; - searchTerm.Enabled = this.controlIsEnabled; - searchTerm.TextChanged += new EventHandler(SearchTextChanged); - searchTerm.KeyPress += new KeyPressEventHandler(KeyPressed); + searchTerm.Dock = DockStyle.Top; + searchTerm.Enabled = this.isEnabled; + searchTerm.TextChanged += new EventHandler(this.SearchTextChanged); + searchTerm.KeyPress += new KeyPressEventHandler(this.SearchKeyPress); - // SearchTerm Label Controls.Add(label2); - label2.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.LookFor}"); - label2.Dock = DockStyle.Top; - label2.TextAlign = ContentAlignment.MiddleLeft; - label2.Enabled = this.controlIsEnabled; + label2.Dock = DockStyle.Top; + label2.TextAlign = ContentAlignment.MiddleLeft; + label2.Enabled = this.isEnabled; + + this.RedrawContent(); + + if (this.isEnabled) + { + HtmlHelp2Environment.FilterQueryChanged += new EventHandler(this.FilterQueryChanged); + HtmlHelp2Environment.NamespaceReloaded += new EventHandler(this.NamespaceReloaded); + this.LoadIndex(); + } } private void FakeHelpControl() { if (indexControl != null) indexControl.Dispose(); - - indexControl = null; + indexControl = null; + Controls.Clear(); - Panel nohelpPanel = new Panel(); - Controls.Add(nohelpPanel); - nohelpPanel.Dock = DockStyle.Fill; + Panel nohelpPanel = new Panel(); + nohelpPanel.Dock = DockStyle.Fill; nohelpPanel.BorderStyle = BorderStyle.Fixed3D; + Controls.Add(nohelpPanel); } - public void LoadIndex() + public void RedrawContent() { - if (!this.controlIsEnabled) return; - - try - { - searchTerm.Text = ""; - searchTerm.Items.Clear(); - indexControl.IndexData = HtmlHelp2Environment.GetIndex(HtmlHelp2Environment.CurrentFilterQuery); - filterCombobox.SelectedIndexChanged -= new EventHandler(FilterChanged); - HtmlHelp2Environment.BuildFilterList(filterCombobox); - filterCombobox.SelectedIndexChanged += new EventHandler(FilterChanged); - } - catch - { - LoggingService.Error("Help 2.0: cannot connect to IHxIndex interface (Index)"); - indexControl.Enabled = false; - indexControl.BackColor = SystemColors.ButtonFace; - filterCombobox.Enabled = false; - searchTerm.Enabled = false; - } + label1.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.FilteredBy}"); + label2.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.LookFor}"); } - private void FilterChanged(object sender, EventArgs e) + private void IndexItemClick(object sender, IHxIndexViewEvents_ItemClickEvent e) { - string selectedString = filterCombobox.SelectedItem.ToString(); + string indexTerm = indexControl.IndexData.GetFullStringFromSlot(e.iItem, ","); + int indexSlot = e.iItem; - if (selectedString != "") - { - Cursor.Current = Cursors.WaitCursor; - indexControl.IndexData = HtmlHelp2Environment.GetIndex(HtmlHelp2Environment.FindFilterQuery(selectedString)); - Cursor.Current = Cursors.Default; - } + itemClicked = true; + searchTerm.Items.Insert(0, indexTerm); + searchTerm.SelectedIndex = 0; + itemClicked = false; + + + this.ShowSelectedItemEntry(indexTerm, indexSlot); } - #region Help 2.0 Environment Events - private void FilterQueryChanged(object sender, EventArgs e) + private void FilterChanged(object sender, EventArgs e) { - Application.DoEvents(); - - string currentFilterName = filterCombobox.SelectedItem.ToString(); - if (String.Compare(currentFilterName, HtmlHelp2Environment.CurrentFilterName) != 0) + string selectedFilterName = filterCombobox.SelectedItem.ToString(); + if (selectedFilterName != null && selectedFilterName.Length > 0) { - filterCombobox.SelectedIndexChanged -= new EventHandler(FilterChanged); - filterCombobox.SelectedIndex = filterCombobox.Items.IndexOf(HtmlHelp2Environment.CurrentFilterName); - indexControl.IndexData = HtmlHelp2Environment.GetIndex(HtmlHelp2Environment.CurrentFilterQuery); - filterCombobox.SelectedIndexChanged += new EventHandler(FilterChanged); + Cursor.Current = Cursors.WaitCursor; + this.SetIndex(selectedFilterName); + Cursor.Current = Cursors.Default; } } - private void NamespaceReloaded(object sender, EventArgs e) - { - this.LoadIndex(); - } - #endregion - private void SearchTextChanged(object sender, EventArgs e) { - if (!itemClicked && searchTerm.Text != "") + if (!this.itemClicked && searchTerm.Text.Length > 0) { - indexControl.Selection = indexControl.IndexData.GetSlotFromString(searchTerm.Text); + indexControl.Selection = + indexControl.IndexData.GetSlotFromString(searchTerm.Text); } } - private void KeyPressed(object sender, KeyPressEventArgs e) + private void SearchKeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)13) { - int indexSlot = indexControl.IndexData.GetSlotFromString(searchTerm.Text); + int indexSlot = indexControl.IndexData.GetSlotFromString(searchTerm.Text); string indexTerm = indexControl.IndexData.GetFullStringFromSlot(indexSlot, ","); - searchTerm.Items.Insert(0,indexTerm); + searchTerm.Items.Insert(0, indexTerm); searchTerm.SelectedIndex = 0; - if (searchTerm.Items.Count > 10) searchTerm.Items.RemoveAt(10); + if (searchTerm.Items.Count > 10) + { + searchTerm.Items.RemoveAt(10); + } this.ShowSelectedItemEntry(indexTerm, indexSlot); } } - - private void IndexItemClicked(object sender, IHxIndexViewEvents_ItemClickEvent e) + + private void LoadIndex() { - string indexTerm = indexControl.IndexData.GetFullStringFromSlot(e.iItem, ","); - int indexSlot = e.iItem; - - itemClicked = true; - searchTerm.Items.Insert(0,indexTerm); - searchTerm.SelectedIndex = 0; - itemClicked = false; + this.SetIndex(HtmlHelp2Environment.CurrentFilterName); + if (this.isEnabled) + { + searchTerm.Text = string.Empty; + searchTerm.Items.Clear(); + filterCombobox.SelectedIndexChanged -= new EventHandler(this.FilterChanged); + HtmlHelp2Environment.BuildFilterList(filterCombobox); + filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); + } + } - this.ShowSelectedItemEntry(indexTerm, indexSlot); + private void SetIndex(string filterName) + { + if (!this.isEnabled) return; + try + { + indexControl.IndexData = + HtmlHelp2Environment.GetIndex(HtmlHelp2Environment.FindFilterQuery(filterName)); + } + catch + { + this.isEnabled = false; + indexControl.Enabled = false; + indexControl.BackColor = SystemColors.ButtonFace; + filterCombobox.Enabled = false; + searchTerm.Enabled = false; + label1.Enabled = false; + label2.Enabled = false; + LoggingService.Error("Help 2.0: cannot connect to IHxIndex interface (Index)"); + } } private void ShowSelectedItemEntry(string indexTerm, int indexSlot) @@ -275,9 +269,10 @@ namespace HtmlHelp2 foreach (IHxTopic topic in matchingTopics) { ListViewItem lvi = new ListViewItem(); - lvi.Text = topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle, - HxTopicGetTitleDefVal.HxTopicGetTitleFileName); - lvi.Tag = topic; + lvi.Text = + topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle, + HxTopicGetTitleDefVal.HxTopicGetTitleFileName); + lvi.Tag = topic; lvi.SubItems.Add(topic.Location); ((HtmlHelp2IndexResultsPad)indexResults.PadContent).IndexResultsListView.Items.Add(lvi); } @@ -307,5 +302,32 @@ namespace HtmlHelp2 LoggingService.Error("Help 2.0: cannot get matching index entries; " + ex.ToString()); } } + + #region Help 2.0 Environment Events + private void FilterQueryChanged(object sender, EventArgs e) + { + Application.DoEvents(); + + string currentFilterName = filterCombobox.SelectedItem.ToString(); + if (string.Compare(currentFilterName, HtmlHelp2Environment.CurrentFilterName) != 0) + { + filterCombobox.SelectedIndexChanged -= new EventHandler(this.FilterChanged); + filterCombobox.SelectedIndex = + filterCombobox.Items.IndexOf(HtmlHelp2Environment.CurrentFilterName); + this.SetIndex(HtmlHelp2Environment.CurrentFilterName); + filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); + } + } + + private void NamespaceReloaded(object sender, EventArgs e) + { + this.LoadIndex(); + } + #endregion + + public bool IsEnabled + { + get { return this.isEnabled; } + } } } diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs index 5484d79df2..acd114ec4d 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs @@ -55,32 +55,31 @@ namespace HtmlHelp2 public HtmlHelp2TocPad() { help2TocControl = new MsHelp2TocControl(); - if (help2TocControl.IsEnabled) help2TocControl.LoadToc(); } public void SyncToc(string topicUrl) { - if (help2TocControl.IsEnabled) help2TocControl.SynchronizeToc(topicUrl); + help2TocControl.SynchronizeToc(topicUrl); } public void GetPrevFromNode() { - if (help2TocControl.IsEnabled) help2TocControl.GetPrevFromNode(); + help2TocControl.GetPrevFromNode(); } public void GetPrevFromUrl(string topicUrl) { - if (help2TocControl.IsEnabled) help2TocControl.GetPrevFromUrl(topicUrl); + help2TocControl.GetPrevFromUrl(topicUrl); } public void GetNextFromNode() { - if (help2TocControl.IsEnabled) help2TocControl.GetNextFromNode(); + help2TocControl.GetNextFromNode(); } public void GetNextFromUrl(string topicUrl) { - if (help2TocControl.IsEnabled) help2TocControl.GetNextFromUrl(topicUrl); + help2TocControl.GetNextFromUrl(topicUrl); } public bool IsNotFirstNode @@ -96,67 +95,62 @@ namespace HtmlHelp2 public class MsHelp2TocControl : UserControl { - AxHxTocCtrl tocControl = null; - ComboBox filterCombobox = new ComboBox(); - Label label1 = new Label(); - ContextMenuStrip printPopup = new ContextMenuStrip(); - ToolStripMenuItem printTopic = new ToolStripMenuItem(); - ToolStripMenuItem printChildTopics = new ToolStripMenuItem(); - bool controlIsEnabled = false; + AxHxTocCtrl tocControl = null; + ComboBox filterCombobox = new ComboBox(); + Label label1 = new Label(); + ContextMenuStrip printContextMenu = new ContextMenuStrip(); + ToolStripMenuItem printTopic = new ToolStripMenuItem(); + ToolStripMenuItem printTopicAndSubTopics = new ToolStripMenuItem(); + bool isEnabled = false; protected override void Dispose(bool disposing) { base.Dispose(disposing); - if (disposing && tocControl != null) { tocControl.Dispose(); } - } - - public bool IsEnabled - { - get { return this.controlIsEnabled; } - } - - public void RedrawContent() - { - label1.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.FilteredBy}"); + if (disposing && tocControl != null) + { + tocControl.Dispose(); + } } public MsHelp2TocControl() { - this.controlIsEnabled = (HtmlHelp2Environment.IsReady && - Help2ControlsValidation.IsTocControlRegistered); + this.isEnabled = (HtmlHelp2Environment.IsReady && Help2ControlsValidation.IsTocControlRegistered); - if (this.controlIsEnabled) + if (this.isEnabled) { try { - tocControl = new AxHxTocCtrl(); + tocControl = new AxHxTocCtrl(); tocControl.BeginInit(); - tocControl.Dock = DockStyle.Fill; - tocControl.NodeClick += - new AxMSHelpControls.IHxTreeViewEvents_NodeClickEventHandler(this.TocNodeClicked); - tocControl.NodeRightClick += - new AxMSHelpControls.IHxTreeViewEvents_NodeRightClickEventHandler(this.TocNodeRightClicked); + tocControl.Dock = DockStyle.Fill; + tocControl.NodeClick += + new AxMSHelpControls.IHxTreeViewEvents_NodeClickEventHandler(this.TocNodeClick); + tocControl.NodeRightClick += + new AxMSHelpControls.IHxTreeViewEvents_NodeRightClickEventHandler(TocNodeRightClick); tocControl.EndInit(); Controls.Add(tocControl); tocControl.CreateControl(); - tocControl.BorderStyle = HxBorderStyle.HxBorderStyle_FixedSingle; - tocControl.FontSource = HxFontSourceConstant.HxFontExternal; - #if DExplore8Style_NoTOCPictures - tocControl.TreeStyle = HxTreeStyleConstant.HxTreeStyle_TreelinesPlusMinusText; - #endif - printTopic.Image = ResourcesHelper.GetBitmap("HtmlHelp2.16x16.Print.bmp"); - printTopic.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText; - printTopic.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.PrintTopic}"); - printChildTopics.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.PrintSubtopics}"); - printPopup.Items.Add(printTopic); - printTopic.Click += new EventHandler(this.PrintTopic); - printPopup.Items.Add(printChildTopics); - printChildTopics.Click += new EventHandler(this.PrintTopicAndSubtopics); + tocControl.BorderStyle = HxBorderStyle.HxBorderStyle_FixedSingle; + tocControl.FontSource = HxFontSourceConstant.HxFontExternal; + #if DExplore8StyleWithNoTocPictures + tocControl.TreeStyle = HxTreeStyleConstant.HxTreeStyle_TreelinesPlusMinusText; + #endif + + printTopic.Image = ResourcesHelper.GetBitmap("HtmlHelp2.16x16.Print.bmp"); + printTopic.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText; + printTopic.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.PrintTopic}"); + printTopic.Click += new EventHandler(this.PrintTopic); + printContextMenu.Items.Add(printTopic); + + printTopicAndSubTopics.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.PrintSubtopics}"); + printTopicAndSubTopics.Click += new EventHandler(this.PrintTopicAndSubTopics); + printContextMenu.Items.Add(printTopicAndSubTopics); } - catch (Exception ex) + catch(Exception ex) { LoggingService.Error("Help 2.0: TOC control failed; " + ex.ToString()); + this.isEnabled = false; this.FakeHelpControl(); } } @@ -164,161 +158,189 @@ namespace HtmlHelp2 { this.FakeHelpControl(); } - - // Combobox panel - Panel panel1 = new Panel(); + + Panel panel1 = new Panel(); Controls.Add(panel1); - panel1.Dock = DockStyle.Top; - panel1.Height = filterCombobox.Height + 7; + 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 = this.controlIsEnabled; - filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); + filterCombobox.Dock = DockStyle.Top; + filterCombobox.DropDownStyle = ComboBoxStyle.DropDownList; + filterCombobox.Sorted = true; + filterCombobox.Enabled = this.isEnabled; + filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); - // Filter label Controls.Add(label1); - label1.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.FilteredBy}"); - label1.Dock = DockStyle.Top; - label1.TextAlign = ContentAlignment.MiddleLeft; - label1.Enabled = this.controlIsEnabled; - - if (this.controlIsEnabled) + label1.Dock = DockStyle.Top; + label1.TextAlign = ContentAlignment.MiddleLeft; + label1.Enabled = this.isEnabled; + this.RedrawContent(); + + if (this.isEnabled) { - HtmlHelp2Environment.FilterQueryChanged += new EventHandler(this.FilterQueryChanged); - HtmlHelp2Environment.NamespaceReloaded += new EventHandler(this.NamespaceReloaded); + HtmlHelp2Environment.FilterQueryChanged += new EventHandler(this.FilterQueryChanged); + HtmlHelp2Environment.NamespaceReloaded += new EventHandler(this.NamespaceReloaded); + this.LoadToc(); } } private void FakeHelpControl() { - tocControl = null; - Label nohelpLabel = new Label(); - nohelpLabel.Dock = DockStyle.Fill; - nohelpLabel.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.HelpSystemNotAvailable}"); + if (tocControl != null) tocControl.Dispose(); + tocControl = null; + + Controls.Clear(); + Label nohelpLabel = new Label(); + nohelpLabel.Dock = DockStyle.Fill; + nohelpLabel.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.HelpSystemNotAvailable}"); nohelpLabel.TextAlign = ContentAlignment.MiddleCenter; Controls.Add(nohelpLabel); } - public void LoadToc() + public void RedrawContent() + { + label1.Text = StringParser.Parse("${res:AddIns.HtmlHelp2.FilteredBy}"); + } + + private void TocNodeClick(object sender, IHxTreeViewEvents_NodeClickEvent e) { - if (!this.controlIsEnabled) return; + string topicUrl = tocControl.Hierarchy.GetURL(e.hNode); + this.CallHelp(topicUrl); + } - try + private void TocNodeRightClick(object sender, IHxTreeViewEvents_NodeRightClickEvent e) + { + if (e.hNode != 0) { - tocControl.Hierarchy = HtmlHelp2Environment.GetTocHierarchy(HtmlHelp2Environment.CurrentFilterQuery); - filterCombobox.SelectedIndexChanged -= new EventHandler(this.FilterChanged); - HtmlHelp2Environment.BuildFilterList(filterCombobox); - filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); + printTopic.Enabled = tocControl.Hierarchy.GetURL(e.hNode) != ""; + printTopicAndSubTopics.Enabled = tocControl.Hierarchy.GetFirstChild(e.hNode) != 0; + bool selectTextFlag = (tocControl.Hierarchy.GetFirstChild(e.hNode) == 0 || + tocControl.Hierarchy.GetURL(e.hNode) == ""); + printTopicAndSubTopics.Text = + StringParser.Parse((selectTextFlag)? + "${res:AddIns.HtmlHelp2.PrintSubtopics}": + "${res:AddIns.HtmlHelp2.PrintTopicAndSubtopics}"); + + Point p = new Point(e.x, e.y); + p = this.PointToClient(p); + printContextMenu.Show(this, p); } - catch + } + + #region Printing + private void PrintTopic(object sender, EventArgs e) + { + if (tocControl.Selection != 0) { - LoggingService.Error("Help 2.0: cannot connect to IHxHierarchy interface (Contents)"); - tocControl.Enabled = false; - tocControl.BackColor = SystemColors.ButtonFace; - filterCombobox.Enabled = false; + tocControl.Hierarchy.PrintNode(0, tocControl.Selection, PrintOptions.HxHierarchy_PrintNode_Option_Node); } } - private void FilterChanged(object sender, EventArgs e) + private void PrintTopicAndSubTopics(object sender, EventArgs e) { - string selectedString = filterCombobox.SelectedItem.ToString(); - - if (selectedString != null && selectedString != "") + if (tocControl.Selection != 0) { - Cursor.Current = Cursors.WaitCursor; - tocControl.Hierarchy = HtmlHelp2Environment.GetTocHierarchy(HtmlHelp2Environment.FindFilterQuery(selectedString)); - Cursor.Current = Cursors.Default; + tocControl.Hierarchy.PrintNode(0, tocControl.Selection, PrintOptions.HxHierarchy_PrintNode_Option_Children); } } + + #endregion - #region Help 2.0 Environment Events - private void FilterQueryChanged(object sender, EventArgs e) + private void FilterChanged(object sender, EventArgs e) { - Application.DoEvents(); - - string currentFilterName = filterCombobox.SelectedItem.ToString(); - if (String.Compare(currentFilterName, HtmlHelp2Environment.CurrentFilterName) != 0) + string selectedFilterName = filterCombobox.SelectedItem.ToString(); + if (selectedFilterName != null && selectedFilterName.Length > 0) { - filterCombobox.SelectedIndexChanged -= new EventHandler(this.FilterChanged); - filterCombobox.SelectedIndex = filterCombobox.Items.IndexOf(HtmlHelp2Environment.CurrentFilterName); - tocControl.Hierarchy = HtmlHelp2Environment.GetTocHierarchy(HtmlHelp2Environment.CurrentFilterQuery); - filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); + Cursor.Current = Cursors.WaitCursor; + this.SetToc(selectedFilterName); + Cursor.Current = Cursors.Default; } } - - private void NamespaceReloaded(object sender, EventArgs e) + + private void LoadToc() { - this.LoadToc(); + this.SetToc(HtmlHelp2Environment.CurrentFilterName); + if (this.isEnabled) + { + filterCombobox.SelectedIndexChanged -= new EventHandler(this.FilterChanged); + HtmlHelp2Environment.BuildFilterList(filterCombobox); + filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); + } } - #endregion - - private void CallHelp(string topicUrl, bool syncToc) + + private void SetToc(string filterName) { - if (topicUrl != null && topicUrl != "") + if (!this.isEnabled) return; + try { - if (syncToc) this.SynchronizeToc(topicUrl); - ShowHelpBrowser.OpenHelpView(topicUrl); + tocControl.Hierarchy = + HtmlHelp2Environment.GetTocHierarchy(HtmlHelp2Environment.FindFilterQuery(filterName)); + } + catch + { + this.isEnabled = false; + tocControl.Enabled = false; + tocControl.BackColor = SystemColors.ButtonFace; + filterCombobox.Enabled = false; + label1.Enabled = false; + LoggingService.Error("Help 2.0: cannot connect to IHxHierarchy interface (Contents)"); } } - private void TocNodeClicked(object sender, IHxTreeViewEvents_NodeClickEvent e) + private void CallHelp(string topicUrl) { - string TopicUrl = tocControl.Hierarchy.GetURL(e.hNode); - this.CallHelp(TopicUrl,false); + this.CallHelp(topicUrl, true); } - #region Printing - private void TocNodeRightClicked(object sender, IHxTreeViewEvents_NodeRightClickEvent e) + private void CallHelp(string topicUrl, bool syncToc) { - if (e.hNode != 0) + if (topicUrl.Length > 0) { - printTopic.Enabled = tocControl.Hierarchy.GetURL(e.hNode) != ""; - printChildTopics.Enabled = tocControl.Hierarchy.GetFirstChild(e.hNode) != 0; - printChildTopics.Text = StringParser.Parse((tocControl.Hierarchy.GetFirstChild(e.hNode) == 0 || tocControl.Hierarchy.GetURL(e.hNode) == "")? - "${res:AddIns.HtmlHelp2.PrintSubtopics}": - "${res:AddIns.HtmlHelp2.PrintTopicAndSubtopics}"); - - Point p = new Point(e.x, e.y); - p = this.PointToClient(p); - printPopup.Show(this, p); + if (syncToc) this.SynchronizeToc(topicUrl); + ShowHelpBrowser.OpenHelpView(topicUrl); } } - private void PrintTopic(object sender, EventArgs e) + #region Help 2.0 Environment Events + private void FilterQueryChanged(object sender, EventArgs e) { - if (tocControl.Selection != 0) + Application.DoEvents(); + + string currentFilterName = filterCombobox.SelectedItem.ToString(); + if (string.Compare(currentFilterName, HtmlHelp2Environment.CurrentFilterName) != 0) { - tocControl.Hierarchy.PrintNode(0, - tocControl.Selection, - PrintOptions.HxHierarchy_PrintNode_Option_Node); + filterCombobox.SelectedIndexChanged -= new EventHandler(this.FilterChanged); + filterCombobox.SelectedIndex = + filterCombobox.Items.IndexOf(HtmlHelp2Environment.CurrentFilterName); + this.SetToc(HtmlHelp2Environment.CurrentFilterName); + filterCombobox.SelectedIndexChanged += new EventHandler(this.FilterChanged); } } - private void PrintTopicAndSubtopics(object sender, EventArgs e) + private void NamespaceReloaded(object sender, EventArgs e) { - if (tocControl.Selection != 0) - { - tocControl.Hierarchy.PrintNode(0, - tocControl.Selection, - PrintOptions.HxHierarchy_PrintNode_Option_Children); - } + this.LoadToc(); } #endregion - #region published Help2 TOC Commands + #region Published Help 2.0 Commands public void SynchronizeToc(string topicUrl) { - try { + if (!this.isEnabled) return; + try + { tocControl.Synchronize(topicUrl); - } catch (System.Runtime.InteropServices.COMException) { + } + catch (System.Runtime.InteropServices.COMException) + { // SD2-812: ignore exception when trying to synchronize non-existing URL } } public void GetNextFromNode() { + if (!this.isEnabled) return; int currentNode = tocControl.Hierarchy.GetNextFromNode(tocControl.Selection); string topicUrl = tocControl.Hierarchy.GetURL(currentNode); this.CallHelp(topicUrl, true); @@ -326,18 +348,25 @@ namespace HtmlHelp2 public void GetNextFromUrl(string url) { - try { + if (!this.isEnabled || url == null || url.Length == 0) return; + try + { int currentNode = tocControl.Hierarchy.GetNextFromUrl(url); string topicUrl = tocControl.Hierarchy.GetURL(currentNode); this.CallHelp(topicUrl, true); - } catch (System.Runtime.InteropServices.COMException) { - } catch (ArgumentException) { + } + catch (System.Runtime.InteropServices.COMException) + { // SD2-812: ignore exception when trying to synchronize non-existing URL } + catch (ArgumentException) + { + } } public void GetPrevFromNode() { + if (!this.isEnabled) return; int currentNode = tocControl.Hierarchy.GetPrevFromNode(tocControl.Selection); string topicUrl = tocControl.Hierarchy.GetURL(currentNode); this.CallHelp(topicUrl, true); @@ -345,14 +374,20 @@ namespace HtmlHelp2 public void GetPrevFromUrl(string url) { - try { + if (!this.isEnabled || url == null || url.Length == 0) return; + try + { int currentNode = tocControl.Hierarchy.GetPrevFromUrl(url); string topicUrl = tocControl.Hierarchy.GetURL(currentNode); this.CallHelp(topicUrl, true); - } catch (ArgumentException) { - } catch (System.Runtime.InteropServices.COMException) { + } + catch (System.Runtime.InteropServices.COMException) + { // SD2-812: ignore exception when trying to synchronize non-existing URL } + catch (ArgumentException) + { + } } public bool IsNotFirstNode @@ -362,7 +397,7 @@ namespace HtmlHelp2 try { int currentNode = tocControl.Hierarchy.GetPrevFromNode(tocControl.Selection); - return currentNode != 0; + return (currentNode != 0); } catch { @@ -378,7 +413,7 @@ namespace HtmlHelp2 try { int currentNode = tocControl.Hierarchy.GetNextFromNode(tocControl.Selection); - return currentNode != 0; + return (currentNode != 0); } catch { @@ -386,6 +421,11 @@ namespace HtmlHelp2 } } } + + public bool IsEnabled + { + get { return this.isEnabled; } + } #endregion } }