From c972c7cbd9461041cc2cf8689e32f9a8fd04f66f Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Fri, 31 May 2013 06:26:08 +0900 Subject: [PATCH] Display the Subsurface manual in the help widget This adds a helper function to determine the Subsurface data directory (are we running from build directory? installed on Linux? installed on Mac? - still need to add support for Windows). This same function is then used by both the setup for Marble and for the help browser. This assumes that the user-manual.html file has actually been built and installed (which we don't do by default with the current Makefile). Right now there are rendering issues with our manual in the help browser widget - I'm sure this can be fixed... Signed-off-by: Dirk Hohndel --- helpers.h | 1 + qt-gui.cpp | 26 ++++++++++++++++++++++++++ qt-ui/globe.cpp | 32 +++++--------------------------- qt-ui/mainwindow.cpp | 11 +++++++++-- 4 files changed, 41 insertions(+), 29 deletions(-) diff --git a/helpers.h b/helpers.h index 04fcd8309..57b5aa6f7 100644 --- a/helpers.h +++ b/helpers.h @@ -17,5 +17,6 @@ QString get_volume_string(volume_t volume, bool showunit); QString get_pressure_string(pressure_t pressure, bool showunit); void set_default_dive_computer(const char *vendor, const char *product); void set_default_dive_computer_device(const char *name); +QString getSubsurfaceDataPath(QString folderToFind); #endif /* HELPER_H */ diff --git a/qt-gui.cpp b/qt-gui.cpp index 2d5e409b3..1d9f9cad3 100644 --- a/qt-gui.cpp +++ b/qt-gui.cpp @@ -263,4 +263,30 @@ void set_default_dive_computer_device(const char *name) s.endGroup(); } +QString getSubsurfaceDataPath(QString folderToFind) +{ + QString execdir; + QDir folder; + + // first check if we are running in the build dir, so this + // is just subdirectory of the current directory + execdir = QCoreApplication::applicationDirPath(); + folder = QDir(execdir.append(QDir::separator()).append(folderToFind)); + if (folder.exists()) + return folder.absolutePath(); + + // next check for the Linux typical $(prefix)/share/subsurface + execdir = QCoreApplication::applicationDirPath(); + folder = QDir(execdir.replace("bin", "share/subsurface/").append(folderToFind)); + if (folder.exists()) + return folder.absolutePath(); + + // then look for the usual location on a Mac + execdir = QCoreApplication::applicationDirPath(); + folder = QDir(execdir.append("/../Resources/share/").append(folderToFind)); + if (folder.exists()) + return folder.absolutePath(); + return QString(""); +} + #include "qt-gui.moc" diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp index 4b065c12d..bf2369862 100644 --- a/qt-ui/globe.cpp +++ b/qt-ui/globe.cpp @@ -1,6 +1,7 @@ #include "globe.h" #include "kmessagewidget.h" #include "../dive.h" +#include "../helpers.h" #include @@ -24,39 +25,16 @@ GlobeGPS::GlobeGPS(QWidget* parent) : MarbleWidget(parent), loadedDives(0) // if not, check if they are in a known location MapThemeManager mtm; QStringList list = mtm.mapThemeIds(); - QString theme, execdir; + QString theme, subsurfaceDataPath; QDir marble; bool foundGoogleMap = false; Q_FOREACH(theme, list) if (theme == "earth/googlesat/googlesat.dgml") foundGoogleMap = true; if (!foundGoogleMap) { - // first check if we are running from the build directory - execdir = QCoreApplication::applicationDirPath(); - marble = QDir(execdir.append("/marbledata")); - if (marble.exists()) { - MarbleDirs::setMarbleDataPath(marble.absolutePath()); - foundGoogleMap = true; - } - } - if (!foundGoogleMap) { - // next check if we can guess an installed location by replacing - // "bin" with "share/subsurface" - so /usr/local/bin/subsurface would - // have us check /usr/local/share/subsurface/marbledata - marble = execdir.replace("bin", "share/subsurface"); - if (marble.exists()) { - MarbleDirs::setMarbleDataPath(marble.absolutePath()); - foundGoogleMap = true; - } - } - if (!foundGoogleMap) { - // then check if we're running as an app on MacOSX - execdir = QCoreApplication::applicationDirPath(); - marble = QDir(execdir.append("/../Resources/share/marbledata")); - if (marble.exists()) { - MarbleDirs::setMarbleDataPath(marble.absolutePath()); - foundGoogleMap = true; - } + subsurfaceDataPath = getSubsurfaceDataPath("marbledata"); + if (subsurfaceDataPath != "") + MarbleDirs::setMarbleDataPath(subsurfaceDataPath); } messageWidget = new KMessageWidget(this); messageWidget->setCloseButtonVisible(false); diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index b70bb1ab9..d3cd951d8 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -23,6 +23,7 @@ #include "../dive.h" #include "../divelist.h" #include "../pref.h" +#include "../helpers.h" #include "modeldelegates.h" #include "models.h" #include "downloadfromdivecomputer.h" @@ -267,7 +268,13 @@ void MainWindow::on_actionUserManual_triggered() if(!helpView){ helpView = new QTextBrowser(); } - helpView->setText(tr("HTML of Help menu here.")); + QString searchPath = getSubsurfaceDataPath("Documentation"); + if (searchPath != "") { + QUrl url(searchPath.append("/user-manual.html")); + helpView->setSource(url); + } else { + helpView->setText(tr("Cannot find the Subsurface manual")); + } helpView->show(); } @@ -500,7 +507,7 @@ void MainWindow::closeEvent(QCloseEvent *event) helpView->close(); helpView->deleteLater(); } - + if (unsaved_changes() && (askSaveChanges() == FALSE)) { event->ignore(); return;