diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 8470d0de10f..a4d632b7e4d 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -215,7 +215,11 @@ void BaseAspect::setupLabel() if (d->m_labelText.isEmpty() && d->m_labelPixmap.isNull()) return; d->m_label = new QLabel(d->m_labelText); - d->m_label->setTextInteractionFlags(Qt::TextSelectableByMouse); + d->m_label->setTextInteractionFlags(d->m_label->textInteractionFlags() + | Qt::TextSelectableByMouse); + connect(d->m_label, &QLabel::linkActivated, this, [this](const QString &link) { + emit labelLinkActivated(link); + }); if (!d->m_labelPixmap.isNull()) d->m_label->setPixmap(d->m_labelPixmap); registerSubWidget(d->m_label); diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 0771dc65bf1..d1a0bdfe553 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -142,6 +142,7 @@ public: signals: void changed(); + void labelLinkActivated(const QString &link); protected: QLabel *label() const; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index dac88ee842b..4e4ba0ccd66 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -492,6 +492,18 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) updateInitialCMakeArguments(); }); + auto handleOptionsLink = [this](const QString &link) { + const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildConfiguration->target()->kit()); + if (tool) + tool->openCMakeHelpUrl("%1/manual/cmake.1.html#options"); + }; + connect(bc->aspect(), + &Utils::BaseAspect::labelLinkActivated, + [=](const QString &link) { handleOptionsLink(link); }); + connect(bc->aspect(), + &Utils::BaseAspect::labelLinkActivated, + [=](const QString &link) { handleOptionsLink(link); }); + updateSelection(); updateConfigurationStateSelection(); } @@ -1717,7 +1729,7 @@ void InitialCMakeArgumentsAspect::toMap(QVariantMap &map) const InitialCMakeArgumentsAspect::InitialCMakeArgumentsAspect() { setSettingsKey("CMake.Initial.Parameters"); - setLabelText(tr("Additional CMake options:")); + setLabelText(tr("Additional CMake options:")); setDisplayStyle(LineEditDisplay); } @@ -1728,7 +1740,7 @@ InitialCMakeArgumentsAspect::InitialCMakeArgumentsAspect() AdditionalCMakeOptionsAspect::AdditionalCMakeOptionsAspect() { setSettingsKey("CMake.Additional.Options"); - setLabelText(tr("Additional CMake options:")); + setLabelText(tr("Additional CMake options:")); setDisplayStyle(LineEditDisplay); } diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp index dcf50d5df10..0a5ea45db30 100644 --- a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp +++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp @@ -942,7 +942,12 @@ private: m_additionalEditor = new QLineEdit; auto additionalLabel = new QLabel(m_dialog); - additionalLabel->setText(tr("Additional CMake options: ")); + additionalLabel->setText(tr("Additional CMake options:")); + connect(additionalLabel, &QLabel::linkActivated, this, [this](const QString &link) { + const CMakeTool *tool = CMakeKitAspect::cmakeTool(kit()); + if (tool) + tool->openCMakeHelpUrl("%1/manual/cmake.1.html#options"); + }); auto additionalChooser = new VariableChooser(m_dialog); additionalChooser->addSupportedWidget(m_additionalEditor); diff --git a/src/plugins/cmakeprojectmanager/cmaketool.cpp b/src/plugins/cmakeprojectmanager/cmaketool.cpp index d407adeb66a..4e27988cbd9 100644 --- a/src/plugins/cmakeprojectmanager/cmaketool.cpp +++ b/src/plugins/cmakeprojectmanager/cmaketool.cpp @@ -27,6 +27,8 @@ #include "cmaketoolmanager.h" +#include + #include #include #include @@ -380,6 +382,28 @@ FilePath CMakeTool::searchQchFile(const FilePath &executable) return {}; } +QString CMakeTool::documentationUrl(bool online) const +{ + if (online) + return QString("https://cmake.org/cmake/help/v%1.%2") + .arg(version().major) + .arg(version().minor); + + return QString("qthelp://org.cmake.%1.%2.%3/doc") + .arg(version().major) + .arg(version().minor) + .arg(version().patch); +} + +void CMakeTool::openCMakeHelpUrl(const QString &linkUrl) const +{ + if (!isValid()) + return; + + const bool online = qchFilePath().isEmpty(); + Core::HelpManager::showHelpUrl(linkUrl.arg(documentationUrl(online))); +} + void CMakeTool::readInformation() const { QTC_ASSERT(m_introspection, return ); diff --git a/src/plugins/cmakeprojectmanager/cmaketool.h b/src/plugins/cmakeprojectmanager/cmaketool.h index c45fb7514db..58f727af8b7 100644 --- a/src/plugins/cmakeprojectmanager/cmaketool.h +++ b/src/plugins/cmakeprojectmanager/cmaketool.h @@ -112,6 +112,9 @@ public: QString detectionSource() const { return m_detectionSource; } void setDetectionSource(const QString &source) { m_detectionSource = source; } + QString documentationUrl(bool online) const; + void openCMakeHelpUrl(const QString &linkUrl) const; + private: void readInformation() const;