ExtensionSystem: Add field "DocumentationUrl" to PluginSpec

Task-number: QTCREATORBUG-31199
Change-Id: Ieb20d35cc9b4fe976207491bd201750fa4ca0032
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Alessandro Portale
2024-07-25 13:00:56 +02:00
parent 3859b2d8f2
commit b24492c6e9
8 changed files with 38 additions and 1 deletions

View File

@@ -132,6 +132,11 @@
\li String \li String
\li Link to further information about the plugin, like \li Link to further information about the plugin, like
\c{http://www.mycompany-online.com/products/greatplugin}. \c{http://www.mycompany-online.com/products/greatplugin}.
\row
\li DocumentationUrl
\li String
\li Link to online documentation for the plugin, like
\c{https://www.mycompany-online.com/docs/greatplugin/manual.html}.
\endtable \endtable
\section2 Dependencies \section2 Dependencies
@@ -309,6 +314,7 @@
"It demonstrates the great use of the plugin meta data." "It demonstrates the great use of the plugin meta data."
], ],
"Url" : "http://www.mycompany-online.com/products/greatplugin", "Url" : "http://www.mycompany-online.com/products/greatplugin",
"DocumentationUrl" : "https://www.mycompany-online.com/docs/greatplugin/manual.html",
"Arguments" : [ "Arguments" : [
{ {
"Name" : "-variant", "Name" : "-variant",

View File

@@ -7,5 +7,6 @@
\"License\" : \"%{License}\", \"License\" : \"%{License}\",
\"Description\" : \"%{Description}\", \"Description\" : \"%{Description}\",
\"Url\" : \"%{Url}\", \"Url\" : \"%{Url}\",
\"DocumentationUrl\" : \"\",
${IDE_PLUGIN_DEPENDENCIES} ${IDE_PLUGIN_DEPENDENCIES}
} }

View File

@@ -49,6 +49,7 @@ public:
, vendor(createContentsLabel()) , vendor(createContentsLabel())
, component(createContentsLabel()) , component(createContentsLabel())
, url(createContentsLabel()) , url(createContentsLabel())
, documentationUrl(createContentsLabel())
, location(createContentsLabel()) , location(createContentsLabel())
, platforms(createContentsLabel()) , platforms(createContentsLabel())
, description(createTextEdit()) , description(createTextEdit())
@@ -67,6 +68,7 @@ public:
Tr::tr("Vendor:"), vendor, br, Tr::tr("Vendor:"), vendor, br,
Tr::tr("Group:"), component, br, Tr::tr("Group:"), component, br,
Tr::tr("URL:"), url, br, Tr::tr("URL:"), url, br,
Tr::tr("Documentation:"), documentationUrl, br,
Tr::tr("Location:"), location, br, Tr::tr("Location:"), location, br,
Tr::tr("Platforms:"), platforms, br, Tr::tr("Platforms:"), platforms, br,
Tr::tr("Description:"), description, br, Tr::tr("Description:"), description, br,
@@ -87,6 +89,7 @@ public:
QLabel *vendor = nullptr; QLabel *vendor = nullptr;
QLabel *component = nullptr; QLabel *component = nullptr;
QLabel *url = nullptr; QLabel *url = nullptr;
QLabel *documentationUrl = nullptr;
QLabel *location = nullptr; QLabel *location = nullptr;
QLabel *platforms = nullptr; QLabel *platforms = nullptr;
QTextEdit *description = nullptr; QTextEdit *description = nullptr;
@@ -145,7 +148,11 @@ void PluginDetailsView::update(PluginSpec *spec)
d->compatVersion->setText(spec->compatVersion()); d->compatVersion->setText(spec->compatVersion());
d->vendor->setText(spec->vendor()); d->vendor->setText(spec->vendor());
d->component->setText(spec->category().isEmpty() ? Tr::tr("None") : spec->category()); d->component->setText(spec->category().isEmpty() ? Tr::tr("None") : spec->category());
d->url->setText(QString::fromLatin1("<a href=\"%1\">%1</a>").arg(spec->url())); const auto toHtmlLink = [](const QString &url) {
return QString::fromLatin1("<a href=\"%1\">%1</a>").arg(url);
};
d->url->setText(toHtmlLink(spec->url()));
d->documentationUrl->setText(toHtmlLink(spec->documentationUrl()));
d->location->setText(spec->filePath().toUserOutput()); d->location->setText(spec->filePath().toUserOutput());
const QString pattern = spec->platformSpecification().pattern(); const QString pattern = spec->platformSpecification().pattern();
const QString platform = pattern.isEmpty() ? Tr::tr("All") : pattern; const QString platform = pattern.isEmpty() ? Tr::tr("All") : pattern;

View File

@@ -193,6 +193,7 @@ public:
QString description; QString description;
QString longDescription; QString longDescription;
QString url; QString url;
QString documentationUrl;
QString license; QString license;
QString revision; QString revision;
QString copyright; QString copyright;
@@ -324,6 +325,15 @@ QString PluginSpec::url() const
return d->url; return d->url;
} }
/*!
Returns the documentation URL where you can find the online manual about the plugin.
This is valid after the PluginSpec::Read state is reached.
*/
QString PluginSpec::documentationUrl() const
{
return d->documentationUrl;
}
/*! /*!
Returns the category that the plugin belongs to. Categories are used to Returns the category that the plugin belongs to. Categories are used to
group plugins together in the UI. group plugins together in the UI.
@@ -676,6 +686,7 @@ namespace {
const char DESCRIPTION[] = "Description"; const char DESCRIPTION[] = "Description";
const char LONGDESCRIPTION[] = "LongDescription"; const char LONGDESCRIPTION[] = "LongDescription";
const char URL[] = "Url"; const char URL[] = "Url";
const char DOCUMENTATIONURL[] = "DocumentationUrl";
const char CATEGORY[] = "Category"; const char CATEGORY[] = "Category";
const char PLATFORM[] = "Platform"; const char PLATFORM[] = "Platform";
const char DEPENDENCIES[] = "Dependencies"; const char DEPENDENCIES[] = "Dependencies";
@@ -877,6 +888,11 @@ Utils::expected_str<void> PluginSpecPrivate::readMetaData(const QJsonObject &dat
return reportError(msgValueIsNotAString(URL)); return reportError(msgValueIsNotAString(URL));
url = value.toString(); url = value.toString();
value = metaData.value(QLatin1String(DOCUMENTATIONURL));
if (!value.isUndefined() && !value.isString())
return reportError(msgValueIsNotAString(DOCUMENTATIONURL));
documentationUrl = value.toString();
value = metaData.value(QLatin1String(CATEGORY)); value = metaData.value(QLatin1String(CATEGORY));
if (!value.isUndefined() && !value.isString()) if (!value.isUndefined() && !value.isString())
return reportError(msgValueIsNotAString(CATEGORY)); return reportError(msgValueIsNotAString(CATEGORY));

View File

@@ -104,6 +104,7 @@ public:
virtual QString description() const; virtual QString description() const;
virtual QString longDescription() const; virtual QString longDescription() const;
virtual QString url() const; virtual QString url() const;
virtual QString documentationUrl() const;
virtual QString category() const; virtual QString category() const;
virtual QString revision() const; virtual QString revision() const;
virtual QRegularExpression platformSpecification() const; virtual QRegularExpression platformSpecification() const;

View File

@@ -3,6 +3,8 @@
#include "extensionsmodel.h" #include "extensionsmodel.h"
#include "extensionmanagertr.h"
#include "utils/algorithm.h" #include "utils/algorithm.h"
#include <coreplugin/coreconstants.h> #include <coreplugin/coreconstants.h>
@@ -224,6 +226,8 @@ static Extension extensionFromPluginSpec(const PluginSpec *pluginSpec)
LinksData links; LinksData links;
if (const QString url = pluginSpec->url(); !url.isEmpty()) if (const QString url = pluginSpec->url(); !url.isEmpty())
links.append({{}, url}); links.append({{}, url});
if (const QString docUrl = pluginSpec->documentationUrl(); !docUrl.isEmpty())
links.append({{Tr::tr("Documentation")}, docUrl});
const Description description = { const Description description = {
.images = {}, .images = {},
.links = links, .links = links,

View File

@@ -18,6 +18,7 @@ Qtc = {}
---@field Description? string A short one line description of the plugin. ---@field Description? string A short one line description of the plugin.
---@field LongDescription? string A long description of the plugin. Can contain newlines. ---@field LongDescription? string A long description of the plugin. Can contain newlines.
---@field Url? string The url of the plugin. ---@field Url? string The url of the plugin.
---@field DocumentationUrl? string The url of the online documentation for the plugin.
---@field License? string The license text of the plugin. ---@field License? string The license text of the plugin.
---@field Revision? string The revision of the plugin. ---@field Revision? string The revision of the plugin.
---@field Copyright? string The copyright of the plugin. ---@field Copyright? string The copyright of the plugin.

View File

@@ -8,6 +8,7 @@ return {
Category = "My Plugins", Category = "My Plugins",
Description = "%{Description}", Description = "%{Description}",
Url = "%{Url}", Url = "%{Url}",
DocumentationUrl = "",
Experimental = true, Experimental = true,
DisabledByDefault = false, DisabledByDefault = false,
LongDescription = [[ LongDescription = [[