QGIS API Documentation 3.99.0-Master (26c88405ac0)
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:
40
45
53 QgsFontDownloadDetails( const QString &family, const QStringList &fontUrls, const QString &licenseUrl = QString() );
54
58 static QString standardizeFamily( const QString &family );
59
63 bool isValid() const { return !mFontUrls.empty(); }
64
70 QString family() const { return mFamily; }
71
75 QString standardizedFamily() const { return mStandardizedFamily; }
76
80 QStringList fontUrls() const { return mFontUrls; }
81
85 QString licenseUrl() const { return mLicenseUrl; }
86
87 private:
88
89 QString mFamily;
90 QString mStandardizedFamily;
91 QStringList mFontUrls;
92 QString mLicenseUrl;
93};
94
95#ifndef SIP_RUN
97class CORE_EXPORT QgsFontDownloadTask : public QgsTask
98{
99 Q_OBJECT
100
101 public:
102
103 QgsFontDownloadTask( const QString &description, const QgsFontDownloadDetails &details );
104
105 bool run() override;
106 void cancel() override;
107 QString errorMessage() const { return mErrorMessage; }
108 QString failedUrl() const { return mFailedUrl; }
109 QList< QByteArray > fontData() const { return mFontData; }
110 QByteArray licenseData() const { return mLicenseData; }
111 QStringList contentDispositionFilenames() const { return mContentDispositionFilenames; }
112 private:
113
114 QgsFontDownloadDetails mDetails;
115 std::unique_ptr< QgsFeedback > mFeedback;
116 bool mResult = false;
117 QString mErrorMessage;
118 QString mFailedUrl;
119 QList< QByteArray > mFontData;
120 QStringList mContentDispositionFilenames;
121 QByteArray mLicenseData;
122
123};
125#endif
126
137class CORE_EXPORT QgsFontManager : public QObject
138{
139 Q_OBJECT
140
141 public:
142
143#ifndef SIP_RUN
146
149#endif
150
156 explicit QgsFontManager( QObject *parent SIP_TRANSFERTHIS = nullptr );
157
173 QMap< QString, QString > fontFamilyReplacements() const;
174
192 void addFontFamilyReplacement( const QString &original, const QString &replacement );
193
211 void setFontFamilyReplacements( const QMap< QString, QString> &replacements );
212
219 QString processFontFamilyName( const QString &name ) const;
220
227
249 bool tryToDownloadFontFamily( const QString &family, QString &matchedFamily SIP_OUT );
250
257
270 Q_DECL_DEPRECATED QString urlForFontDownload( const QString &family, QString &matchedFamily SIP_OUT ) const SIP_DEPRECATED;
271
287 QgsFontDownloadDetails detailsForFontDownload( const QString &family, QString &matchedFamily SIP_OUT ) const;
288
303 Q_DECL_DEPRECATED void downloadAndInstallFont( const QUrl &url, const QString &identifier = QString() ) SIP_DEPRECATED;
304
319 void downloadAndInstallFont( const QgsFontDownloadDetails &details, const QString &identifier = QString() );
320
336 bool installFontsFromData( const QByteArray &data, QString &errorMessage SIP_OUT, QStringList &families SIP_OUT, QString &licenseDetails SIP_OUT, const QString &filename = QString(), const QString &extension = QString() );
337
347 void addUserFontDirectory( const QString &directory );
348
354 QMap< QString, QStringList > userFontToFamilyMap() const;
355
359 bool removeUserFont( const QString &path );
360
361 signals:
362
373 void fontDownloaded( const QStringList &families, const QString &licenseDetails );
374
381 void fontDownloadErrorOccurred( const QUrl &url, const QString &identifier, const QString &error );
382
383 private:
384
385 QMap< QString, QString > mFamilyReplacements;
386 QMap< QString, QString > mLowerCaseFamilyReplacements;
387 QMap< QString, QStringList > mUserFontToFamilyMap;
388 QMap< QString, int > mUserFontToIdMap;
389 mutable QReadWriteLock mReplacementLock;
390 QStringList mUserFontDirectories;
391
392 bool mEnableFontDownloads = false;
393 QMap< QString, QString > mPendingFontDownloads;
394 QMap< QString, QgsFontDownloadDetails > mDeferredFontDownloads;
395
396 void storeFamilyReplacements();
397 void installFontsFromDirectory( const QString &dir );
398};
399
400#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 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:114
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_OUT
Definition qgis_sip.h:58