QGIS API Documentation 4.1.0-Master (60fea48833c)
Loading...
Searching...
No Matches
qgsfontmanager.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsfontmanager.h
3 ------------------
4 Date : June 2022
5 Copyright : (C) 2022 Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSFONTMANAGER_H
17#define QGSFONTMANAGER_H
18
19#include "qgis_core.h"
20#include "qgis_sip.h"
22#include "qgstaskmanager.h"
23
24#include <QMap>
25#include <QObject>
26#include <QReadWriteLock>
27#include <QSet>
28
37class CORE_EXPORT QgsFontDownloadDetails
38{
39 public:
44
52 QgsFontDownloadDetails( const QString &family, const QStringList &fontUrls, const QString &licenseUrl = QString() );
53
57 static QString standardizeFamily( const QString &family );
58
62 bool isValid() const { return !mFontUrls.empty(); }
63
69 QString family() const { return mFamily; }
70
74 QString standardizedFamily() const { return mStandardizedFamily; }
75
79 QStringList fontUrls() const { return mFontUrls; }
80
84 QString licenseUrl() const { return mLicenseUrl; }
85
86 private:
87 QString mFamily;
88 QString mStandardizedFamily;
89 QStringList mFontUrls;
90 QString mLicenseUrl;
91};
92
93#ifndef SIP_RUN
95class CORE_EXPORT QgsFontDownloadTask : public QgsTask
96{
97 Q_OBJECT
98
99 public:
100 QgsFontDownloadTask( const QString &description, const QgsFontDownloadDetails &details );
101
102 bool run() override;
103 void cancel() override;
104 QString errorMessage() const { return mErrorMessage; }
105 QString failedUrl() const { return mFailedUrl; }
106 QList< QByteArray > fontData() const { return mFontData; }
107 QByteArray licenseData() const { return mLicenseData; }
108 QStringList contentDispositionFilenames() const { return mContentDispositionFilenames; }
109
110 private:
111 QgsFontDownloadDetails mDetails;
112 std::unique_ptr< QgsFeedback > mFeedback;
113 bool mResult = false;
114 QString mErrorMessage;
115 QString mFailedUrl;
116 QList< QByteArray > mFontData;
117 QStringList mContentDispositionFilenames;
118 QByteArray mLicenseData;
119};
121#endif
122
133class CORE_EXPORT QgsFontManager : public QObject
134{
135 Q_OBJECT
136
137 public:
138#ifndef SIP_RUN
141
144#endif
145
151 explicit QgsFontManager( QObject *parent SIP_TRANSFERTHIS = nullptr );
152
168 QMap< QString, QString > fontFamilyReplacements() const;
169
187 void addFontFamilyReplacement( const QString &original, const QString &replacement );
188
206 void setFontFamilyReplacements( const QMap< QString, QString> &replacements );
207
214 QString processFontFamilyName( const QString &name ) const;
215
222
244 bool tryToDownloadFontFamily( const QString &family, QString &matchedFamily SIP_OUT );
245
252
265 Q_DECL_DEPRECATED QString urlForFontDownload( const QString &family, QString &matchedFamily SIP_OUT ) const SIP_DEPRECATED;
266
282 QgsFontDownloadDetails detailsForFontDownload( const QString &family, QString &matchedFamily SIP_OUT ) const;
283
298 Q_DECL_DEPRECATED void downloadAndInstallFont( const QUrl &url, const QString &identifier = QString() ) SIP_DEPRECATED;
299
314 void downloadAndInstallFont( const QgsFontDownloadDetails &details, const QString &identifier = QString() );
315
332 const QByteArray &data, QString &errorMessage SIP_OUT, QStringList &families SIP_OUT, QString &licenseDetails SIP_OUT, const QString &filename = QString(), const QString &extension = QString()
333 );
334
344 void addUserFontDirectory( const QString &directory );
345
351 QMap< QString, QStringList > userFontToFamilyMap() const;
352
356 bool removeUserFont( const QString &path );
357
358 signals:
359
370 void fontDownloaded( const QStringList &families, const QString &licenseDetails );
371
378 void fontDownloadErrorOccurred( const QUrl &url, const QString &identifier, const QString &error );
379
380 private:
381 QMap< QString, QString > mFamilyReplacements;
382 QMap< QString, QString > mLowerCaseFamilyReplacements;
383 QMap< QString, QStringList > mUserFontToFamilyMap;
384 QMap< QString, int > mUserFontToIdMap;
385 mutable QReadWriteLock mReplacementLock;
386 QStringList mUserFontDirectories;
387
388 bool mEnableFontDownloads = false;
389 QMap< QString, QString > mPendingFontDownloads;
390 QMap< QString, QgsFontDownloadDetails > mDeferredFontDownloads;
391
392 void storeFamilyReplacements();
393 void installFontsFromDirectory( const QString &dir );
394};
395
396#endif // QGSFONTMANAGER_H
Encapsulates details required for downloading a font.
static QString standardizeFamily(const QString &family)
Returns a cleaned, standardized version of a font family name.
QString licenseUrl() const
Returns the optional URL for downloading the font license details.
QStringList fontUrls() const
Returns a list of download URLs for all files associated with the font family.
QgsFontDownloadDetails()
Constructor for an invalid QgsFontDownloadDetails.
QString standardizedFamily() const
Returns the cleaned, standardized font family name.
bool isValid() const
Returns true if the details represent a valid downloadable font.
QString family() const
Returns the font family.
void addFontFamilyReplacement(const QString &original, const QString &replacement)
Adds a new font replacement from the original font family to a replacement font family.
QgsFontDownloadDetails detailsForFontDownload(const QString &family, QString &matchedFamily) const
Returns a the details for downloading the specified font family.
bool removeUserFont(const QString &path)
Removes the user font at the specified path.
QMap< QString, QString > fontFamilyReplacements() const
Returns the map of automatic font family replacements.
void installUserFonts()
Installs user fonts from the profile/fonts directory as application fonts.
void fontDownloaded(const QStringList &families, const QString &licenseDetails)
Emitted when a font has downloaded and been locally loaded.
void addUserFontDirectory(const QString &directory)
Adds a directory to use for user fonts.
void setFontFamilyReplacements(const QMap< QString, QString > &replacements)
Sets the map of automatic font family replacements.
Q_DECL_DEPRECATED void downloadAndInstallFont(const QUrl &url, const QString &identifier=QString())
Downloads a font and installs in the user's profile/fonts directory as an application font,...
void enableFontDownloadsForSession()
Enables font downloads the current QGIS session.
Q_DECL_DEPRECATED QString urlForFontDownload(const QString &family, QString &matchedFamily) const
Returns the URL at which the font family can be downloaded.
static const QgsSettingsEntryStringList * settingsFontFamilyReplacements
Settings entry for font family replacements.
bool installFontsFromData(const QByteArray &data, QString &errorMessage, QStringList &families, QString &licenseDetails, const QString &filename=QString(), const QString &extension=QString())
Installs local user fonts from the specified raw data.
QString processFontFamilyName(const QString &name) const
Processes a font family name, applying any matching fontFamilyReplacements() to the name.
QMap< QString, QStringList > userFontToFamilyMap() const
Returns the mapping of installed user fonts to font families.
QgsFontManager(QObject *parent=nullptr)
Constructor for QgsFontManager, with the specified parent object.
static const QgsSettingsEntryBool * settingsDownloadMissingFonts
Settings entry for font family replacements.
bool tryToDownloadFontFamily(const QString &family, QString &matchedFamily)
Tries to download and install the specified font family.
void fontDownloadErrorOccurred(const QUrl &url, const QString &identifier, const QString &error)
Emitted when an error occurs during font downloading.
A boolean settings entry.
A string list settings entry.
Abstract base class for long running background tasks.
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:52
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_OUT
Definition qgis_sip.h:57