summaryrefslogtreecommitdiff
path: root/lib/help_provider.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/help_provider.h')
-rw-r--r--lib/help_provider.h72
1 files changed, 50 insertions, 22 deletions
diff --git a/lib/help_provider.h b/lib/help_provider.h
index 215b7dac..8227efb5 100644
--- a/lib/help_provider.h
+++ b/lib/help_provider.h
@@ -7,8 +7,14 @@
#ifndef HELPPROVIDER_H_INCLUDED
#define HELPPROVIDER_H_INCLUDED
-#include <wx/help.h>
+#ifdef FFS_WIN
#include <zen/zstring.h>
+#include <wx/msw/helpchm.h>
+
+#elif defined FFS_LINUX || defined FFS_MAC
+#include <wx/html/helpctrl.h>
+#endif
+
#include "ffs_paths.h"
namespace zen
@@ -25,45 +31,67 @@ void displayHelpEntry(const wxString& section, wxWindow* parent);
+//######################## implementation ########################
+namespace impl
+{
+//finish wxWidgets' job
+#ifdef FFS_WIN
+class FfsHelpController
+{
+public:
+ FfsHelpController()
+ {
+ chmHlp.Initialize(utfCvrtTo<wxString>(zen::getResourceDir()) + L"FreeFileSync.chm");
+ }
+ void openSection(const wxString& section, wxWindow* parent)
+ {
+ if (section.empty())
+ chmHlp.DisplayContents();
+ else
+ chmHlp.DisplaySection(replaceCpy(section, L'/', utfCvrtTo<wxString>(FILE_NAME_SEPARATOR)));
+ }
+private:
+ wxCHMHelpController chmHlp;
+};
+#elif defined FFS_LINUX || defined FFS_MAC
+class FfsHelpController
+{
+public:
+ void openSection(const wxString& section, wxWindow* parent)
+ {
+ wxHtmlModalHelp dlg(parent, utfCvrtTo<wxString>(zen::getResourceDir()) + L"Help/FreeFileSync.hhp", section,
+ wxHF_DEFAULT_STYLE | wxHF_DIALOG | wxHF_MODAL | wxHF_MERGE_BOOKS);
+ (void)dlg;
+ //-> solves modal help craziness on OSX!
+ //-> Suse Linux: avoids program hang on exit if user closed help parent dialog before the help dialog itself was closed (why is this even possible???)
+ // avoids ESC key not being recognized by help dialog (but by parent dialog instead)
+ }
+};
+#endif
-//######################## implementation ########################
inline
-wxHelpController& getHelpCtrl()
+FfsHelpController& getHelpCtrl()
{
- static wxHelpController controller; //external linkage, despite inline definition!
- static bool initialized = false;
- if (!initialized)
- {
- initialized = true;
- controller.Initialize(utfCvrtTo<wxString>(zen::getResourceDir()) +
-#ifdef FFS_WIN
- L"FreeFileSync.chm");
-#elif defined FFS_LINUX || defined FFS_MAC
- L"Help/FreeFileSync.hhp");
-#endif
- }
- return controller;
+ static FfsHelpController ctrl; //external linkage, despite inline definition!
+ return ctrl;
+}
}
inline
void displayHelpEntry(const wxString& section, wxWindow* parent)
{
- getHelpCtrl().SetParentWindow(parent); //this nicely solves modal issues on OSX with help file going to the background
- getHelpCtrl().DisplaySection(replaceCpy(section, L'/', utfCvrtTo<wxString>(FILE_NAME_SEPARATOR)));
- getHelpCtrl().SetParentWindow(nullptr);
+ impl::getHelpCtrl().openSection(section, parent);
}
inline
void displayHelpEntry(wxWindow* parent)
{
- getHelpCtrl().SetParentWindow(parent);
- getHelpCtrl().DisplayContents();
- getHelpCtrl().SetParentWindow(nullptr);
+ impl::getHelpCtrl().openSection(wxString(), parent);
}
}
bgstack15