diff --git a/src/AddIns/Misc/HelpViewer/Source/Commands.cs b/src/AddIns/Misc/HelpViewer/Source/Commands.cs index 4761100e12..6784314de0 100644 --- a/src/AddIns/Misc/HelpViewer/Source/Commands.cs +++ b/src/AddIns/Misc/HelpViewer/Source/Commands.cs @@ -42,8 +42,11 @@ namespace MSHelpSystem.Commands { public override void Run() { - PadDescriptor toc = WorkbenchSingleton.Workbench.GetPad(typeof(Help3TocPad)); - if (toc != null) toc.BringPadToFront(); + if (Help3Service.Config.ExternalHelp) DisplayHelp.Catalog(); + else { + PadDescriptor toc = WorkbenchSingleton.Workbench.GetPad(typeof(Help3TocPad)); + if (toc != null) toc.BringPadToFront(); + } } } } diff --git a/src/AddIns/Misc/HelpViewer/Source/Core/DisplayHelp.cs b/src/AddIns/Misc/HelpViewer/Source/Core/DisplayHelp.cs index 4884e57a1e..a3ec8127c1 100644 --- a/src/AddIns/Misc/HelpViewer/Source/Core/DisplayHelp.cs +++ b/src/AddIns/Misc/HelpViewer/Source/Core/DisplayHelp.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Globalization; using System.Threading; using System.Windows.Forms; @@ -110,11 +111,14 @@ namespace MSHelpSystem.Core static void DisplayLocalHelp(string arguments) { - DisplayLocalHelp(arguments, true); + DisplayLocalHelp(arguments, !Help3Service.Config.ExternalHelp); } static void DisplayLocalHelp(string arguments, bool embedded) { + if (string.IsNullOrEmpty(arguments)) { + throw new ArgumentNullException("arguments"); + } if (!Help3Environment.IsLocalHelp) { return; } if (!HelpLibraryAgent.IsRunning) { HelpLibraryAgent.Start(); @@ -123,6 +127,10 @@ namespace MSHelpSystem.Core string helpUrl = string.Format(@"{0}{1}{2}", arguments, ProjectLanguages.GetCurrentLanguageAsHttpParam(), (embedded)?"&embedded=true":string.Empty); + if (Help3Service.Config.ExternalHelp) { + DisplayHelpWithShellExecute(helpUrl); + return; + } BrowserPane browser = ActiveHelp3Browser(); if (browser != null) { LoggingService.Info(string.Format("Help 3.0: Navigating to {0}", helpUrl)); @@ -131,9 +139,35 @@ namespace MSHelpSystem.Core } } + static void DisplayHelpWithShellExecute(string arguments) + { + if (string.IsNullOrEmpty(arguments)) { + throw new ArgumentNullException("arguments"); + } + ProcessStartInfo psi = new ProcessStartInfo(); + psi.FileName = arguments; + psi.UseShellExecute = true; + psi.WindowStyle = ProcessWindowStyle.Normal; + try { + Process p = Process.Start(psi); + p.WaitForInputIdle(); + } + catch (Exception ex) { + LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString())); + } + } + static void DisplayHelpOnMSDN(string keyword) { + if (string.IsNullOrEmpty(keyword)) { + throw new ArgumentNullException("keyword"); + } string msdnUrl = string.Format(@"http://msdn.microsoft.com/library/{0}.aspx", keyword); + + if (Help3Service.Config.ExternalHelp) { + DisplayHelpWithShellExecute(msdnUrl); + return; + } BrowserPane browser = ActiveHelp3Browser(); if (browser != null) { LoggingService.Info(string.Format("Help 3.0: Navigating to {0}", msdnUrl)); @@ -144,6 +178,9 @@ namespace MSHelpSystem.Core static void DisplaySearchOnMSDN(string searchWords) { + if (string.IsNullOrEmpty(searchWords)) { + throw new ArgumentNullException("searchWords"); + } string msdnUrl = string.Format(@"http://social.social.msdn.microsoft.com/Search/{0}/?query={1}&ac=3", CultureInfo.CurrentUICulture.ToString(), searchWords.Replace(" ", "+")); BrowserPane browser = ActiveHelp3Browser(); if (browser != null) { diff --git a/src/AddIns/Misc/HelpViewer/Source/Core/Help3Service.cs b/src/AddIns/Misc/HelpViewer/Source/Core/Help3Service.cs index 58bd36eaee..659c70f538 100644 --- a/src/AddIns/Misc/HelpViewer/Source/Core/Help3Service.cs +++ b/src/AddIns/Misc/HelpViewer/Source/Core/Help3Service.cs @@ -82,13 +82,8 @@ namespace MSHelpSystem.Core static void Help3ConfigurationUpdated(object sender, EventArgs e) { - if (config.OfflineMode) { - HelpClientWatcher.EnableLocalHelp(); - } - else { - HelpClientWatcher.EnableOnlineHelp(); - HelpLibraryAgent.Stop(); - } + if (config.OfflineMode) HelpClientWatcher.EnableLocalHelp(); + else HelpClientWatcher.EnableOnlineHelp(); } #endregion diff --git a/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml b/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml index da665bac61..cb113470d4 100644 --- a/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml +++ b/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml @@ -22,7 +22,11 @@ Margin="0,0,0,5"/> + Click="Help3OnlineModeClicked" + Margin="0,0,0,8" /> + diff --git a/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs b/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs index b3178d454c..96f4e88405 100644 --- a/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs +++ b/src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Windows; using System.Windows.Controls; -using System.Windows.Forms; +using System.Windows.Documents; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; @@ -30,6 +30,7 @@ namespace MSHelpSystem help3Catalogs.SelectedValue = Help3Service.ActiveCatalog.ShortName; help3Catalogs.IsEnabled = (Help3Service.Items.Count > 1 && Help3Service.Config.OfflineMode); onlineMode.IsChecked = !Help3Service.Config.OfflineMode; + externalHelp.IsChecked = Help3Service.Config.ExternalHelp; } void Help3CatalogsSelectionChanged(object sender, SelectionChangedEventArgs e) @@ -54,6 +55,12 @@ namespace MSHelpSystem help3Catalogs.IsEnabled = false; } + void Help3UseExternalHelpClicked(object sender, RoutedEventArgs e) + { + Help3Service.Config.ExternalHelp = (bool)externalHelp.IsChecked; + LoggingService.Info(string.Format("Help 3.0: {0} external help", (Help3Service.Config.ExternalHelp)?"Enabling":"Disabling")); + } + public override bool SaveOptions() { Help3Service.SaveHelpConfiguration(); diff --git a/src/AddIns/Misc/HelpViewer/Source/Helper/Help3Configuration.cs b/src/AddIns/Misc/HelpViewer/Source/Helper/Help3Configuration.cs index cd319fa8b6..5042f08c07 100644 --- a/src/AddIns/Misc/HelpViewer/Source/Helper/Help3Configuration.cs +++ b/src/AddIns/Misc/HelpViewer/Source/Helper/Help3Configuration.cs @@ -13,6 +13,7 @@ namespace MSHelpSystem.Helper string activeCatalogId = string.Empty; bool offlineMode = true; + bool externalHelp = false; [XmlElement("activeCatalog")] public string ActiveCatalogId @@ -27,5 +28,12 @@ namespace MSHelpSystem.Helper get { return offlineMode; } set { offlineMode = value; } } + + [XmlElement("externalHelp")] + public bool ExternalHelp + { + get { return externalHelp; } + set { externalHelp = value; } + } } }