initial commit

main
Herwig Birke 1 year ago
parent 587484164d
commit f44c71f30d

@ -9,8 +9,8 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network)
set(PROJECT_SOURCES
main.cpp
@ -24,6 +24,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
MANUAL_FINALIZATION
${PROJECT_SOURCES}
ifontprovider.h
cfontinfo.cpp cfontinfo.h
cfont.h cfont.cpp
)
@ -45,7 +46,7 @@ else()
endif()
endif()
target_link_libraries(fontManager PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(fontManager PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network)
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an

@ -1,120 +1,38 @@
#include "cfont.h"
#include <QFile>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QEventLoop>
#include <QFontDatabase>
cFont::cFont()
{
}
void cFont::setFamily(const QString& family) {
m_family = family;
}
QString cFont::family() {
return m_family;
}
void cFont::setVariants(const QStringList& variants) {
m_variants = variants;
m_variants.removeDuplicates();
}
void cFont::clearVariants() {
m_variants.clear();
}
void cFont::addVariants(const QStringList& variants) {
m_variants.append(variants);
m_variants.removeDuplicates();
}
void cFont::addVariants(const QString& variant) {
m_variants.append(variant);
m_variants.removeDuplicates();
}
QStringList cFont::variants() {
return m_variants;
}
void cFont::setSubsets(const QStringList& subsets) {
m_subsets = subsets;
m_subsets.removeDuplicates();
}
void cFont::clearSubsets() {
m_subsets.clear();
}
void cFont::addSubsets(const QStringList& subsets) {
m_subsets.append(subsets);
m_subsets.removeDuplicates();
}
void cFont::addSubsets(const QString& subset) {
m_subsets.append(subset);
m_subsets.removeDuplicates();
}
QStringList cFont::subsets() {
return m_subsets;
}
void cFont::setVersion(const QString& version) {
m_version = version;
}
QString cFont::version() {
return m_version;
}
void cFont::setLastModified(const QDate& lastModified) {
m_lastModified = lastModified;
}
QDate cFont::lastModified() {
return m_lastModified;
}
// cFont::cFont() {}
cFont::cFont(QUrl url) {
QNetworkAccessManager networkManager;
QNetworkRequest request(url);
void cFont::setFiles(const QMap<QString, QString>& files) {
for (auto [key, value] : files.asKeyValueRange()) {
m_files.insert(key, value);
}
}
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
void cFont::clearFiles() {
m_files.clear();
}
QNetworkReply* reply = networkManager.get(request);
QEventLoop loop;
void cFont::addFiles(const QMap<QString, QString>& files) {
for (auto [key, value] : files.asKeyValueRange()) {
if (!m_files.contains(key))
m_files.insert(key, value);
}
}
QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
void cFont::addFiles(const QString& variant, const QString& file) {
if (!m_files.contains(variant))
m_files.insert(variant, file);
}
QByteArray data = reply->readAll();
delete reply;
QMap<QString, QString> cFont::files() {
return m_files;
}
int id = QFontDatabase::addApplicationFontFromData(data);
void cFont::setCategory(const QString& category) {
m_category = category;
}
if(id < 0)
return;
QString cFont::category() {
return m_category;
}
QStringList loaded = QFontDatabase::applicationFontFamilies(id);
void cFont::setKind(const QString& kind) {
m_kind = kind;
}
bool ret = this->fromString(loaded[0]);
QString cFont::kind() {
return m_kind;
if(!ret)
return;
}

@ -2,61 +2,16 @@
#define CFONT_H
//#include <QObject>
#include <QString>
#include <QDate>
#include <QMap>
#include <QFont>
#include <QUrl>
class cFont
class cFont : public QFont
{
public:
explicit cFont();
using QFont::QFont;
void setFamily(const QString& family);
QString family();
void setVariants(const QStringList& variants);
void clearVariants();
void addVariants(const QStringList& variants);
void addVariants(const QString& variant);
QStringList variants();
void setSubsets(const QStringList& subsets);
void clearSubsets();
void addSubsets(const QStringList& subsets);
void addSubsets(const QString& subset);
QStringList subsets();
void setVersion(const QString& version);
QString version();
void setLastModified(const QDate& lastModified);
QDate lastModified();
void setFiles(const QMap<QString, QString>& files);
void clearFiles();
void addFiles(const QMap<QString, QString>& files);
void addFiles(const QString& variant, const QString& file);
QMap<QString, QString> files();
void setCategory(const QString& category);
QString category();
void setKind(const QString& kind);
QString kind();
private:
QString m_family;
QStringList m_variants;
QStringList m_subsets;
QString m_version;
QDate m_lastModified;
QMap<QString, QString> m_files;
QString m_category;
QString m_kind;
signals:
cFont(QUrl url);
};
#endif // CFONT_H

@ -0,0 +1,120 @@
#include "cfontinfo.h"
#include <QFile>
cFontInfo::cFontInfo()
{
}
void cFontInfo::setFamily(const QString& family) {
m_family = family;
}
QString cFontInfo::family() {
return m_family;
}
void cFontInfo::setVariants(const QStringList& variants) {
m_variants = variants;
m_variants.removeDuplicates();
}
void cFontInfo::clearVariants() {
m_variants.clear();
}
void cFontInfo::addVariants(const QStringList& variants) {
m_variants.append(variants);
m_variants.removeDuplicates();
}
void cFontInfo::addVariants(const QString& variant) {
m_variants.append(variant);
m_variants.removeDuplicates();
}
QStringList cFontInfo::variants() {
return m_variants;
}
void cFontInfo::setSubsets(const QStringList& subsets) {
m_subsets = subsets;
m_subsets.removeDuplicates();
}
void cFontInfo::clearSubsets() {
m_subsets.clear();
}
void cFontInfo::addSubsets(const QStringList& subsets) {
m_subsets.append(subsets);
m_subsets.removeDuplicates();
}
void cFontInfo::addSubsets(const QString& subset) {
m_subsets.append(subset);
m_subsets.removeDuplicates();
}
QStringList cFontInfo::subsets() {
return m_subsets;
}
void cFontInfo::setVersion(const QString& version) {
m_version = version;
}
QString cFontInfo::version() {
return m_version;
}
void cFontInfo::setLastModified(const QDate& lastModified) {
m_lastModified = lastModified;
}
QDate cFontInfo::lastModified() {
return m_lastModified;
}
void cFontInfo::setFiles(const QMap<QString, QString>& files) {
for (auto [key, value] : files.asKeyValueRange()) {
m_files.insert(key, value);
}
}
void cFontInfo::clearFiles() {
m_files.clear();
}
void cFontInfo::addFiles(const QMap<QString, QString>& files) {
for (auto [key, value] : files.asKeyValueRange()) {
if (!m_files.contains(key))
m_files.insert(key, value);
}
}
void cFontInfo::addFiles(const QString& variant, const QString& file) {
if (!m_files.contains(variant))
m_files.insert(variant, file);
}
QMap<QString, QString> cFontInfo::files() {
return m_files;
}
void cFontInfo::setCategory(const QString& category) {
m_category = category;
}
QString cFontInfo::category() {
return m_category;
}
void cFontInfo::setKind(const QString& kind) {
m_kind = kind;
}
QString cFontInfo::kind() {
return m_kind;
}

@ -0,0 +1,62 @@
#ifndef CFONTINFO_H
#define CFONTINFO_H
//#include <QObject>
#include <QString>
#include <QDate>
#include <QMap>
class cFontInfo
{
public:
explicit cFontInfo();
void setFamily(const QString& family);
QString family();
void setVariants(const QStringList& variants);
void clearVariants();
void addVariants(const QStringList& variants);
void addVariants(const QString& variant);
QStringList variants();
void setSubsets(const QStringList& subsets);
void clearSubsets();
void addSubsets(const QStringList& subsets);
void addSubsets(const QString& subset);
QStringList subsets();
void setVersion(const QString& version);
QString version();
void setLastModified(const QDate& lastModified);
QDate lastModified();
void setFiles(const QMap<QString, QString>& files);
void clearFiles();
void addFiles(const QMap<QString, QString>& files);
void addFiles(const QString& variant, const QString& file);
QMap<QString, QString> files();
void setCategory(const QString& category);
QString category();
void setKind(const QString& kind);
QString kind();
private:
QString m_family;
QStringList m_variants;
QStringList m_subsets;
QString m_version;
QDate m_lastModified;
QMap<QString, QString> m_files;
QString m_category;
QString m_kind;
signals:
};
#endif // CFONTINFO_H

@ -3,6 +3,7 @@
#include "ifontprovider.h"
#include "cfont.h"
#include <QApplication>
#include <QPluginLoader>
@ -14,34 +15,45 @@ cMainWindow::cMainWindow(QWidget *parent)
, ui(new Ui::cMainWindow) {
ui->setupUi(this);
QList<cFont> fonts;
QDir pluginsDir = QDir(QApplication::applicationDirPath());
const auto entryList = pluginsDir.entryList(QDir::Files);
for (const QString &fileName : entryList) {
QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
QObject *plugin = loader.instance();
if (plugin) {
auto *interface = qobject_cast<IFontProvider *>(plugin);
if (!interface)
return;
qDebug() << "API Version: " << interface->pluginAPIVersion();
qDebug() << "Name: " << interface->name();
qDebug() << "Version: " << interface->version();
fonts = interface->search("");
qDebug() << fonts.count();
fonts.clear();
fonts = interface->search("Roboto");
qDebug() << fonts.count();
}
#if 0
else
qDebug() << loader.errorString();
#endif
}
ui->m_label1->setText("blabla");
cFont font2(QUrl("https://fonts.gstatic.com/s/abeezee/v22/esDR31xSG-6AGleN6tKukbcHCpE.ttf"));
ui->m_label2->setFont(font2);
ui->m_label2->setText("blabla");
cFont font3(QUrl("https://fonts.gstatic.com/s/akshar/v9/Yq6I-LyHWTfz9rGoqDaUbHvhkAUsSZECy9CY94XsnPc.ttf"));
ui->m_label3->setFont(font3);
ui->m_label3->setText("blabla");
// QList<cFontInfo> fonts;
// QDir pluginsDir = QDir(QApplication::applicationDirPath());
// const auto entryList = pluginsDir.entryList(QDir::Files);
// for (const QString &fileName : entryList) {
// QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
// QObject *plugin = loader.instance();
// if (plugin) {
// auto *interface = qobject_cast<IFontProvider *>(plugin);
// if (!interface)
// return;
// qDebug() << "API Version: " << interface->pluginAPIVersion();
// qDebug() << "Name: " << interface->name();
// qDebug() << "Version: " << interface->version();
// // fonts = interface->search("");
// // qDebug() << fonts.count();
// // fonts.clear();
// fonts = interface->search("Roboto");
// qDebug() << fonts.count();
// }
// #if 0
// else
// qDebug() << loader.errorString();
// #endif
// }
}
cMainWindow::~cMainWindow() {

@ -13,7 +13,31 @@
<property name="windowTitle">
<string>cMainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="m_label1">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="m_label2">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="m_label3">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>

@ -6,7 +6,7 @@
#include <QString>
#include <QList>
#include "cfont.h"
#include "cfontinfo.h"
class IFontProvider
@ -19,11 +19,11 @@ public:
style
};
virtual ~IFontProvider() = default;
virtual QString pluginAPIVersion() = 0;
virtual QString name() = 0;
virtual QString version() = 0;
virtual QList<cFont> search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) = 0;
virtual ~IFontProvider() = default;
virtual QString pluginAPIVersion() = 0;
virtual QString name() = 0;
virtual QString version() = 0;
virtual QList<cFontInfo> search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) = 0;
};
QT_BEGIN_NAMESPACE

@ -3,7 +3,7 @@
qt_add_plugin(googlefonts
CLASS_NAME GoogleFonts
cgooglefonts.cpp cgooglefonts.h ../../app/cfont.cpp ../../app/cfont.h
cgooglefonts.cpp cgooglefonts.h ../../app/cfontinfo.cpp ../../app/cfontinfo.h
)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Network)

@ -56,7 +56,7 @@ QString cGoogleFonts::version() {
return tr("0.1");
}
QList<cFont> cGoogleFonts::search(const QString& family, const QString& subset, const Sort& sort) {
QList<cFontInfo> cGoogleFonts::search(const QString& family, const QString& subset, const Sort& sort) {
QNetworkAccessManager networkManager;
QString urlString = "https://www.googleapis.com/webfonts/v1/webfonts";
QUrlQuery query;
@ -107,37 +107,37 @@ QList<cFont> cGoogleFonts::search(const QString& family, const QString& subset,
QJsonDocument doc = QJsonDocument::fromJson(data);
if(doc.isNull()) {
qDebug() << "Error: JSON return is empty";
return QList<cFont>();
return QList<cFontInfo>();
}
if(!doc.isObject()) {
qDebug() << "Error: invalid JSON";
return QList<cFont>();
return QList<cFontInfo>();
}
QJsonObject root = doc.object();
if(!root.contains("items")) {
qDebug() << "Error: no fonts found";
return QList<cFont>();
return QList<cFontInfo>();
}
QJsonValue itemsV = root.value("items");
if(!itemsV.isArray()) {
qDebug() << "Error: no fonts found";
return QList<cFont>();
return QList<cFontInfo>();
}
QJsonArray items = itemsV.toArray();
if(!items.count())
return QList<cFont>();
return QList<cFontInfo>();
QList<cFont> fontList;
QList<cFontInfo> fontList;
foreach (const QJsonValue& item, items) {
if (item.isObject()) {
cFont font;
cFontInfo font;
QJsonObject obj = item.toObject();
if(obj.contains("family"))

@ -17,13 +17,13 @@ public:
cGoogleFonts();
~cGoogleFonts() override;
QString pluginAPIVersion() override;
QString name() override;
QString version() override;
QString pluginAPIVersion() override;
QString name() override;
QString version() override;
QList<cFont> search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) override;
QList<cFontInfo> search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) override;
private:
QString m_key;
QString m_key;
};
#endif //CGOOGLEFONTS_H

Loading…
Cancel
Save