diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index b40663c..d0faf4a 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -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 diff --git a/app/cfont.cpp b/app/cfont.cpp index 5dac09b..ce0e9a7 100644 --- a/app/cfont.cpp +++ b/app/cfont.cpp @@ -1,120 +1,38 @@ #include "cfont.h" -#include +#include +#include +#include +#include +#include -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& 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& 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 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; } diff --git a/app/cfont.h b/app/cfont.h index 6ad8496..0a85680 100644 --- a/app/cfont.h +++ b/app/cfont.h @@ -2,61 +2,16 @@ #define CFONT_H -//#include -#include -#include -#include +#include +#include -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& files); - void clearFiles(); - void addFiles(const QMap& files); - void addFiles(const QString& variant, const QString& file); - QMap 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 m_files; - QString m_category; - QString m_kind; - -signals: + cFont(QUrl url); }; #endif // CFONT_H diff --git a/app/cfontinfo.cpp b/app/cfontinfo.cpp new file mode 100644 index 0000000..de85b85 --- /dev/null +++ b/app/cfontinfo.cpp @@ -0,0 +1,120 @@ +#include "cfontinfo.h" + +#include + + +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& files) { + for (auto [key, value] : files.asKeyValueRange()) { + m_files.insert(key, value); + } +} + +void cFontInfo::clearFiles() { + m_files.clear(); +} + +void cFontInfo::addFiles(const QMap& 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 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; +} diff --git a/app/cfontinfo.h b/app/cfontinfo.h new file mode 100644 index 0000000..98bb9e0 --- /dev/null +++ b/app/cfontinfo.h @@ -0,0 +1,62 @@ +#ifndef CFONTINFO_H +#define CFONTINFO_H + + +//#include +#include +#include +#include + + +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& files); + void clearFiles(); + void addFiles(const QMap& files); + void addFiles(const QString& variant, const QString& file); + QMap 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 m_files; + QString m_category; + QString m_kind; + +signals: +}; + +#endif // CFONTINFO_H diff --git a/app/cmainwindow.cpp b/app/cmainwindow.cpp index a8e3a54..4589237 100644 --- a/app/cmainwindow.cpp +++ b/app/cmainwindow.cpp @@ -3,6 +3,7 @@ #include "ifontprovider.h" +#include "cfont.h" #include #include @@ -14,34 +15,45 @@ cMainWindow::cMainWindow(QWidget *parent) , ui(new Ui::cMainWindow) { ui->setupUi(this); - QList 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(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 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(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() { diff --git a/app/cmainwindow.ui b/app/cmainwindow.ui index b61f263..5a7778a 100644 --- a/app/cmainwindow.ui +++ b/app/cmainwindow.ui @@ -13,7 +13,31 @@ cMainWindow - + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + TextLabel + + + + + diff --git a/app/ifontprovider.h b/app/ifontprovider.h index b30e041..88a3b26 100644 --- a/app/ifontprovider.h +++ b/app/ifontprovider.h @@ -6,7 +6,7 @@ #include #include -#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 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 search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) = 0; }; QT_BEGIN_NAMESPACE diff --git a/plugins/googlefonts/CMakeLists.txt b/plugins/googlefonts/CMakeLists.txt index 7adde2e..98ab620 100644 --- a/plugins/googlefonts/CMakeLists.txt +++ b/plugins/googlefonts/CMakeLists.txt @@ -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) diff --git a/plugins/googlefonts/cgooglefonts.cpp b/plugins/googlefonts/cgooglefonts.cpp index 724bea2..3fd3d51 100644 --- a/plugins/googlefonts/cgooglefonts.cpp +++ b/plugins/googlefonts/cgooglefonts.cpp @@ -56,7 +56,7 @@ QString cGoogleFonts::version() { return tr("0.1"); } -QList cGoogleFonts::search(const QString& family, const QString& subset, const Sort& sort) { +QList 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 cGoogleFonts::search(const QString& family, const QString& subset, QJsonDocument doc = QJsonDocument::fromJson(data); if(doc.isNull()) { qDebug() << "Error: JSON return is empty"; - return QList(); + return QList(); } if(!doc.isObject()) { qDebug() << "Error: invalid JSON"; - return QList(); + return QList(); } QJsonObject root = doc.object(); if(!root.contains("items")) { qDebug() << "Error: no fonts found"; - return QList(); + return QList(); } QJsonValue itemsV = root.value("items"); if(!itemsV.isArray()) { qDebug() << "Error: no fonts found"; - return QList(); + return QList(); } QJsonArray items = itemsV.toArray(); if(!items.count()) - return QList(); + return QList(); - QList fontList; + QList fontList; foreach (const QJsonValue& item, items) { if (item.isObject()) { - cFont font; + cFontInfo font; QJsonObject obj = item.toObject(); if(obj.contains("family")) diff --git a/plugins/googlefonts/cgooglefonts.h b/plugins/googlefonts/cgooglefonts.h index ab25266..1dee5cb 100644 --- a/plugins/googlefonts/cgooglefonts.h +++ b/plugins/googlefonts/cgooglefonts.h @@ -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 search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) override; + QList search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) override; private: - QString m_key; + QString m_key; }; #endif //CGOOGLEFONTS_H