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 <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2013-05-31 06:26:08 +09:00
parent 422e0f94d6
commit c972c7cbd9
4 changed files with 41 additions and 29 deletions

View file

@ -17,5 +17,6 @@ QString get_volume_string(volume_t volume, bool showunit);
QString get_pressure_string(pressure_t pressure, 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(const char *vendor, const char *product);
void set_default_dive_computer_device(const char *name); void set_default_dive_computer_device(const char *name);
QString getSubsurfaceDataPath(QString folderToFind);
#endif /* HELPER_H */ #endif /* HELPER_H */

View file

@ -263,4 +263,30 @@ void set_default_dive_computer_device(const char *name)
s.endGroup(); 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" #include "qt-gui.moc"

View file

@ -1,6 +1,7 @@
#include "globe.h" #include "globe.h"
#include "kmessagewidget.h" #include "kmessagewidget.h"
#include "../dive.h" #include "../dive.h"
#include "../helpers.h"
#include <QDebug> #include <QDebug>
@ -24,39 +25,16 @@ GlobeGPS::GlobeGPS(QWidget* parent) : MarbleWidget(parent), loadedDives(0)
// if not, check if they are in a known location // if not, check if they are in a known location
MapThemeManager mtm; MapThemeManager mtm;
QStringList list = mtm.mapThemeIds(); QStringList list = mtm.mapThemeIds();
QString theme, execdir; QString theme, subsurfaceDataPath;
QDir marble; QDir marble;
bool foundGoogleMap = false; bool foundGoogleMap = false;
Q_FOREACH(theme, list) Q_FOREACH(theme, list)
if (theme == "earth/googlesat/googlesat.dgml") if (theme == "earth/googlesat/googlesat.dgml")
foundGoogleMap = true; foundGoogleMap = true;
if (!foundGoogleMap) { if (!foundGoogleMap) {
// first check if we are running from the build directory subsurfaceDataPath = getSubsurfaceDataPath("marbledata");
execdir = QCoreApplication::applicationDirPath(); if (subsurfaceDataPath != "")
marble = QDir(execdir.append("/marbledata")); MarbleDirs::setMarbleDataPath(subsurfaceDataPath);
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;
}
} }
messageWidget = new KMessageWidget(this); messageWidget = new KMessageWidget(this);
messageWidget->setCloseButtonVisible(false); messageWidget->setCloseButtonVisible(false);

View file

@ -23,6 +23,7 @@
#include "../dive.h" #include "../dive.h"
#include "../divelist.h" #include "../divelist.h"
#include "../pref.h" #include "../pref.h"
#include "../helpers.h"
#include "modeldelegates.h" #include "modeldelegates.h"
#include "models.h" #include "models.h"
#include "downloadfromdivecomputer.h" #include "downloadfromdivecomputer.h"
@ -267,7 +268,13 @@ void MainWindow::on_actionUserManual_triggered()
if(!helpView){ if(!helpView){
helpView = new QTextBrowser(); 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(); helpView->show();
} }
@ -500,7 +507,7 @@ void MainWindow::closeEvent(QCloseEvent *event)
helpView->close(); helpView->close();
helpView->deleteLater(); helpView->deleteLater();
} }
if (unsaved_changes() && (askSaveChanges() == FALSE)) { if (unsaved_changes() && (askSaveChanges() == FALSE)) {
event->ignore(); event->ignore();
return; return;