diff --git a/src/blackgui/components/abouthtmlcomponent.cpp b/src/blackgui/components/abouthtmlcomponent.cpp index 441fc4267..30cf280e5 100644 --- a/src/blackgui/components/abouthtmlcomponent.cpp +++ b/src/blackgui/components/abouthtmlcomponent.cpp @@ -10,9 +10,14 @@ #include "blackmisc/fileutils.h" #include "blackmisc/directoryutils.h" #include "abouthtmlcomponent.h" +#include "blackmisc/directoryutils.h" +#include "blackmisc/fileutils.h" #include "ui_abouthtmlcomponent.h" + +#include #include #include +#include using namespace BlackMisc; @@ -26,6 +31,8 @@ namespace BlackGui { ui->setupUi(this); const QPointer myself(this); + connect(ui->tbr_About, &QTextBrowser::anchorClicked, this, &CAboutHtmlComponent::onAnchorClicked, Qt::QueuedConnection); + QTimer::singleShot(2500, this, [ = ] { if (!myself) { return; } @@ -38,6 +45,8 @@ namespace BlackGui void CAboutHtmlComponent::loadAbout() { + if (!sGui || sGui->isShuttingDown()) { return; } + // make links absolute static const QString htmlFixed = [ = ] { @@ -45,10 +54,33 @@ namespace BlackGui // 1) Only reading as HTML gives proper formatting // 2) Reading the file resource fails (likely because of the style sheet) const QString html = CFileUtils::readFileToString(CDirectoryUtils::aboutFilePath()); - const QString legalDir = sGui->getGlobalSetup().getLegalDirectoryUrl().getFullUrl(); - return QString(html).replace(QLatin1String("href=\"./"), "href=\"" + legalDir); + return html; + + // no longer replacing the URLs, doing this on anchor clicked + // const QString legalDir = sGui->getGlobalSetup().getLegalDirectoryUrl().getFullUrl(); + // return QString(html).replace(QLatin1String("href=\"./"), "href=\"" + legalDir); }(); + ui->tbr_About->setHtml(htmlFixed); + ui->tbr_About->setOpenLinks(false); + + // base URL + // ui->tbr_About->document()->setMetaInformation(QTextDocument::DocumentUrl, "https://datastore.swift-project.org/legal"); + } + + void CAboutHtmlComponent::onAnchorClicked(const QUrl &url) + { + if (!url.isRelative()) + { + QDesktopServices::openUrl(url); + return; + } + const QString possibleLegalFile = CFileUtils::appendFilePaths(CDirectoryUtils::legalDirectory(), url.fileName()); + QFile f(possibleLegalFile); + if (f.exists()) + { + QDesktopServices::openUrl(QUrl::fromLocalFile(possibleLegalFile)); + }; } } // ns } // ns diff --git a/src/blackgui/components/abouthtmlcomponent.h b/src/blackgui/components/abouthtmlcomponent.h index db2ac4d0f..5ac731606 100644 --- a/src/blackgui/components/abouthtmlcomponent.h +++ b/src/blackgui/components/abouthtmlcomponent.h @@ -12,6 +12,7 @@ #define BLACKGUI_COMPONENTS_ABOUTHTMLCOMPONENT_H #include "blackgui/blackguiexport.h" +#include #include #include @@ -32,12 +33,15 @@ namespace BlackGui explicit CAboutHtmlComponent(QWidget *parent = nullptr); //! Destructor - virtual ~CAboutHtmlComponent(); + virtual ~CAboutHtmlComponent() override; private: //! Load credits and legal info void loadAbout(); + //! Anchor has been clicked + void onAnchorClicked(const QUrl &url); + QScopedPointer ui; }; } // ns