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; }
+ }
}
}