From 0789deca75df74d744ad7856f8a338a063e18651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Sat, 1 Jul 2023 21:34:42 +0200 Subject: [PATCH 01/13] typo --- libosmscout-client-qt/include/osmscoutclientqt/Settings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index 877eba620..7e33738b2 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -46,7 +46,7 @@ namespace osmscout { * Settings provides central point mutable configuration of OSMScout library. * It uses Qt's QSettings for persistency. It may be accessed from DBThread instance. * - * List of online tile providers should be initialized at applicaiton start. + * List of online tile providers should be initialized at application start. * ``` * Settings::GetInstance()->loadOnlineTileProviders( * ":/resources/online-tile-providers.json"); From ffff16839b0f14ec49b2e48ba263a66a566f8d46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Tue, 4 Jul 2023 19:38:20 +0200 Subject: [PATCH 02/13] remove Qt signals and QSettings dependency from Settings --- .../include/osmscoutclientqt/DBThread.h | 8 + .../osmscoutclientqt/InstalledVoicesModel.h | 5 + .../include/osmscoutclientqt/MapRenderer.h | 45 +++ .../include/osmscoutclientqt/MapWidget.h | 7 + .../osmscoutclientqt/NavigationModule.h | 5 + .../include/osmscoutclientqt/Settings.h | 183 +++++++---- .../osmscoutclientqt/TiledMapRenderer.h | 19 +- .../osmscoutclientqt/AvailableMapsModel.cpp | 2 +- .../osmscoutclientqt/AvailableVoicesModel.cpp | 2 +- .../src/osmscoutclientqt/DBThread.cpp | 7 +- .../osmscoutclientqt/InstalledVoicesModel.cpp | 10 +- .../src/osmscoutclientqt/MapRenderer.cpp | 24 +- .../src/osmscoutclientqt/MapStyleModel.cpp | 6 +- .../src/osmscoutclientqt/MapWidget.cpp | 3 +- .../src/osmscoutclientqt/NavigationModule.cpp | 5 +- .../src/osmscoutclientqt/OSMScoutQt.cpp | 8 +- .../src/osmscoutclientqt/Settings.cpp | 286 +++++++++++------- .../src/osmscoutclientqt/TiledMapRenderer.cpp | 14 +- .../src/osmscoutclientqt/VoiceManager.cpp | 4 +- 19 files changed, 440 insertions(+), 203 deletions(-) diff --git a/libosmscout-client-qt/include/osmscoutclientqt/DBThread.h b/libosmscout-client-qt/include/osmscoutclientqt/DBThread.h index 11c24a1bc..3da6030b0 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/DBThread.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/DBThread.h @@ -116,6 +116,8 @@ class OSMSCOUT_CLIENT_QT_API DBThread : public QObject void databaseLoadFinished(osmscout::GeoBox boundingBox); void styleErrorsChanged(); + void mapDpiSignal(double); + public slots: void ToggleDaylight(); void onMapDPIChange(double dpi); @@ -162,6 +164,12 @@ public slots: std::vector customPoiTypes; + Slot mapDpiSlot{ + [this](const double &d) { + mapDpiSignal(d); + } + }; + protected: /** diff --git a/libosmscout-client-qt/include/osmscoutclientqt/InstalledVoicesModel.h b/libosmscout-client-qt/include/osmscoutclientqt/InstalledVoicesModel.h index aeb05f77c..1368a54a3 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/InstalledVoicesModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/InstalledVoicesModel.h @@ -44,6 +44,11 @@ namespace osmscout { class OSMSCOUT_CLIENT_QT_API InstalledVoicesModel : public QAbstractListModel { Q_OBJECT +private: + Slot voiceDirSlot{ + [this](const std::string &dir){ onVoiceChanged(QString::fromStdString(dir)); } + }; + signals: void voiceChanged(const QString); diff --git a/libosmscout-client-qt/include/osmscoutclientqt/MapRenderer.h b/libosmscout-client-qt/include/osmscoutclientqt/MapRenderer.h index ed0693b97..cd7fbfe46 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/MapRenderer.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/MapRenderer.h @@ -110,6 +110,51 @@ class OSMSCOUT_CLIENT_QT_API MapRenderer : public QObject { void Redraw(); void TriggerDrawMap(); + void mapDpiChangeSignal(double); + void renderSeaSignal(bool); + void fontNameSignal(QString); + void fontSizeSignal(double); + void showAltLanguageSignal(bool); + void unitsSignal(QString); + +private: + // slots + Slot mapDpiChangeSlot{ + [this](const double &d){ + mapDpiChangeSignal(d); + } + }; + + Slot renderSeaSlot{ + [this](const bool &b){ + renderSeaSignal(b); + } + }; + + Slot fontNameSlot{ + [this](const std::string &str){ + fontNameSignal(QString::fromStdString(str)); + } + }; + + Slot fontSizeSlot{ + [this](const double &d){ + fontSizeSignal(d); + } + }; + + Slot showAltLanguageSlot{ + [this](const bool &b){ + showAltLanguageSignal(b); + } + }; + + Slot unitsSlot{ + [this](const std::string &str){ + unitsSignal(QString::fromStdString(str)); + } + }; + public slots: virtual void Initialize() = 0; diff --git a/libosmscout-client-qt/include/osmscoutclientqt/MapWidget.h b/libosmscout-client-qt/include/osmscoutclientqt/MapWidget.h index 40d204eb4..817840be0 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/MapWidget.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/MapWidget.h @@ -275,6 +275,13 @@ public slots: void onIconFound(QPoint lookupCoord, MapIcon icon); +private: + Slot mapDpiSlot{ + [this](const double &d) { + this->onMapDPIChange(d); + } + }; + private slots: virtual void onTap(const QPoint p); diff --git a/libosmscout-client-qt/include/osmscoutclientqt/NavigationModule.h b/libosmscout-client-qt/include/osmscoutclientqt/NavigationModule.h index a33102788..54f594c20 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/NavigationModule.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/NavigationModule.h @@ -65,6 +65,11 @@ namespace osmscout { class OSMSCOUT_CLIENT_QT_API NavigationModule: public QObject { Q_OBJECT +private: + Slot voiceDirSlot{ + [this](const std::string &str) { onVoiceChanged(QString::fromStdString(str)); } + }; + signals: void update(std::list instructions); diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index 7e33738b2..193a273da 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -25,12 +25,13 @@ #include #include +#include #include + #include #include #include #include - #include // this variable should be defined by build system @@ -40,6 +41,51 @@ namespace osmscout { +struct OSMSCOUT_CLIENT_QT_API SettingsStorage +{ +public: + virtual void SetValue(const std::string &key, double d) = 0; + virtual void SetValue(const std::string &key, uint32_t i) = 0; + virtual void SetValue(const std::string &key, const std::string &str) = 0; + virtual void SetValue(const std::string &key, bool b) = 0; + virtual void SetValue(const std::string &key, std::vector bytes) = 0; + virtual double GetDouble(const std::string &key, double defaultValue = 0) = 0; + virtual uint32_t GetUInt(const std::string &key, uint32_t defaultValue = 0) = 0; + virtual std::string GetString(const std::string &key, const std::string &defaultValue = "") = 0; + virtual bool GetBool(const std::string &key, bool defaultValue = 0) = 0; + virtual std::vector GetBytes(const std::string &key) = 0; + + /** Get all configuration keys with given prefix. + * @param prefix + * @return keys (containing prefix) + */ + virtual std::vector Keys(const std::string &prefix) = 0; +}; + +using SettingsStoragePtr = std::shared_ptr; + +class OSMSCOUT_CLIENT_QT_API QtSettingsStorage: public QObject, public SettingsStorage +{ +private: + QSettings *storage; +public: + explicit QtSettingsStorage(QSettings *providedStorage=nullptr); + virtual ~QtSettingsStorage() = default; + + void SetValue(const std::string &key, double d) override; + void SetValue(const std::string &key, uint32_t i) override; + void SetValue(const std::string &key, const std::string &str) override; + void SetValue(const std::string &key, bool b) override; + void SetValue(const std::string &key, std::vector bytes) override; + double GetDouble(const std::string &key, double defaultValue = 0) override; + uint32_t GetUInt(const std::string &key, uint32_t defaultValue = 0) override; + std::string GetString(const std::string &key, const std::string &defaultValue = "") override; + bool GetBool(const std::string &key, bool defaultValue = 0) override; + std::vector GetBytes(const std::string &key) override; + + std::vector Keys(const std::string &prefix) override; +}; + /** * \ingroup QtAPI * @@ -48,48 +94,16 @@ namespace osmscout { * * List of online tile providers should be initialized at application start. * ``` - * Settings::GetInstance()->loadOnlineTileProviders( + * OSMScoutQt::GetInstance().GetSettings()->loadOnlineTileProviders( * ":/resources/online-tile-providers.json"); * ``` * * Before program exit, resources should be released by calling Settings::FreeInstance. */ -class OSMSCOUT_CLIENT_QT_API Settings: public QObject +class OSMSCOUT_CLIENT_QT_API Settings { - Q_OBJECT - Q_PROPERTY(double mapDPI READ GetMapDPI WRITE SetMapDPI NOTIFY MapDPIChange) - Q_PROPERTY(bool onlineTiles READ GetOnlineTilesEnabled WRITE SetOnlineTilesEnabled NOTIFY OnlineTilesEnabledChanged) - Q_PROPERTY(QString onlineTileProviderId READ GetOnlineTileProviderId WRITE SetOnlineTileProviderId NOTIFY OnlineTileProviderIdChanged) - Q_PROPERTY(bool offlineMap READ GetOfflineMap WRITE SetOfflineMap NOTIFY OfflineMapChanged) - Q_PROPERTY(bool renderSea READ GetRenderSea WRITE SetRenderSea NOTIFY RenderSeaChanged) - Q_PROPERTY(QString styleSheetDirectory READ GetStyleSheetDirectory WRITE SetStyleSheetDirectory NOTIFY StyleSheetDirectoryChanged) - Q_PROPERTY(QString styleSheetFile READ GetStyleSheetFile WRITE SetStyleSheetFile NOTIFY StyleSheetFileChanged) - Q_PROPERTY(QString fontName READ GetFontName WRITE SetFontName NOTIFY FontNameChanged) - Q_PROPERTY(double fontSize READ GetFontSize WRITE SetFontSize NOTIFY FontSizeChanged) - Q_PROPERTY(bool showAltLanguage READ GetShowAltLanguage WRITE SetShowAltLanguage NOTIFY ShowAltLanguageChanged) - /// metrics or imperial - Q_PROPERTY(QString units READ GetUnits WRITE SetUnits NOTIFY UnitsChanged) - Q_PROPERTY(QString voiceLookupDirectory READ GetVoiceLookupDirectory WRITE SetVoiceLookupDirectory NOTIFY VoiceLookupDirectoryChanged) - Q_PROPERTY(QString voiceDir READ GetVoiceDir WRITE SetVoiceDir NOTIFY VoiceDirChanged) - -signals: - void MapDPIChange(double dpi); - void OnlineTilesEnabledChanged(bool); - void OnlineTileProviderIdChanged(const QString id); - void OnlineTileProviderChanged(const OnlineTileProvider &provider); - void OfflineMapChanged(bool); - void RenderSeaChanged(bool); - void StyleSheetDirectoryChanged(const QString dir); - void StyleSheetFileChanged(const QString file); - void VoiceLookupDirectoryChanged(const QString dir); - void VoiceDirChanged(const QString voice); - void FontNameChanged(const QString fontName); - void FontSizeChanged(double fontSize); - void ShowAltLanguageChanged(bool showAltLanguage); - void UnitsChanged(const QString units); - private: - QSettings *storage; + SettingsStoragePtr storage; double physicalDpi; QMap onlineProviderMap; QList onlineProviders; @@ -97,8 +111,24 @@ class OSMSCOUT_CLIENT_QT_API Settings: public QObject QList voiceProviders; public: - explicit Settings(QSettings *providedStorage=nullptr); - ~Settings() override = default; + Signal mapDPIChange; + Signal onlineTilesEnabledChanged; + Signal onlineTileProviderIdChanged; + Signal onlineTileProviderChanged; + Signal offlineMapChanged; + Signal renderSeaChanged; + Signal styleSheetDirectoryChanged; + Signal styleSheetFileChanged; + Signal voiceLookupDirectoryChanged; + Signal voiceDirChanged; + Signal fontNameChanged; + Signal fontSizeChanged; + Signal showAltLanguageChanged; + Signal unitsChanged; + +public: + explicit Settings(SettingsStoragePtr storage); + virtual ~Settings() = default; double GetPhysicalDPI() const; @@ -117,8 +147,8 @@ class OSMSCOUT_CLIENT_QT_API Settings: public QObject const QList GetMapProviders() const; const QList GetVoiceProviders() const; - const QString GetOnlineTileProviderId() const; - void SetOnlineTileProviderId(QString id); + const std::string GetOnlineTileProviderId() const; + void SetOnlineTileProviderId(const std::string &id); bool loadOnlineTileProviders(const QStringList &paths); bool loadMapProviders(const QStringList &paths); @@ -130,26 +160,26 @@ class OSMSCOUT_CLIENT_QT_API Settings: public QObject bool GetRenderSea() const; void SetRenderSea(bool); - const QString GetStyleSheetDirectory() const; - void SetStyleSheetDirectory(const QString dir); + const std::string GetStyleSheetDirectory() const; + void SetStyleSheetDirectory(const std::string &dir); - const QString GetVoiceLookupDirectory() const; - void SetVoiceLookupDirectory(const QString &voiceLookupDirectory); + const std::string GetVoiceLookupDirectory() const; + void SetVoiceLookupDirectory(const std::string &voiceLookupDirectory); - const QString GetVoiceDir() const; - void SetVoiceDir(const QString &voice); + const std::string GetVoiceDir() const; + void SetVoiceDir(const std::string &voice); - const QString GetStyleSheetFile() const; - const QString GetStyleSheetAbsoluteFile() const; - void SetStyleSheetFile(const QString file); + const std::string GetStyleSheetFile() const; + const std::string GetStyleSheetAbsoluteFile() const; + void SetStyleSheetFile(const std::string &file); - const std::unordered_map GetStyleSheetFlags(const QString styleSheetFile); + const std::unordered_map GetStyleSheetFlags(const std::string &styleSheetFile); const std::unordered_map GetStyleSheetFlags(); - void SetStyleSheetFlags(const QString styleSheetFile, std::unordered_map flags); + void SetStyleSheetFlags(const std::string &styleSheetFile, std::unordered_map flags); void SetStyleSheetFlags(std::unordered_map flags); - QString GetFontName() const; - void SetFontName(const QString fontName); + std::string GetFontName() const; + void SetFontName(const std::string &fontName); double GetFontSize() const; void SetFontSize(double fontSize); @@ -157,13 +187,13 @@ class OSMSCOUT_CLIENT_QT_API Settings: public QObject bool GetShowAltLanguage() const; void SetShowAltLanguage(bool showAltLanguage); - const QString GetHttpCacheDir() const; + const std::string GetHttpCacheDir() const; const QByteArray GetCookieData() const; void SetCookieData(QByteArray data); - QString GetUnits() const; - void SetUnits(const QString units); + std::string GetUnits() const; + void SetUnits(const std::string &units); }; /** @@ -208,6 +238,47 @@ class OSMSCOUT_CLIENT_QT_API QmlSettings: public QObject{ private: SettingsRef settings; + // slots + Slot mapDPISlot{ + [this](const double &d){ this->MapDPIChange(d); } + }; + + Slot onlineTilesEnabledSlot{ + [this](const bool &b){this->OnlineTilesEnabledChanged(b);} + }; + + Slot onlineTileProviderIdSlot{ + [this](const std::string &str){ this->OnlineTileProviderIdChanged(QString::fromStdString(str));} + }; + + Slot offlineMapSlot{ + [this](const bool &b){ this->OfflineMapChanged(b);} + }; + + Slot styleSheetFileSlot{ + [this](const std::string &str){ this->StyleSheetFileChanged(QString::fromStdString(str));} + }; + + Slot renderSeaSlot{ + [this](const bool &b){ this->RenderSeaChanged(b);} + }; + + Slot fontNameSlot{ + [this](const std::string &str){ this->FontNameChanged(QString::fromStdString(str));} + }; + + Slot fontSizeSlot{ + [this](const double &d){ this->FontSizeChanged(d);} + }; + + Slot showAltLanguageSlot{ + [this](const bool &b){ this->ShowAltLanguageChanged(b);} + }; + + Slot unitsSlot{ + [this](const std::string &str){ this->UnitsChanged(QString::fromStdString(str));} + }; + signals: void MapDPIChange(double dpi); void OnlineTilesEnabledChanged(bool enabled); diff --git a/libosmscout-client-qt/include/osmscoutclientqt/TiledMapRenderer.h b/libosmscout-client-qt/include/osmscoutclientqt/TiledMapRenderer.h index 297c275bb..0f0920c2f 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/TiledMapRenderer.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/TiledMapRenderer.h @@ -75,6 +75,23 @@ class OSMSCOUT_CLIENT_QT_API TiledMapRenderer : public MapRenderer { QColor unknownColor; + Slot onlineTileProviderSlot{ + [this](const OnlineTileProvider &provider) { onlineTileProviderSignal(provider); } + }; + + Slot onlineTileEnabledSlot{ + [this](const bool &b) { onlineTilesEnabledSignal(b); } + }; + + Slot offlineMapChangedSlot{ + [this](const bool &b) { offlineMapChangedSignal(b); } + }; + +signals: + void onlineTileProviderSignal(OnlineTileProvider provider); + void onlineTilesEnabledSignal(bool); + void offlineMapChangedSignal(bool); + public slots: virtual void Initialize(); virtual void InvalidateVisualCache(); @@ -87,7 +104,7 @@ public slots: void onDatabaseLoaded(osmscout::GeoBox boundingBox); void onLoadJobFinished(QMap>); - void onlineTileProviderChanged(); + void onlineTileProviderChanged(const OnlineTileProvider &); void onlineTilesEnabledChanged(bool); void onOfflineMapChanged(bool); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp index dd0b11c16..db959490c 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp @@ -65,7 +65,7 @@ AvailableMapsModel::AvailableMapsModel() SettingsRef settings = OSMScoutQt::GetInstance().GetSettings(); mapProviders = settings->GetMapProviders(); - diskCache.setCacheDirectory(settings->GetHttpCacheDir()); + diskCache.setCacheDirectory(QString::fromStdString(settings->GetHttpCacheDir())); webCtrl.setCache(&diskCache); webCtrl.setCookieJar(new PersistentCookieJar(settings)); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp index 7d9a68304..e29da60ea 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp @@ -31,7 +31,7 @@ AvailableVoicesModel::AvailableVoicesModel() assert(settings); voiceProviders = settings->GetVoiceProviders(); - diskCache.setCacheDirectory(settings->GetHttpCacheDir()); + diskCache.setCacheDirectory(QString::fromStdString(settings->GetHttpCacheDir())); webCtrl.setCache(&diskCache); webCtrl.setCookieJar(new PersistentCookieJar(settings)); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/DBThread.cpp b/libosmscout-client-qt/src/osmscoutclientqt/DBThread.cpp index 8a5ae72dc..48d0195ba 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/DBThread.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/DBThread.cpp @@ -59,7 +59,7 @@ DBThread::DBThread(QThread *backgroundThread, mapDpi = settings->GetMapDPI(); osmscout::log.Debug() << "Map DPI override: " << mapDpi; - stylesheetFilename=settings->GetStyleSheetAbsoluteFile(); + stylesheetFilename=QString::fromStdString(settings->GetStyleSheetAbsoluteFile()); stylesheetFlags=settings->GetStyleSheetFlags(); osmscout::log.Debug() << "Using stylesheet: " << stylesheetFilename.toStdString(); @@ -67,7 +67,8 @@ DBThread::DBThread(QThread *backgroundThread, registerCustomPoiTypes(emptyTypeConfig); emptyStyleConfig=makeStyleConfig(emptyTypeConfig); - connect(settings.get(), &Settings::MapDPIChange, + settings->mapDPIChange.Connect(mapDpiSlot); + connect(this, &DBThread::mapDpiSignal, this, &DBThread::onMapDPIChange, Qt::QueuedConnection); @@ -81,6 +82,8 @@ DBThread::~DBThread() QWriteLocker locker(&lock); osmscout::log.Debug() << "DBThread::~DBThread()"; + mapDpiSlot.Disconnect(); + if (basemapDatabase) { basemapDatabase->Close(); basemapDatabase=nullptr; diff --git a/libosmscout-client-qt/src/osmscoutclientqt/InstalledVoicesModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/InstalledVoicesModel.cpp index 46bbe15b7..56976f876 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/InstalledVoicesModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/InstalledVoicesModel.cpp @@ -31,14 +31,12 @@ InstalledVoicesModel::InstalledVoicesModel() assert(voiceManager); assert(settings); + settings->voiceDirChanged.Connect(voiceDirSlot); + connect(voiceManager.get(), &VoiceManager::reloaded, this, &InstalledVoicesModel::update); - connect(settings.get(), &Settings::VoiceDirChanged, - this, &InstalledVoicesModel::onVoiceChanged); - connect(settings.get(), &Settings::VoiceDirChanged, - this, &InstalledVoicesModel::voiceChanged); - voiceDir = settings->GetVoiceDir(); + voiceDir = QString::fromStdString(settings->GetVoiceDir()); update(); } @@ -124,7 +122,7 @@ void InstalledVoicesModel::select(const QModelIndex &index) // when voice is invalid, directory may be still valid (default-constructed QDir pointing to $PWD) settings->SetVoiceDir(""); } else { - settings->SetVoiceDir(voice.getDir().absolutePath()); + settings->SetVoiceDir(voice.getDir().absolutePath().toStdString()); } } diff --git a/libosmscout-client-qt/src/osmscoutclientqt/MapRenderer.cpp b/libosmscout-client-qt/src/osmscoutclientqt/MapRenderer.cpp index a742e56e4..029792ea4 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/MapRenderer.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/MapRenderer.cpp @@ -35,29 +35,37 @@ MapRenderer::MapRenderer(QThread *thread, osmscout::log.Debug() << "Map DPI override: " << mapDpi; renderSea=settings->GetRenderSea(); - fontName=settings->GetFontName(); + fontName=QString::fromStdString(settings->GetFontName()); fontSize=settings->GetFontSize(); showAltLanguage=settings->GetShowAltLanguage(); - units=settings->GetUnits(); + units=QString::fromStdString(settings->GetUnits()); - connect(settings.get(), &Settings::MapDPIChange, + settings->mapDPIChange.Connect(mapDpiChangeSlot); + settings->renderSeaChanged.Connect(renderSeaSlot); + settings->fontNameChanged.Connect(fontNameSlot); + settings->fontSizeChanged.Connect(fontSizeSlot); + settings->showAltLanguageChanged.Connect(showAltLanguageSlot); + settings->unitsChanged.Connect(unitsSlot); + + connect(this, &MapRenderer::mapDpiChangeSignal, this, &MapRenderer::onMapDPIChange, Qt::QueuedConnection); - connect(settings.get(), &Settings::RenderSeaChanged, + connect(this, &MapRenderer::renderSeaSignal, this, &MapRenderer::onRenderSeaChanged, Qt::QueuedConnection); - connect(settings.get(), &Settings::FontNameChanged, + connect(this, &MapRenderer::fontNameSignal, this, &MapRenderer::onFontNameChanged, Qt::QueuedConnection); - connect(settings.get(), &Settings::FontSizeChanged, + connect(this, &MapRenderer::fontSizeSignal, this, &MapRenderer::onFontSizeChanged, Qt::QueuedConnection); - connect(settings.get(), &Settings::ShowAltLanguageChanged, + connect(this, &MapRenderer::showAltLanguageSignal, this, &MapRenderer::onShowAltLanguageChanged, Qt::QueuedConnection); - connect(settings.get(), &Settings::UnitsChanged, + connect(this, &MapRenderer::unitsSignal, this, &MapRenderer::onUnitsChanged, Qt::QueuedConnection); + connect(thread, &QThread::started, this, &MapRenderer::Initialize); connect(dbThread.get(), &DBThread::stylesheetFilenameChanged, diff --git a/libosmscout-client-qt/src/osmscoutclientqt/MapStyleModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/MapStyleModel.cpp index 2f3103992..1afb92a80 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/MapStyleModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/MapStyleModel.cpp @@ -41,7 +41,7 @@ MapStyleModel::MapStyleModel(): SettingsRef settings=OSMScoutQt::GetInstance().GetSettings(); - QDirIterator dirIt(settings->GetStyleSheetDirectory(), QDir::Files, QDirIterator::FollowSymlinks); + QDirIterator dirIt(QString::fromStdString(settings->GetStyleSheetDirectory()), QDir::Files, QDirIterator::FollowSymlinks); while (dirIt.hasNext()) { dirIt.next(); QFileInfo fInfo(dirIt.filePath()); @@ -69,9 +69,9 @@ void MapStyleModel::setStyle(const QString &styleFile) { SettingsRef settings=OSMScoutQt::GetInstance().GetSettings(); - settings->SetStyleSheetFile(styleFile); + settings->SetStyleSheetFile(styleFile.toStdString()); - emit loadStyleRequested(settings->GetStyleSheetAbsoluteFile(), + emit loadStyleRequested(QString::fromStdString(settings->GetStyleSheetAbsoluteFile()), settings->GetStyleSheetFlags()); } diff --git a/libosmscout-client-qt/src/osmscoutclientqt/MapWidget.cpp b/libosmscout-client-qt/src/osmscoutclientqt/MapWidget.cpp index 919f3655e..aee275053 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/MapWidget.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/MapWidget.cpp @@ -47,8 +47,7 @@ MapWidget::MapWidget(QQuickItem* parent) DBThreadRef dbThread = OSMScoutQt::GetInstance().GetDBThread(); - connect(settings.get(), &Settings::MapDPIChange, - this, &MapWidget::onMapDPIChange); + settings->mapDPIChange.Connect(mapDpiSlot); tapRecognizer.setPhysicalDpi(dbThread->GetPhysicalDpi()); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/NavigationModule.cpp b/libosmscout-client-qt/src/osmscoutclientqt/NavigationModule.cpp index 34d0c58bb..e9cbe991e 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/NavigationModule.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/NavigationModule.cpp @@ -34,9 +34,8 @@ NavigationModule::NavigationModule(QThread *thread, timer.moveToThread(thread); // constructor is called from different thread! connect(&timer, &QTimer::timeout, this, &NavigationModule::onTimeout); - connect(settings.get(), &Settings::VoiceLookupDirectoryChanged, this, &NavigationModule::onVoiceChanged); - connect(settings.get(), &Settings::VoiceDirChanged, this, &NavigationModule::onVoiceChanged); - onVoiceChanged(settings->GetVoiceDir()); + settings->voiceDirChanged.Connect(voiceDirSlot); + onVoiceChanged(QString::fromStdString(settings->GetVoiceDir())); } NavigationModule::~NavigationModule() diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp index d957730fb..a9f1bd8eb 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp @@ -82,7 +82,7 @@ bool OSMScoutQtBuilder::Init() return false; } - SettingsRef settings=std::make_shared(settingsStorage); + SettingsRef settings=std::make_shared(std::make_shared(settingsStorage)); // load online tile providers if (!onlineTileProviders.isEmpty()){ @@ -97,14 +97,14 @@ bool OSMScoutQtBuilder::Init() // setup style sheet if (styleSheetFileConfigured){ - settings->SetStyleSheetFile(styleSheetFile); + settings->SetStyleSheetFile(styleSheetFile.toStdString()); } if (styleSheetDirectoryConfigured){ - settings->SetStyleSheetDirectory(styleSheetDirectory); + settings->SetStyleSheetDirectory(styleSheetDirectory.toStdString()); } // setup voice - settings->SetVoiceLookupDirectory(voiceLookupDirectory); + settings->SetVoiceLookupDirectory(voiceLookupDirectory.toStdString()); MapManagerRef mapManager=std::make_shared(mapLookupDirectories, settings); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index 8f05c1456..fa1b2eb90 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -32,12 +32,89 @@ namespace osmscout { -Settings::Settings(QSettings *providedStorage): +QtSettingsStorage::QtSettingsStorage(QSettings *providedStorage): storage(providedStorage) { - if (storage==nullptr){ - storage=new QSettings(this); - } + if (storage==nullptr){ + storage=new QSettings(this); + } +} + +void QtSettingsStorage::SetValue(const std::string &key, double d) +{ + storage->setValue(QString::fromStdString(key), d); +} + +void QtSettingsStorage::SetValue(const std::string &key, uint32_t i) +{ + storage->setValue(QString::fromStdString(key), i); +} + +void QtSettingsStorage::SetValue(const std::string &key, const std::string &str) +{ + storage->setValue(QString::fromStdString(key), QString::fromStdString(str)); +} + +void QtSettingsStorage::SetValue(const std::string &key, bool b) +{ + storage->setValue(QString::fromStdString(key), b); +} + +void QtSettingsStorage::SetValue(const std::string &key, std::vector bytes) +{ + storage->setValue(QString::fromStdString(key), QByteArray(bytes.data(), bytes.size())); +} + +double QtSettingsStorage::GetDouble(const std::string &key, double defaultValue) +{ + bool ok; + double d = storage->value(QString::fromStdString(key), defaultValue).toDouble(&ok); + if (!ok) { + return defaultValue; + } + return d; +} + +uint32_t QtSettingsStorage::GetUInt(const std::string &key, uint32_t defaultValue) +{ + bool ok; + uint32_t i = storage->value(QString::fromStdString(key), defaultValue).toUInt(&ok); + if (!ok) { + return defaultValue; + } + return i; +} + +std::string QtSettingsStorage::GetString(const std::string &key, const std::string &defaultValue) +{ + return storage->value(QString::fromStdString(key), QString::fromStdString(defaultValue)).toString().toStdString(); +} + +bool QtSettingsStorage::GetBool(const std::string &key, bool defaultValue) +{ + return storage->value(QString::fromStdString(key), defaultValue).toBool(); +} + +std::vector QtSettingsStorage::GetBytes(const std::string &key) +{ + QByteArray arr = storage->value(QString::fromStdString(key)).toByteArray(); + return std::vector(arr.data(), arr.data() + arr.size()); +} + +std::vector QtSettingsStorage::Keys(const std::string &prefix) +{ + std::vector result; + storage->beginGroup(QString::fromStdString(prefix)); + for (const QString& key:storage->allKeys()){ + result.push_back(prefix + key.toStdString()); + } + storage->endGroup(); + return result; +} + +Settings::Settings(SettingsStoragePtr storage): + storage(storage) +{ /* Warning: Sailfish OS before version 2.0.1 reports incorrect DPI (100) * * Some DPI values: @@ -58,35 +135,35 @@ double Settings::GetPhysicalDPI() const void Settings::SetMapDPI(double dpi) { - storage->setValue("OSMScoutLib/Rendering/DPI", (unsigned int)dpi); - emit MapDPIChange(dpi); + storage->SetValue("OSMScoutLib/Rendering/DPI", dpi); + mapDPIChange.Emit(dpi); } double Settings::GetMapDPI() const { - return (size_t)storage->value("OSMScoutLib/Rendering/DPI",physicalDpi).toDouble(); + return storage->GetDouble("OSMScoutLib/Rendering/DPI",physicalDpi); } osmscout::Vehicle Settings::GetRoutingVehicle() const { - return (osmscout::Vehicle)storage->value("OSMScoutLib/Routing/Vehicle",osmscout::vehicleCar).toUInt(); + return osmscout::Vehicle(storage->GetUInt("OSMScoutLib/Routing/Vehicle",osmscout::vehicleCar)); } void Settings::SetRoutingVehicle(const osmscout::Vehicle& vehicle) { - storage->setValue("OSMScoutLib/Routing/Vehicle", (unsigned int)vehicle); + storage->SetValue("OSMScoutLib/Routing/Vehicle", (uint32_t)vehicle); } bool Settings::GetOnlineTilesEnabled() const { - return storage->value("OSMScoutLib/Rendering/OnlineTiles", true).toBool(); + return storage->GetBool("OSMScoutLib/Rendering/OnlineTiles", true); } void Settings::SetOnlineTilesEnabled(bool b) { if (GetOnlineTilesEnabled() != b){ - storage->setValue("OSMScoutLib/Rendering/OnlineTiles", b); - emit OnlineTilesEnabledChanged(b); + storage->SetValue("OSMScoutLib/Rendering/OnlineTiles", b); + onlineTilesEnabledChanged.Emit(b); } } @@ -107,26 +184,26 @@ const QList Settings::GetVoiceProviders() const const OnlineTileProvider Settings::GetOnlineTileProvider() const { - if (onlineProviderMap.contains(GetOnlineTileProviderId())){ - return onlineProviderMap[GetOnlineTileProviderId()]; + if (onlineProviderMap.contains(QString::fromStdString(GetOnlineTileProviderId()))){ + return onlineProviderMap[QString::fromStdString(GetOnlineTileProviderId())]; } return OnlineTileProvider(); } -const QString Settings::GetOnlineTileProviderId() const +const std::string Settings::GetOnlineTileProviderId() const { QString def = "?"; if (!onlineProviders.isEmpty()){ def = onlineProviders.begin()->getId(); } - return storage->value("OSMScoutLib/Rendering/OnlineTileProvider", def).toString(); + return storage->GetString("OSMScoutLib/Rendering/OnlineTileProvider", def.toStdString()); } -void Settings::SetOnlineTileProviderId(QString id){ +void Settings::SetOnlineTileProviderId(const std::string &id){ if (GetOnlineTileProviderId() != id){ - storage->setValue("OSMScoutLib/Rendering/OnlineTileProvider", id); - emit OnlineTileProviderIdChanged(id); - emit OnlineTileProviderChanged(GetOnlineTileProvider()); + storage->SetValue("OSMScoutLib/Rendering/OnlineTileProvider", id); + onlineTileProviderIdChanged.Emit(id); + onlineTileProviderChanged.Emit(GetOnlineTileProvider()); } } @@ -158,14 +235,14 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) } // check if current provider is valid... - if (!onlineProviderMap.contains(GetOnlineTileProviderId())){ + if (!onlineProviderMap.contains(QString::fromStdString(GetOnlineTileProviderId()))){ // ...if not, setup first if (!onlineProviders.isEmpty()){ - SetOnlineTileProviderId(onlineProviders.begin()->getId()); + SetOnlineTileProviderId(onlineProviders.begin()->getId().toStdString()); } } - emit OnlineTileProviderIdChanged(GetOnlineTileProviderId()); + onlineTileProviderIdChanged.Emit(GetOnlineTileProviderId()); return result && !onlineProviders.empty(); } @@ -214,160 +291,161 @@ bool Settings::loadVoiceProviders(const QStringList &paths) bool Settings::GetOfflineMap() const { - return storage->value("OSMScoutLib/Rendering/OfflineMap", true).toBool(); + return storage->GetBool("OSMScoutLib/Rendering/OfflineMap", true); } void Settings::SetOfflineMap(bool b) { if (GetOfflineMap() != b){ - storage->setValue("OSMScoutLib/Rendering/OfflineMap", b); - emit OfflineMapChanged(b); + storage->SetValue("OSMScoutLib/Rendering/OfflineMap", b); + offlineMapChanged.Emit(b); } } bool Settings::GetRenderSea() const { - return storage->value("OSMScoutLib/Rendering/RenderSea", true).toBool(); + return storage->GetBool("OSMScoutLib/Rendering/RenderSea", true); } void Settings::SetRenderSea(bool b) { if (GetRenderSea() != b){ - storage->setValue("OSMScoutLib/Rendering/RenderSea", b); - emit RenderSeaChanged(b); + storage->SetValue("OSMScoutLib/Rendering/RenderSea", b); + renderSeaChanged.Emit(b); } } -const QString Settings::GetStyleSheetDirectory() const +const std::string Settings::GetStyleSheetDirectory() const { - return storage->value("OSMScoutLib/Rendering/StylesheetDirectory", "stylesheets").toString(); + return storage->GetString("OSMScoutLib/Rendering/StylesheetDirectory", "stylesheets"); } -void Settings::SetStyleSheetDirectory(const QString dir) +void Settings::SetStyleSheetDirectory(const std::string &dir) { if (GetStyleSheetDirectory() != dir){ - storage->setValue("OSMScoutLib/Rendering/StylesheetDirectory", dir); - emit StyleSheetDirectoryChanged(dir); + storage->SetValue("OSMScoutLib/Rendering/StylesheetDirectory", dir); + styleSheetDirectoryChanged.Emit(dir); } } -const QString Settings::GetVoiceLookupDirectory() const +const std::string Settings::GetVoiceLookupDirectory() const { - return storage->value("OSMScoutLib/Voice/LooukupDirectory", ".voices").toString(); + return storage->GetString("OSMScoutLib/Voice/LooukupDirectory", ".voices"); } -void Settings::SetVoiceLookupDirectory(const QString &dir) +void Settings::SetVoiceLookupDirectory(const std::string &dir) { if (GetVoiceLookupDirectory() != dir){ - storage->setValue("OSMScoutLib/Voice/LooukupDirectory", dir); - emit VoiceLookupDirectoryChanged(dir); + storage->SetValue("OSMScoutLib/Voice/LooukupDirectory", dir); + voiceLookupDirectoryChanged.Emit(dir); } } -const QString Settings::GetVoiceDir() const +const std::string Settings::GetVoiceDir() const { - return storage->value("OSMScoutLib/Voice/VoiceDir", "disabled").toString(); + return storage->GetString("OSMScoutLib/Voice/VoiceDir", "disabled"); } -void Settings::SetVoiceDir(const QString &voice) +void Settings::SetVoiceDir(const std::string &voice) { if (GetVoiceDir() != voice){ - storage->setValue("OSMScoutLib/Voice/VoiceDir", voice); - emit VoiceDirChanged(voice); + storage->SetValue("OSMScoutLib/Voice/VoiceDir", voice); + voiceDirChanged.Emit(voice); } } -const QString Settings::GetStyleSheetFile() const +const std::string Settings::GetStyleSheetFile() const { - return storage->value("OSMScoutLib/Rendering/StylesheetFile", "standard.oss").toString(); + return storage->GetString("OSMScoutLib/Rendering/StylesheetFile", "standard.oss"); } -const QString Settings::GetStyleSheetAbsoluteFile() const +const std::string Settings::GetStyleSheetAbsoluteFile() const { - return QFileInfo(GetStyleSheetDirectory(), GetStyleSheetFile()).absoluteFilePath(); + return QFileInfo(QString::fromStdString(GetStyleSheetDirectory()), QString::fromStdString(GetStyleSheetFile())) + .absoluteFilePath().toStdString(); } -void Settings::SetStyleSheetFile(const QString file) +void Settings::SetStyleSheetFile(const std::string &file) { if (GetStyleSheetFile() != file){ - storage->setValue("OSMScoutLib/Rendering/StylesheetFile", file); - emit StyleSheetFileChanged(file); + storage->SetValue("OSMScoutLib/Rendering/StylesheetFile", file); + styleSheetFileChanged.Emit(file); } } -const std::unordered_map Settings::GetStyleSheetFlags(const QString styleSheetFile) +const std::unordered_map Settings::GetStyleSheetFlags(const std::string &styleSheetFile) { - std::unordered_map stylesheetFlags; // TODO: read from config - storage->beginGroup("OSMScoutLib/Rendering/StylesheetFlags/"+styleSheetFile); - for (const QString& key:storage->allKeys()){ - stylesheetFlags[key.toStdString()]=storage->value(key, false).toBool(); + std::unordered_map stylesheetFlags; + std::string prefix = "OSMScoutLib/Rendering/StylesheetFlags/" + styleSheetFile + "/"; + auto keys = storage->Keys(prefix); + for (const std::string& key:keys){ + stylesheetFlags[key.substr(prefix.length())]=storage->GetBool(key, false); } - storage->endGroup(); return stylesheetFlags; } const std::unordered_map Settings::GetStyleSheetFlags() { return GetStyleSheetFlags(GetStyleSheetFile()); } -void Settings::SetStyleSheetFlags(const QString styleSheetFile, std::unordered_map flags) +void Settings::SetStyleSheetFlags(const std::string &styleSheetFile, std::unordered_map flags) { - storage->beginGroup("OSMScoutLib/Rendering/StylesheetFlags/"+styleSheetFile); + std::string prefix = "OSMScoutLib/Rendering/StylesheetFlags/" + styleSheetFile + "/"; for (const auto &entry:flags){ - storage->setValue(QString::fromStdString(entry.first), entry.second); + storage->SetValue(prefix + entry.first, entry.second); } - storage->endGroup(); } void Settings::SetStyleSheetFlags(std::unordered_map flags) { SetStyleSheetFlags(GetStyleSheetFile(), flags); } -QString Settings::GetFontName() const +std::string Settings::GetFontName() const { - return storage->value("OSMScoutLib/Rendering/FontName", "sans-serif").toString(); + return storage->GetString("OSMScoutLib/Rendering/FontName", "sans-serif"); } -void Settings::SetFontName(const QString fontName) +void Settings::SetFontName(const std::string &fontName) { if (GetFontName()!=fontName){ - storage->setValue("OSMScoutLib/Rendering/FontName", fontName); - emit FontNameChanged(fontName); + storage->SetValue("OSMScoutLib/Rendering/FontName", fontName); + fontNameChanged.Emit(fontName); } } double Settings::GetFontSize() const { - return storage->value("OSMScoutLib/Rendering/FontSize", 2.0).toDouble(); + return storage->GetDouble("OSMScoutLib/Rendering/FontSize", 2.0); } void Settings::SetFontSize(double fontSize) { if (GetFontSize()!=fontSize){ - storage->setValue("OSMScoutLib/Rendering/FontSize", fontSize); - emit FontSizeChanged(fontSize); + storage->SetValue("OSMScoutLib/Rendering/FontSize", fontSize); + fontSizeChanged.Emit(fontSize); } } bool Settings::GetShowAltLanguage() const { - return storage->value("OSMScoutLib/Rendering/ShowAltLanguage", false).toBool(); + return storage->GetBool("OSMScoutLib/Rendering/ShowAltLanguage", false); } void Settings::SetShowAltLanguage(bool showAltLanguage) { if (GetShowAltLanguage()!=showAltLanguage){ - storage->setValue("OSMScoutLib/Rendering/ShowAltLanguage", showAltLanguage); - emit ShowAltLanguageChanged(showAltLanguage); + storage->SetValue("OSMScoutLib/Rendering/ShowAltLanguage", showAltLanguage); + showAltLanguageChanged.Emit(showAltLanguage); } } -const QString Settings::GetHttpCacheDir() const +const std::string Settings::GetHttpCacheDir() const { QString cacheLocation = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); - return cacheLocation + QDir::separator() + "OSMScoutHttpCache"; + return (cacheLocation + QDir::separator() + "OSMScoutHttpCache").toStdString(); } const QByteArray Settings::GetCookieData() const { - return storage->value("OSMScoutLib/General/Cookies").toByteArray(); + auto bv = storage->GetBytes("OSMScoutLib/General/Cookies"); + return QByteArray(bv.data(), bv.size()); } void Settings::SetCookieData(const QByteArray data) { - storage->setValue("OSMScoutLib/General/Cookies", data); + storage->SetValue("OSMScoutLib/General/Cookies", std::vector(data.data(), data.data() + data.size())); } -QString Settings::GetUnits() const +std::string Settings::GetUnits() const { QLocale locale; QString defaultUnits; @@ -380,14 +458,14 @@ QString Settings::GetUnits() const default: defaultUnits="metrics"; } - return storage->value("OSMScoutLib/General/Units", defaultUnits).toString(); + return storage->GetString("OSMScoutLib/General/Units", defaultUnits.toStdString()); } -void Settings::SetUnits(const QString units) +void Settings::SetUnits(const std::string &units) { if (GetUnits()!=units){ - storage->setValue("OSMScoutLib/General/Units", units); - emit UnitsChanged(units); + storage->SetValue("OSMScoutLib/General/Units", units); + unitsChanged.Emit(units); } } @@ -395,26 +473,16 @@ QmlSettings::QmlSettings() { settings=OSMScoutQt::GetInstance().GetSettings(); - connect(settings.get(), &Settings::MapDPIChange, - this, &QmlSettings::MapDPIChange); - connect(settings.get(), &Settings::OnlineTilesEnabledChanged, - this, &QmlSettings::OnlineTilesEnabledChanged); - connect(settings.get(), &Settings::OnlineTileProviderIdChanged, - this, &QmlSettings::OnlineTileProviderIdChanged); - connect(settings.get(), &Settings::OfflineMapChanged, - this, &QmlSettings::OfflineMapChanged); - connect(settings.get(), &Settings::StyleSheetFileChanged, - this, &QmlSettings::StyleSheetFileChanged); - connect(settings.get(), &Settings::RenderSeaChanged, - this, &QmlSettings::RenderSeaChanged); - connect(settings.get(), &Settings::FontNameChanged, - this, &QmlSettings::FontNameChanged); - connect(settings.get(), &Settings::FontSizeChanged, - this, &QmlSettings::FontSizeChanged); - connect(settings.get(), &Settings::ShowAltLanguageChanged, - this, &QmlSettings::ShowAltLanguageChanged); - connect(settings.get(), &Settings::UnitsChanged, - this, &QmlSettings::UnitsChanged); + settings->mapDPIChange.Connect(mapDPISlot); + settings->onlineTilesEnabledChanged.Connect(onlineTilesEnabledSlot); + settings->onlineTileProviderIdChanged.Connect(onlineTileProviderIdSlot); + settings->offlineMapChanged.Connect(offlineMapSlot); + settings->styleSheetFileChanged.Connect(styleSheetFileSlot); + settings->renderSeaChanged.Connect(renderSeaSlot); + settings->fontNameChanged.Connect(fontNameSlot); + settings->fontSizeChanged.Connect(fontSizeSlot); + settings->showAltLanguageChanged.Connect(showAltLanguageSlot); + settings->unitsChanged.Connect(unitsSlot); } double QmlSettings::GetPhysicalDPI() const @@ -444,12 +512,12 @@ void QmlSettings::SetOnlineTilesEnabled(bool b) const QString QmlSettings::GetOnlineTileProviderId() const { - return settings->GetOnlineTileProviderId(); + return QString::fromStdString(settings->GetOnlineTileProviderId()); } void QmlSettings::SetOnlineTileProviderId(QString id) { - settings->SetOnlineTileProviderId(id); + settings->SetOnlineTileProviderId(id.toStdString()); } QString QmlSettings::onlineProviderCopyright() @@ -472,11 +540,11 @@ void QmlSettings::SetOfflineMap(bool b) QString QmlSettings::GetStyleSheetFile() const { - return settings->GetStyleSheetFile(); + return QString::fromStdString(settings->GetStyleSheetFile()); } void QmlSettings::SetStyleSheetFile(const QString file) { - settings->SetStyleSheetFile(file); + settings->SetStyleSheetFile(file.toStdString()); } bool QmlSettings::GetRenderSea() const @@ -489,11 +557,11 @@ void QmlSettings::SetRenderSea(bool b) } QString QmlSettings::GetFontName() const { - return settings->GetFontName(); + return QString::fromStdString(settings->GetFontName()); } void QmlSettings::SetFontName(const QString fontName) { - settings->SetFontName(fontName); + settings->SetFontName(fontName.toStdString()); } double QmlSettings::GetFontSize() const { @@ -513,10 +581,10 @@ void QmlSettings::SetShowAltLanguage(bool showAltLanguage) } QString QmlSettings::GetUnits() const { - return settings->GetUnits(); + return QString::fromStdString(settings->GetUnits()); } void QmlSettings::SetUnits(const QString units) { - settings->SetUnits(units); + settings->SetUnits(units.toStdString()); } } diff --git a/libosmscout-client-qt/src/osmscoutclientqt/TiledMapRenderer.cpp b/libosmscout-client-qt/src/osmscoutclientqt/TiledMapRenderer.cpp index aa90ab2e7..4d022ca97 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/TiledMapRenderer.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/TiledMapRenderer.cpp @@ -53,13 +53,17 @@ TiledMapRenderer::TiledMapRenderer(QThread *thread, onlineTilesEnabled = settings->GetOnlineTilesEnabled(); offlineTilesEnabled = settings->GetOfflineMap(); - connect(settings.get(), &Settings::OnlineTileProviderIdChanged, + settings->onlineTileProviderChanged.Connect(onlineTileProviderSlot); + settings->onlineTilesEnabledChanged.Connect(onlineTileEnabledSlot); + settings->offlineMapChanged.Connect(offlineMapChangedSlot); + + connect(this, &TiledMapRenderer::onlineTileProviderSignal, this, &TiledMapRenderer::onlineTileProviderChanged, Qt::QueuedConnection); - connect(settings.get(), &Settings::OnlineTilesEnabledChanged, + connect(this, &TiledMapRenderer::onlineTilesEnabledSignal, this, &TiledMapRenderer::onlineTilesEnabledChanged, Qt::QueuedConnection); - connect(settings.get(), &Settings::OfflineMapChanged, + connect(this, &TiledMapRenderer::offlineMapChangedSignal, this, &TiledMapRenderer::onOfflineMapChanged, Qt::QueuedConnection); @@ -96,7 +100,7 @@ void TiledMapRenderer::Initialize() // create tile downloader in correct thread tileDownloader = new OsmTileDownloader(tileCacheDirectory,settings->GetOnlineTileProvider()); - connect(settings.get(), &Settings::OnlineTileProviderChanged, + connect(this, &TiledMapRenderer::onlineTileProviderSignal, tileDownloader, &OsmTileDownloader::onlineTileProviderChanged, Qt::QueuedConnection); @@ -357,7 +361,7 @@ void TiledMapRenderer::tileDownloadFailed(uint32_t zoomLevel, uint32_t x, uint32 } } -void TiledMapRenderer::onlineTileProviderChanged() +void TiledMapRenderer::onlineTileProviderChanged(const OnlineTileProvider&) { { QMutexLocker locker(&tileCacheMutex); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp b/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp index 72132487c..adb3e2940 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp @@ -94,7 +94,7 @@ VoiceManager::VoiceManager() void VoiceManager::reload() { SettingsRef settings = OSMScoutQt::GetInstance().GetSettings(); - lookupDir = settings->GetVoiceLookupDirectory(); + lookupDir = QString::fromStdString(settings->GetVoiceLookupDirectory()); osmscout::log.Info() << "Lookup voices at " << lookupDir.toStdString(); installedVoices.clear(); QSet uniqPaths; @@ -117,7 +117,7 @@ void VoiceManager::reload() emit reloaded(); // check if configured voice still exists - QString voiceDir = settings->GetVoiceDir(); + QString voiceDir = QString::fromStdString(settings->GetVoiceDir()); if (!voiceDir.isEmpty()){ bool found=false; for (const auto &v:installedVoices){ From a5d6657abab8fb9b60f6c514329934ef44bab5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Tue, 4 Jul 2023 22:55:38 +0200 Subject: [PATCH 03/13] clarify ownership of custom settings storage --- libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h | 4 ++++ libosmscout-client-qt/include/osmscoutclientqt/Settings.h | 4 ++++ libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp | 1 + libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp | 2 ++ 4 files changed, 11 insertions(+) diff --git a/libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h b/libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h index ddd180cb2..d28902baa 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h @@ -78,6 +78,10 @@ class OSMSCOUT_CLIENT_QT_API OSMScoutQtBuilder{ virtual ~OSMScoutQtBuilder(); + /** Set custom settings storage. OSMScout library takes ownership. + * @param providedStorage + * @return + */ inline OSMScoutQtBuilder& WithSettingsStorage(QSettings *providedStorage) { this->settingsStorage=providedStorage; diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index 193a273da..045db6310 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -69,6 +69,10 @@ class OSMSCOUT_CLIENT_QT_API QtSettingsStorage: public QObject, public SettingsS private: QSettings *storage; public: + /** + * @param providedStorage custom provider when not null. Storage takes ownership. + * When it is null, default Qt settings is used. + */ explicit QtSettingsStorage(QSettings *providedStorage=nullptr); virtual ~QtSettingsStorage() = default; diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp index a9f1bd8eb..5e315520d 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp @@ -83,6 +83,7 @@ bool OSMScoutQtBuilder::Init() } SettingsRef settings=std::make_shared(std::make_shared(settingsStorage)); + settingsStorage = nullptr; // load online tile providers if (!onlineTileProviders.isEmpty()){ diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index fa1b2eb90..0e96045f3 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -37,6 +37,8 @@ QtSettingsStorage::QtSettingsStorage(QSettings *providedStorage): { if (storage==nullptr){ storage=new QSettings(this); + } else { + providedStorage->setParent(this); } } From 20df5e64ecbb17c2a1acc14814e81971c8a7e23b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Wed, 5 Jul 2023 10:49:26 +0200 Subject: [PATCH 04/13] replace QList by std::vector --- .../osmscoutclientqt/OnlineTileProviderModel.h | 5 ++++- .../include/osmscoutclientqt/Settings.h | 12 ++++++------ .../src/osmscoutclientqt/AvailableMapsModel.cpp | 5 ++++- .../osmscoutclientqt/AvailableVoicesModel.cpp | 5 ++++- .../src/osmscoutclientqt/Settings.cpp | 16 ++++++++-------- 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProviderModel.h b/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProviderModel.h index 28bf9bfa9..d3e5e3944 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProviderModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProviderModel.h @@ -85,7 +85,10 @@ class OSMSCOUT_CLIENT_QT_API OnlineTileProviderModel : public QAbstractListModel inline OnlineTileProviderModel() { auto settings=OSMScoutQt::GetInstance().GetSettings(); - onlineProviders=settings->GetOnlineProviders(); + auto providers=settings->GetOnlineProviders(); + for (const auto &provider: providers) { + onlineProviders << provider; + } }; virtual inline ~OnlineTileProviderModel(){}; diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index 045db6310..2b836ae90 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -110,9 +110,9 @@ class OSMSCOUT_CLIENT_QT_API Settings SettingsStoragePtr storage; double physicalDpi; QMap onlineProviderMap; - QList onlineProviders; - QList mapProviders; - QList voiceProviders; + std::vector onlineProviders; + std::vector mapProviders; + std::vector voiceProviders; public: Signal mapDPIChange; @@ -145,11 +145,11 @@ class OSMSCOUT_CLIENT_QT_API Settings bool GetOnlineTilesEnabled() const; void SetOnlineTilesEnabled(bool b); - const QList GetOnlineProviders() const; + const std::vector GetOnlineProviders() const; const OnlineTileProvider GetOnlineTileProvider() const; - const QList GetMapProviders() const; - const QList GetVoiceProviders() const; + const std::vector GetMapProviders() const; + const std::vector GetVoiceProviders() const; const std::string GetOnlineTileProviderId() const; void SetOnlineTileProviderId(const std::string &id); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp index db959490c..7800cb33f 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp @@ -63,7 +63,10 @@ int AvailableMapsModelMap::getVersion() const AvailableMapsModel::AvailableMapsModel() { SettingsRef settings = OSMScoutQt::GetInstance().GetSettings(); - mapProviders = settings->GetMapProviders(); + auto providers = settings->GetMapProviders(); + for (const auto &provider: providers) { + mapProviders << provider; + } diskCache.setCacheDirectory(QString::fromStdString(settings->GetHttpCacheDir())); webCtrl.setCache(&diskCache); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp index e29da60ea..5f56e9d3e 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp @@ -29,7 +29,10 @@ AvailableVoicesModel::AvailableVoicesModel() { SettingsRef settings = OSMScoutQt::GetInstance().GetSettings(); assert(settings); - voiceProviders = settings->GetVoiceProviders(); + auto providers = settings->GetVoiceProviders(); + for (const auto &provider: providers) { + voiceProviders << provider; + } diskCache.setCacheDirectory(QString::fromStdString(settings->GetHttpCacheDir())); webCtrl.setCache(&diskCache); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index 0e96045f3..131d7c4d8 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -169,17 +169,17 @@ void Settings::SetOnlineTilesEnabled(bool b) } } -const QList Settings::GetOnlineProviders() const +const std::vector Settings::GetOnlineProviders() const { return onlineProviders; } -const QList Settings::GetMapProviders() const +const std::vector Settings::GetMapProviders() const { return mapProviders; } -const QList Settings::GetVoiceProviders() const +const std::vector Settings::GetVoiceProviders() const { return voiceProviders; } @@ -195,7 +195,7 @@ const OnlineTileProvider Settings::GetOnlineTileProvider() const const std::string Settings::GetOnlineTileProviderId() const { QString def = "?"; - if (!onlineProviders.isEmpty()){ + if (!onlineProviders.empty()){ def = onlineProviders.begin()->getId(); } return storage->GetString("OSMScoutLib/Rendering/OnlineTileProvider", def.toStdString()); @@ -230,7 +230,7 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) } else { if (!onlineProviderMap.contains(provider.getId())) { onlineProviderMap[provider.getId()] = provider; - onlineProviders << provider; + onlineProviders.push_back(provider); } } } @@ -239,7 +239,7 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) // check if current provider is valid... if (!onlineProviderMap.contains(QString::fromStdString(GetOnlineTileProviderId()))){ // ...if not, setup first - if (!onlineProviders.isEmpty()){ + if (!onlineProviders.empty()){ SetOnlineTileProviderId(onlineProviders.begin()->getId().toStdString()); } } @@ -251,7 +251,7 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) namespace { // anonymous namespace template -bool loadResourceProviders(const QString &path, QList &providers) +bool loadResourceProviders(const QString &path, std::vector &providers) { QFile loadFile(path); if (!loadFile.open(QIODevice::ReadOnly)) { @@ -266,7 +266,7 @@ bool loadResourceProviders(const QString &path, QList &providers) if (!provider.isValid()){ qWarning() << "Can't parse online provider from json value" << obj; }else{ - providers.append(provider); + providers.push_back(provider); } } return true; From c4a85a37c3509318d09cb274f381486d5e902200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Sat, 8 Jul 2023 23:14:45 +0200 Subject: [PATCH 05/13] replace Qt json with nlohmann/json in VoiceProvider, MapProvider and OnlineTileProvider --- Demos/meson.build | 6 +- OSMScout2/meson.build | 2 +- StyleEditor/meson.build | 2 +- Tests/meson.build | 4 +- Tests/src/HeaderCheck.cpp | 1 + .../include/osmscoutclientqt/MapProvider.h | 8 +- .../osmscoutclientqt/OnlineTileProvider.h | 6 +- .../osmscoutclientqt/TiledMapOverlay.h | 1 + .../include/osmscoutclientqt/VoiceProvider.h | 8 +- libosmscout-client-qt/meson.build | 2 +- .../osmscoutclientqt/AvailableMapsModel.cpp | 3 + .../osmscoutclientqt/AvailableVoicesModel.cpp | 4 + .../src/osmscoutclientqt/MapManager.cpp | 7 +- .../src/osmscoutclientqt/MapProvider.cpp | 14 ++-- .../osmscoutclientqt/OnlineTileProvider.cpp | 37 +++++---- .../src/osmscoutclientqt/Settings.cpp | 76 ++++++++++++------- .../src/osmscoutclientqt/TiledMapOverlay.cpp | 18 ++++- .../src/osmscoutclientqt/Voice.cpp | 4 + .../src/osmscoutclientqt/VoiceManager.cpp | 3 + .../src/osmscoutclientqt/VoiceProvider.cpp | 14 ++-- 20 files changed, 142 insertions(+), 78 deletions(-) diff --git a/Demos/meson.build b/Demos/meson.build index 41ac28297..9b1040d1b 100644 --- a/Demos/meson.build +++ b/Demos/meson.build @@ -125,7 +125,7 @@ if buildClientQt 'src/QtDemoApp.cpp'], demoMocs, cpp_args: ['-fPIC'], - include_directories: [osmscoutIncDir, osmscoutmapIncDir, osmscoutmapqtIncDir, osmscoutclientqtIncDir, demoIncDir], + include_directories: [osmscoutIncDir, osmscoutmapIncDir, osmscoutmapqtIncDir, osmscoutclientIncDir, osmscoutclientqtIncDir, demoIncDir], dependencies: [mathDep, openmpDep, qtClientDep], link_with: [osmscout, osmscoutmap, osmscoutmapqt, osmscoutclientqt], override_options : ['unity=off'], # generated code for qt resources use static variables with the same name @@ -145,7 +145,7 @@ if buildClientQt '../OSMScout2/src/Theme.cpp'], [demoMocs, navDemoMocs], cpp_args: ['-fPIC'], - include_directories: [osmscoutIncDir, osmscoutmapIncDir, osmscoutmapqtIncDir, osmscoutclientqtIncDir, osmscoutgpxIncDir, demoIncDir, include_directories('../OSMScout2/src')], + include_directories: [osmscoutIncDir, osmscoutmapIncDir, osmscoutmapqtIncDir, osmscoutclientIncDir, osmscoutclientqtIncDir, osmscoutgpxIncDir, demoIncDir, include_directories('../OSMScout2/src')], dependencies: [mathDep, openmpDep, qtClientDep], link_with: [osmscout, osmscoutmap, osmscoutmapqt, osmscoutclientqt, osmscoutgpx], override_options : ['unity=off'], # generated code for qt resources use static variables with the same name @@ -164,7 +164,7 @@ if buildClientQt '../OSMScout2/src/Theme.cpp'], [demoMocs, routingParamsDemoMocs], cpp_args: ['-fPIC'], - include_directories: [osmscoutIncDir, osmscoutmapIncDir, osmscoutmapqtIncDir, osmscoutclientqtIncDir, demoIncDir, include_directories('../OSMScout2/src')], + include_directories: [osmscoutIncDir, osmscoutmapIncDir, osmscoutmapqtIncDir, osmscoutclientIncDir, osmscoutclientqtIncDir, demoIncDir, include_directories('../OSMScout2/src')], dependencies: [mathDep, openmpDep, qtClientDep], link_with: [osmscout, osmscoutmap, osmscoutmapqt, osmscoutclientqt], override_options : ['unity=off'], # generated code for qt resources use static variables with the same name diff --git a/OSMScout2/meson.build b/OSMScout2/meson.build index be4f54f0d..34fb06bdc 100644 --- a/OSMScout2/meson.build +++ b/OSMScout2/meson.build @@ -19,7 +19,7 @@ OSMScout2 = executable('OSMScout2', osmscout2Src, osmscout2Mocs, cpp_args: ['-fPIC'], - include_directories: [osmscout2IncDir, osmscoutgpxIncDir, osmscoutclientqtIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir], + include_directories: [osmscout2IncDir, osmscoutgpxIncDir, osmscoutclientqtIncDir, osmscoutclientIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir], dependencies: [mathDep, openmpDep, qtClientDep], link_with: [osmscoutgpx, osmscoutclientqt, osmscoutmapqt, osmscoutmap, osmscout], install: true) diff --git a/StyleEditor/meson.build b/StyleEditor/meson.build index 13343771e..0a4f572e4 100644 --- a/StyleEditor/meson.build +++ b/StyleEditor/meson.build @@ -23,7 +23,7 @@ OSMScout2 = executable('StyleEditor', styleeditorSrc, styleeditorMocs, cpp_args: ['-fPIC'], - include_directories: [styleeditorIncDir, osmscoutclientqtIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir], + include_directories: [styleeditorIncDir, osmscoutclientqtIncDir, osmscoutclientIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir], dependencies: [mathDep, openmpDep, qtClientDep], link_with: [osmscoutclientqt, osmscoutmapqt, osmscoutmap, osmscout], install: true) diff --git a/Tests/meson.build b/Tests/meson.build index 4652a8bc7..1e1b2e6d5 100644 --- a/Tests/meson.build +++ b/Tests/meson.build @@ -589,7 +589,7 @@ if buildClientQt ClientQtThreading = executable('ClientQtThreading', 'src/ClientQtThreading.cpp', threadingMocs, - include_directories: [testIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir, osmscoutclientqtIncDir], + include_directories: [testIncDir, osmscoutmapqtIncDir, osmscoutclientIncDir, osmscoutmapIncDir, osmscoutIncDir, osmscoutclientqtIncDir], dependencies: [mathDep, threadDep, openmpDep, qtClientDep], link_with: [osmscoutmapqt, osmscoutmap, osmscout, osmscoutclientqt], install: true, @@ -602,7 +602,7 @@ if buildClientQt QtFileDownloader = executable('QtFileDownloader', 'src/QtFileDownloader.cpp', testMocs, - include_directories: [testIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir, osmscoutclientqtIncDir], + include_directories: [testIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir, osmscoutclientIncDir, osmscoutclientqtIncDir], dependencies: [mathDep, threadDep, openmpDep, qtClientDep], link_with: [osmscoutmapqt, osmscoutmap, osmscout, osmscoutclientqt], install: true, diff --git a/Tests/src/HeaderCheck.cpp b/Tests/src/HeaderCheck.cpp index c79dc2df5..5ef342d8f 100644 --- a/Tests/src/HeaderCheck.cpp +++ b/Tests/src/HeaderCheck.cpp @@ -150,6 +150,7 @@ static const std::set allowedDependencies{ "osmscoutclientqt => osmscout", "osmscoutclientqt => osmscoutmap", "osmscoutclientqt => osmscoutmapqt", + "osmscoutclientqt => osmscoutclient.json", "osmscoutclientqt => osmscoutclientqt.private", "osmscoutgpx => osmscout.system", diff --git a/libosmscout-client-qt/include/osmscoutclientqt/MapProvider.h b/libosmscout-client-qt/include/osmscoutclientqt/MapProvider.h index 34fb72ad1..3f65af43a 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/MapProvider.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/MapProvider.h @@ -24,12 +24,10 @@ #include #include -#include -#include -#include - #include +#include + namespace osmscout { /** @@ -87,7 +85,7 @@ class OSMSCOUT_CLIENT_QT_API MapProvider: public QObject return valid; } - static MapProvider fromJson(QJsonValue obj); + static MapProvider fromJson(const nlohmann::json &obj); }; } diff --git a/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProvider.h b/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProvider.h index 56374c845..565ea67d9 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProvider.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProvider.h @@ -23,9 +23,7 @@ #include #include -#include -#include -#include +#include #include @@ -92,7 +90,7 @@ class OSMSCOUT_CLIENT_QT_API OnlineTileProvider: public QObject return copyright; } - static OnlineTileProvider fromJson(QJsonValue obj); + static OnlineTileProvider fromJson(const nlohmann::json &obj); private: bool valid{false}; diff --git a/libosmscout-client-qt/include/osmscoutclientqt/TiledMapOverlay.h b/libosmscout-client-qt/include/osmscoutclientqt/TiledMapOverlay.h index 438ca3142..0b95ff5f7 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/TiledMapOverlay.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/TiledMapOverlay.h @@ -26,6 +26,7 @@ #include #include +#include namespace osmscout { diff --git a/libosmscout-client-qt/include/osmscoutclientqt/VoiceProvider.h b/libosmscout-client-qt/include/osmscoutclientqt/VoiceProvider.h index b6ecfe6ce..993f93a0d 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/VoiceProvider.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/VoiceProvider.h @@ -24,12 +24,10 @@ #include #include -#include -#include -#include - #include +#include + namespace osmscout { /** @@ -87,7 +85,7 @@ class OSMSCOUT_CLIENT_QT_API VoiceProvider: public QObject return valid; } - static VoiceProvider fromJson(QJsonValue obj); + static VoiceProvider fromJson(const nlohmann::json &obj); }; } diff --git a/libosmscout-client-qt/meson.build b/libosmscout-client-qt/meson.build index 0d840023f..8ed74242e 100644 --- a/libosmscout-client-qt/meson.build +++ b/libosmscout-client-qt/meson.build @@ -26,7 +26,7 @@ endforeach osmscoutclientqt = library('osmscout_client_qt', mocFiles, osmscoutclientqtSrc, - include_directories: [osmscoutclientqtIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir], + include_directories: [osmscoutclientqtIncDir, osmscoutclientIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir], cpp_args: cppArgs, dependencies: [mathDep, threadDep, qtClientDep], link_with: [osmscout, osmscoutmap, osmscoutmapqt, osmscoutclient], diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp index 7800cb33f..f11dc23b2 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp @@ -25,6 +25,9 @@ #include #include +#include +#include +#include #include diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp index 5f56e9d3e..5cee922aa 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp @@ -21,6 +21,10 @@ #include #include +#include +#include +#include + #include namespace osmscout { diff --git a/libosmscout-client-qt/src/osmscoutclientqt/MapManager.cpp b/libosmscout-client-qt/src/osmscoutclientqt/MapManager.cpp index e075fedcf..0a19eb8c9 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/MapManager.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/MapManager.cpp @@ -19,14 +19,15 @@ #include #include +#include +#include +#include #include -#include #include +#include #include -#include -#include namespace osmscout { diff --git a/libosmscout-client-qt/src/osmscoutclientqt/MapProvider.cpp b/libosmscout-client-qt/src/osmscoutclientqt/MapProvider.cpp index 7bbf2b30a..09f978c23 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/MapProvider.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/MapProvider.cpp @@ -19,21 +19,25 @@ #include +#include + namespace osmscout { -MapProvider MapProvider::fromJson(QJsonValue val) +MapProvider MapProvider::fromJson(const nlohmann::json &obj) { - if (!val.isObject()) + if (!obj.is_object()) { return MapProvider(); + } - QJsonObject obj = val.toObject(); auto name = obj["name"]; auto uri = obj["uri"]; auto listUri = obj["listUri"]; - if (!(name.isString() && uri.isString() && listUri.isString())){ + if (!(name.is_string() && uri.is_string() && listUri.is_string())){ return MapProvider(); } - return MapProvider(name.toString(), uri.toString(), listUri.toString()); + return MapProvider(QString::fromStdString(name.get()), + QString::fromStdString(uri.get()), + QString::fromStdString(listUri.get())); } } diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProvider.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProvider.cpp index bb201f4ed..a610e7a01 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProvider.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProvider.cpp @@ -19,36 +19,41 @@ #include +#include + namespace osmscout { -OnlineTileProvider OnlineTileProvider::fromJson(QJsonValue val) +OnlineTileProvider OnlineTileProvider::fromJson(const nlohmann::json &val) { - if (!val.isObject()) + if (!val.is_object()) { return OnlineTileProvider(); + } + + auto id = val["id"]; + auto name = val["name"]; + auto servers = val["servers"]; + auto maximumZoomLevel = val["maximumZoomLevel"]; + auto copyright = val["copyright"]; - QJsonObject obj = val.toObject(); - auto id = obj["id"]; - auto name = obj["name"]; - auto servers = obj["servers"]; - auto maximumZoomLevel = obj["maximumZoomLevel"]; - auto copyright = obj["copyright"]; - - if (!(id.isString() && name.isString() && servers.isArray() && - maximumZoomLevel.isDouble() && copyright.isString())){ + if (!(id.is_string() && name.is_string() && servers.is_array() && + maximumZoomLevel.is_number() && copyright.is_string())){ return OnlineTileProvider(); } QStringList serverList; - for (auto serverVal: servers.toArray()){ - if (serverVal.isString()){ - serverList.append(serverVal.toString()); + for (auto serverVal: servers){ + if (serverVal.is_string()){ + serverList.append(QString::fromStdString(serverVal.get())); } } if (serverList.empty()){ return OnlineTileProvider(); } - return OnlineTileProvider(id.toString(), name.toString(), serverList, - maximumZoomLevel.toDouble(), copyright.toString()); + return OnlineTileProvider(QString::fromStdString(id.get()), + QString::fromStdString(name.get()), + serverList, + maximumZoomLevel.get(), + QString::fromStdString(copyright.get())); } } diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index 131d7c4d8..af1a78c65 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -20,6 +20,8 @@ #include #include +#include + #include #include #include @@ -214,25 +216,37 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) // load online tile providers bool result = true; for (const auto &path : paths) { - QFile loadFile(path); - if (!loadFile.open(QIODevice::ReadOnly)) { - qWarning() << "Couldn't open" << loadFile.fileName() << "file."; + std::vector content; + if (!ReadFile(path.toStdString(), content)) { + qWarning() << "Couldn't open" << path << "file."; result = false; continue; } - qDebug() << "Loading online tile providers from " << loadFile.fileName(); - - QJsonDocument doc = QJsonDocument::fromJson(loadFile.readAll()); - for (auto obj: doc.array()) { - OnlineTileProvider provider = OnlineTileProvider::fromJson(obj); - if (!provider.isValid()) { - qWarning() << "Can't parse online provider from json value" << obj; - } else { - if (!onlineProviderMap.contains(provider.getId())) { - onlineProviderMap[provider.getId()] = provider; - onlineProviders.push_back(provider); + qDebug() << "Loading online tile providers from " << path; + + using json = nlohmann::json; + try { + auto doc = json::parse(content); + if (!doc.is_array()) { + qWarning() << "Json is not array " << QString::fromStdString(doc.dump()); + result = false; + continue; + } + for (auto obj: doc) { + OnlineTileProvider provider = OnlineTileProvider::fromJson(obj); + if (!provider.isValid()) { + qWarning() << "Can't parse online provider from json value" << QString::fromStdString(obj.dump()); + result = false; + } else { + if (!onlineProviderMap.contains(provider.getId())) { + onlineProviderMap[provider.getId()] = provider; + onlineProviders.push_back(provider); + } } } + } catch (const json::exception &e) { + qWarning() << "Failed to parse json from" << path << ":" << e.what(); + result = false; } } @@ -253,21 +267,31 @@ namespace { // anonymous namespace template bool loadResourceProviders(const QString &path, std::vector &providers) { - QFile loadFile(path); - if (!loadFile.open(QIODevice::ReadOnly)) { - qWarning() << "Couldn't open" << loadFile.fileName() << "file."; + std::vector content; + if (!ReadFile(path.toStdString(), content)) { + qWarning() << "Couldn't open" << path << "file."; return false; } - qDebug() << "Loading providers from " << loadFile.fileName(); - - QJsonDocument doc = QJsonDocument::fromJson(loadFile.readAll()); - for (auto obj: doc.array()){ - Provider provider = Provider::fromJson(obj); - if (!provider.isValid()){ - qWarning() << "Can't parse online provider from json value" << obj; - }else{ - providers.push_back(provider); + qDebug() << "Loading providers from " << path; + + using json = nlohmann::json; + try { + auto doc = json::parse(content); + if (!doc.is_array()) { + qWarning() << "Json is not array " << QString::fromStdString(doc.dump()); + } else { + for (auto obj: doc) { + Provider provider = Provider::fromJson(obj); + if (!provider.isValid()) { + qWarning() << "Can't parse online provider from json value" << QString::fromStdString(obj.dump()); + } else { + providers.push_back(provider); + } + } } + } catch (const json::exception &e) { + qWarning() << "Failed to parse json from" << path << ":" << e.what(); + return false; } return true; } diff --git a/libosmscout-client-qt/src/osmscoutclientqt/TiledMapOverlay.cpp b/libosmscout-client-qt/src/osmscoutclientqt/TiledMapOverlay.cpp index 53eb79ab5..a5ef5bc00 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/TiledMapOverlay.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/TiledMapOverlay.cpp @@ -22,6 +22,10 @@ #include #include +#include + +#include + namespace osmscout { TileLoaderThread::TileLoaderThread(QThread *thread): @@ -198,7 +202,19 @@ QJsonValue TiledMapOverlay::getProvider() void TiledMapOverlay::setProvider(QJsonValue jv) { - OnlineTileProvider provider=OnlineTileProvider::fromJson(jv); + if (!jv.isObject()) { + qWarning() << "Failed to parse providers json:" << jv; + return; + } + + OnlineTileProvider provider; + try{ + auto jsonStr = QJsonDocument(jv.toObject()).toJson().toStdString(); + provider = OnlineTileProvider::fromJson(nlohmann::json::parse(jsonStr)); + } catch (const nlohmann::json::exception &e) { + qWarning() << "Failed to parse providers json:" << e.what(); + return; + } if (!provider.isValid()){ qWarning() << "Invalid provider:" << jv; return; diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Voice.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Voice.cpp index 474dbd0f7..683612b64 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Voice.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Voice.cpp @@ -21,6 +21,10 @@ #include #include +#include +#include +#include + namespace osmscout { AvailableVoice::AvailableVoice(const VoiceProvider &provider, diff --git a/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp b/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp index adb3e2940..fcde02191 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp @@ -24,6 +24,9 @@ #include #include +#include +#include +#include namespace osmscout { diff --git a/libosmscout-client-qt/src/osmscoutclientqt/VoiceProvider.cpp b/libosmscout-client-qt/src/osmscoutclientqt/VoiceProvider.cpp index b87a1b597..a14e9a40d 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/VoiceProvider.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/VoiceProvider.cpp @@ -19,21 +19,25 @@ #include +#include + namespace osmscout { -VoiceProvider VoiceProvider::fromJson(QJsonValue val) +VoiceProvider VoiceProvider::fromJson(const nlohmann::json &obj) { - if (!val.isObject()) + if (!obj.is_object()) { return VoiceProvider(); + } - QJsonObject obj = val.toObject(); auto name = obj["name"]; auto uri = obj["uri"]; auto listUri = obj["listUri"]; - if (!(name.isString() && uri.isString() && listUri.isString())){ + if (!(name.is_string() && uri.is_string() && listUri.is_string())){ return VoiceProvider(); } - return VoiceProvider(name.toString(), uri.toString(), listUri.toString()); + return VoiceProvider(QString::fromStdString(name.get()), + QString::fromStdString(uri.get()), + QString::fromStdString(listUri.get())); } } From a290f30a7e871139be58c11735c18433715cdfad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Sun, 9 Jul 2023 15:38:47 +0200 Subject: [PATCH 06/13] remove Qt from VoiceProvider class, move it to client library --- OSMScout2/resources/voice-providers.json | 2 +- Tests/src/HeaderCheck.cpp | 4 ++ libosmscout-client-qt/CMakeLists.txt | 2 - libosmscout-client-qt/include/meson.build | 1 - .../osmscoutclientqt/AvailableVoicesModel.h | 7 ++- .../include/osmscoutclientqt/Settings.h | 3 +- .../include/osmscoutclientqt/Voice.h | 3 +- libosmscout-client-qt/src/meson.build | 1 - .../osmscoutclientqt/AvailableVoicesModel.cpp | 2 +- .../src/osmscoutclientqt/OSMScoutQt.cpp | 1 + .../src/osmscoutclientqt/VoiceManager.cpp | 3 +- libosmscout-client/CMakeLists.txt | 3 +- libosmscout-client/include/meson.build | 3 +- .../include/osmscoutclient}/VoiceProvider.h | 57 +++++++------------ libosmscout-client/meson.build | 2 +- libosmscout-client/src/meson.build | 2 +- .../src/osmscoutclient/Empty.cpp | 3 - .../src/osmscoutclient}/VoiceProvider.cpp | 9 ++- 18 files changed, 49 insertions(+), 59 deletions(-) rename {libosmscout-client-qt/include/osmscoutclientqt => libosmscout-client/include/osmscoutclient}/VoiceProvider.h (55%) delete mode 100644 libosmscout-client/src/osmscoutclient/Empty.cpp rename {libosmscout-client-qt/src/osmscoutclientqt => libosmscout-client/src/osmscoutclient}/VoiceProvider.cpp (81%) diff --git a/OSMScout2/resources/voice-providers.json b/OSMScout2/resources/voice-providers.json index ef8e0c87a..3bb73a149 100644 --- a/OSMScout2/resources/voice-providers.json +++ b/OSMScout2/resources/voice-providers.json @@ -1,7 +1,7 @@ [ { "uri": "https://osmscout.karry.cz/voices", - "listUri": "https://osmscout.karry.cz/voices/list.json?locale=%3", + "listUri": "https://osmscout.karry.cz/voices/list.json?locale=%1", "name": "karry.cz" } ] \ No newline at end of file diff --git a/Tests/src/HeaderCheck.cpp b/Tests/src/HeaderCheck.cpp index 5ef342d8f..1f1237e79 100644 --- a/Tests/src/HeaderCheck.cpp +++ b/Tests/src/HeaderCheck.cpp @@ -135,6 +135,9 @@ static const std::set allowedDependencies{ "osmscout.navigation => osmscout.routing", "osmscout.navigation => osmscout", // Fix this + "osmscoutclient => osmscoutclient.json", + "osmscoutclient => osmscout.util", + "osmscoutclientqt => osmscout.system", "osmscoutclientqt => osmscout.async", "osmscoutclientqt => osmscout.log", @@ -150,6 +153,7 @@ static const std::set allowedDependencies{ "osmscoutclientqt => osmscout", "osmscoutclientqt => osmscoutmap", "osmscoutclientqt => osmscoutmapqt", + "osmscoutclientqt => osmscoutclient", "osmscoutclientqt => osmscoutclient.json", "osmscoutclientqt => osmscoutclientqt.private", diff --git a/libosmscout-client-qt/CMakeLists.txt b/libosmscout-client-qt/CMakeLists.txt index a25ded1e1..486e19275 100644 --- a/libosmscout-client-qt/CMakeLists.txt +++ b/libosmscout-client-qt/CMakeLists.txt @@ -59,7 +59,6 @@ set(HEADER_FILES include/osmscoutclientqt/Voice.h include/osmscoutclientqt/VoiceManager.h include/osmscoutclientqt/AvailableVoicesModel.h - include/osmscoutclientqt/VoiceProvider.h include/osmscoutclientqt/InstalledVoicesModel.h ) @@ -118,7 +117,6 @@ set(SOURCE_FILES src/osmscoutclientqt/Voice.cpp src/osmscoutclientqt/VoiceManager.cpp src/osmscoutclientqt/AvailableVoicesModel.cpp - src/osmscoutclientqt/VoiceProvider.cpp src/osmscoutclientqt/InstalledVoicesModel.cpp ) diff --git a/libosmscout-client-qt/include/meson.build b/libosmscout-client-qt/include/meson.build index 9a8ea4047..cad7ceecf 100644 --- a/libosmscout-client-qt/include/meson.build +++ b/libosmscout-client-qt/include/meson.build @@ -57,7 +57,6 @@ osmscoutclientqtHeader = [ 'osmscoutclientqt/Voice.h', 'osmscoutclientqt/VoiceManager.h', 'osmscoutclientqt/AvailableVoicesModel.h', - 'osmscoutclientqt/VoiceProvider.h', 'osmscoutclientqt/InstalledVoicesModel.h', ] diff --git a/libosmscout-client-qt/include/osmscoutclientqt/AvailableVoicesModel.h b/libosmscout-client-qt/include/osmscoutclientqt/AvailableVoicesModel.h index 7d8752fef..a4b2ea7e4 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/AvailableVoicesModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/AvailableVoicesModel.h @@ -20,12 +20,13 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include +#include + +#include + #include #include -#include - #include #include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index 2b836ae90..6d6bb555a 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -28,10 +28,11 @@ #include #include +#include + #include #include #include -#include #include // this variable should be defined by build system diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Voice.h b/libosmscout-client-qt/include/osmscoutclientqt/Voice.h index 2bb9133ac..9068e0bf9 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Voice.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Voice.h @@ -20,7 +20,8 @@ */ #include -#include + +#include #include #include diff --git a/libosmscout-client-qt/src/meson.build b/libosmscout-client-qt/src/meson.build index 7ff0457a9..210509e98 100644 --- a/libosmscout-client-qt/src/meson.build +++ b/libosmscout-client-qt/src/meson.build @@ -53,7 +53,6 @@ osmscoutclientqtSrc = [ 'src/osmscoutclientqt/Voice.cpp', 'src/osmscoutclientqt/VoiceManager.cpp', 'src/osmscoutclientqt/AvailableVoicesModel.cpp', - 'src/osmscoutclientqt/VoiceProvider.cpp', 'src/osmscoutclientqt/InstalledVoicesModel.cpp', ] diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp index 5cee922aa..6d87e5e90 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp @@ -76,7 +76,7 @@ void AvailableVoicesModel::reload() QLocale locale; for (auto &provider: voiceProviders){ - QUrl url = provider.getListUri(locale.name()); + QUrl url = QUrl(QString::fromStdString(provider.getListUri(locale.name().toStdString()))); QNetworkRequest request(url); request.setHeader(QNetworkRequest::UserAgentHeader, OSMScoutQt::GetInstance().GetUserAgent()); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp index 5e315520d..f627c48f4 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp @@ -173,6 +173,7 @@ void OSMScoutQt::RegisterQmlTypes(const char *uri, qRegisterMetaType("ElevationModule::ElevationPoints"); qRegisterMetaType>("std::map"); qRegisterMetaType("MapIcon"); + qRegisterMetaType("VoiceProvider"); // register osmscout types for usage in QML qmlRegisterType(uri, versionMajor, versionMinor, "AvailableMapsModel"); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp b/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp index fcde02191..948dd6c63 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp @@ -81,7 +81,8 @@ void VoiceDownloadJob::start() return; } - DownloadJob::start(voice.getProvider().getUri()+"/"+voice.getDirectory(), Voice::files()); + DownloadJob::start(QString::fromStdString(voice.getProvider().getUri()) + "/" + voice.getDirectory(), + Voice::files()); } VoiceManager::VoiceManager() diff --git a/libosmscout-client/CMakeLists.txt b/libosmscout-client/CMakeLists.txt index a3769fbc7..705a885bc 100644 --- a/libosmscout-client/CMakeLists.txt +++ b/libosmscout-client/CMakeLists.txt @@ -2,10 +2,11 @@ set(HEADER_FILES include/osmscoutclient/json/json.hpp include/osmscoutclient/json/json_fwd.hpp include/osmscoutclient/ClientImportExport.h + include/osmscoutclient/VoiceProvider.h ) set(SOURCE_FILES - src/osmscoutclient/Empty.cpp + src/osmscoutclient/VoiceProvider.cpp ) set(EXCLUDE_HEADER) diff --git a/libosmscout-client/include/meson.build b/libosmscout-client/include/meson.build index 5858f3418..0315dc385 100644 --- a/libosmscout-client/include/meson.build +++ b/libosmscout-client/include/meson.build @@ -3,7 +3,8 @@ osmscoutclientIncDir = include_directories('.') osmscoutclientHeader = [ 'osmscoutclient/json/json.hpp', 'osmscoutclient/json/json_fwd.hpp', - 'osmscoutclient/ClientImportExport.h' + 'osmscoutclient/ClientImportExport.h', + 'osmscoutclient/VoiceProvider.h' ] if meson.version().version_compare('>=0.63.0') diff --git a/libosmscout-client-qt/include/osmscoutclientqt/VoiceProvider.h b/libosmscout-client/include/osmscoutclient/VoiceProvider.h similarity index 55% rename from libosmscout-client-qt/include/osmscoutclientqt/VoiceProvider.h rename to libosmscout-client/include/osmscoutclient/VoiceProvider.h index 993f93a0d..f716c8f35 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/VoiceProvider.h +++ b/libosmscout-client/include/osmscoutclient/VoiceProvider.h @@ -1,5 +1,5 @@ -#ifndef OSMSCOUT_CLIENT_QT_VOICEPROVIDER_H -#define OSMSCOUT_CLIENT_QT_VOICEPROVIDER_H +#ifndef OSMSCOUT_CLIENT_VOICEPROVIDER_H +#define OSMSCOUT_CLIENT_VOICEPROVIDER_H /* OSMScout - a Qt backend for libosmscout and libosmscout-map @@ -20,64 +20,53 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include -#include -#include +#include -#include +#include #include +#include + namespace osmscout { /** - * \ingroup QtAPI + * \ingroup ClientAPI */ -class OSMSCOUT_CLIENT_QT_API VoiceProvider: public QObject +struct OSMSCOUT_CLIENT_API VoiceProvider { - Q_OBJECT - private: bool valid=false; - QString uri; - QString listUri; - QString name; + std::string uri; + std::string listUri; + std::string name; public: VoiceProvider() = default; + VoiceProvider(const VoiceProvider &) = default; + VoiceProvider(VoiceProvider &&) = default; - VoiceProvider(const VoiceProvider &o): - QObject(o.parent()), - valid(o.valid), uri(o.uri), listUri(o.listUri), name(o.name){}; - - VoiceProvider(const QString &name, const QString &uri, const QString &listUri): + VoiceProvider(const std::string &name, const std::string &uri, const std::string &listUri): valid(true), uri(uri), listUri(listUri), name(name) {} - ~VoiceProvider() override = default; + virtual ~VoiceProvider() = default; - VoiceProvider& operator=(const VoiceProvider &o) - { - valid = o.valid; - uri = o.uri; - listUri = o.listUri; - name = o.name; + VoiceProvider& operator=(const VoiceProvider&) = default; + VoiceProvider& operator=(VoiceProvider&&) = default; - return *this; - } - - QString getName() const + std::string getName() const { return name; } - QString getUri() const + std::string getUri() const { return uri; } - QUrl getListUri(QString locale="en") const + std::string getListUri(const std::string &locale="en") const { - return listUri.arg(locale); + return ReplaceString(listUri, "%1", locale); } bool isValid() const @@ -90,6 +79,4 @@ class OSMSCOUT_CLIENT_QT_API VoiceProvider: public QObject } -Q_DECLARE_METATYPE(osmscout::VoiceProvider) - -#endif // OSMSCOUT_CLIENT_QT_VOICEPROVIDER_H +#endif // OSMSCOUT_CLIENT_VOICEPROVIDER_H diff --git a/libosmscout-client/meson.build b/libosmscout-client/meson.build index 6bb833774..934544157 100644 --- a/libosmscout-client/meson.build +++ b/libosmscout-client/meson.build @@ -25,7 +25,7 @@ endif osmscoutclient = library('osmscout_client', osmscoutclientSrc, - include_directories: osmscoutclientIncDir, + include_directories: [osmscoutclientIncDir, osmscoutIncDir], cpp_args: cppArgs, dependencies: [mathDep, threadDep], link_args: link_args, diff --git a/libosmscout-client/src/meson.build b/libosmscout-client/src/meson.build index 1730a99a3..0d9a17e0f 100644 --- a/libosmscout-client/src/meson.build +++ b/libosmscout-client/src/meson.build @@ -1,3 +1,3 @@ osmscoutclientSrc = [ - 'src/osmscoutclient/Empty.cpp' + 'src/osmscoutclient/VoiceProvider.cpp' ] diff --git a/libosmscout-client/src/osmscoutclient/Empty.cpp b/libosmscout-client/src/osmscoutclient/Empty.cpp deleted file mode 100644 index 111bb6f6c..000000000 --- a/libosmscout-client/src/osmscoutclient/Empty.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// -// Created by tim on 08.06.23. -// diff --git a/libosmscout-client-qt/src/osmscoutclientqt/VoiceProvider.cpp b/libosmscout-client/src/osmscoutclient/VoiceProvider.cpp similarity index 81% rename from libosmscout-client-qt/src/osmscoutclientqt/VoiceProvider.cpp rename to libosmscout-client/src/osmscoutclient/VoiceProvider.cpp index a14e9a40d..2225d8e17 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/VoiceProvider.cpp +++ b/libosmscout-client/src/osmscoutclient/VoiceProvider.cpp @@ -17,8 +17,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include - +#include #include namespace osmscout { @@ -36,8 +35,8 @@ VoiceProvider VoiceProvider::fromJson(const nlohmann::json &obj) if (!(name.is_string() && uri.is_string() && listUri.is_string())){ return VoiceProvider(); } - return VoiceProvider(QString::fromStdString(name.get()), - QString::fromStdString(uri.get()), - QString::fromStdString(listUri.get())); + return VoiceProvider(name.get(), + uri.get(), + listUri.get()); } } From b9fc91019166a211c4392a0d4b467995cdcfaa43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Sun, 9 Jul 2023 21:48:00 +0200 Subject: [PATCH 07/13] remove Qt from OnlineTileProvider class, move it to client library --- libosmscout-client-qt/CMakeLists.txt | 2 - libosmscout-client-qt/include/meson.build | 1 - .../osmscoutclientqt/NavigationModel.h | 1 + .../OnlineTileProviderModel.h | 3 +- .../osmscoutclientqt/OsmTileDownloader.h | 3 +- .../include/osmscoutclientqt/Settings.h | 6 +- libosmscout-client-qt/src/meson.build | 1 - .../osmscoutclientqt/MapObjectInfoModel.cpp | 2 + .../OnlineTileProviderModel.cpp | 8 +-- .../osmscoutclientqt/OsmTileDownloader.cpp | 8 +-- .../src/osmscoutclientqt/Settings.cpp | 17 +++--- libosmscout-client/CMakeLists.txt | 2 + libosmscout-client/include/meson.build | 1 + .../osmscoutclient}/OnlineTileProvider.h | 58 ++++++++----------- .../include/osmscoutclient/VoiceProvider.h | 2 +- libosmscout-client/src/meson.build | 1 + .../osmscoutclient}/OnlineTileProvider.cpp | 14 ++--- 17 files changed, 63 insertions(+), 67 deletions(-) rename {libosmscout-client-qt/include/osmscoutclientqt => libosmscout-client/include/osmscoutclient}/OnlineTileProvider.h (59%) rename {libosmscout-client-qt/src/osmscoutclientqt => libosmscout-client/src/osmscoutclient}/OnlineTileProvider.cpp (80%) diff --git a/libosmscout-client-qt/CMakeLists.txt b/libosmscout-client-qt/CMakeLists.txt index 486e19275..db6cb9bbd 100644 --- a/libosmscout-client-qt/CMakeLists.txt +++ b/libosmscout-client-qt/CMakeLists.txt @@ -15,7 +15,6 @@ set(HEADER_FILES include/osmscoutclientqt/LocationEntry.h include/osmscoutclientqt/LocationInfoModel.h include/osmscoutclientqt/MapWidget.h - include/osmscoutclientqt/OnlineTileProvider.h include/osmscoutclientqt/OnlineTileProviderModel.h include/osmscoutclientqt/OpeningHoursModel.h include/osmscoutclientqt/OsmTileDownloader.h @@ -74,7 +73,6 @@ set(SOURCE_FILES src/osmscoutclientqt/LocationEntry.cpp src/osmscoutclientqt/LocationInfoModel.cpp src/osmscoutclientqt/MapWidget.cpp - src/osmscoutclientqt/OnlineTileProvider.cpp src/osmscoutclientqt/OnlineTileProviderModel.cpp src/osmscoutclientqt/OpeningHoursModel.cpp src/osmscoutclientqt/OSMTile.cpp diff --git a/libosmscout-client-qt/include/meson.build b/libosmscout-client-qt/include/meson.build index cad7ceecf..293b0e6db 100644 --- a/libosmscout-client-qt/include/meson.build +++ b/libosmscout-client-qt/include/meson.build @@ -17,7 +17,6 @@ osmscoutclientqtHeader = [ 'osmscoutclientqt/NavigationModel.h', 'osmscoutclientqt/VehiclePosition.h', 'osmscoutclientqt/InputHandler.h', - 'osmscoutclientqt/OnlineTileProvider.h', 'osmscoutclientqt/OnlineTileProviderModel.h', 'osmscoutclientqt/OpeningHoursModel.h', 'osmscoutclientqt/SearchLocationModel.h', diff --git a/libosmscout-client-qt/include/osmscoutclientqt/NavigationModel.h b/libosmscout-client-qt/include/osmscoutclientqt/NavigationModel.h index 2ed13908e..dee769815 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/NavigationModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/NavigationModel.h @@ -22,6 +22,7 @@ #include #include +#include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProviderModel.h b/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProviderModel.h index d3e5e3944..7f8663407 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProviderModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProviderModel.h @@ -22,7 +22,8 @@ #include -#include +#include + #include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/OsmTileDownloader.h b/libosmscout-client-qt/include/osmscoutclientqt/OsmTileDownloader.h index 7d7d5a5cf..ec6f278a5 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/OsmTileDownloader.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/OsmTileDownloader.h @@ -28,8 +28,9 @@ #include #include +#include + #include -#include #include namespace osmscout { diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index 6d6bb555a..6343c9dce 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -21,6 +21,7 @@ */ #include +#include #include #include @@ -28,10 +29,9 @@ #include #include +#include #include -#include -#include #include #include @@ -110,7 +110,7 @@ class OSMSCOUT_CLIENT_QT_API Settings private: SettingsStoragePtr storage; double physicalDpi; - QMap onlineProviderMap; + std::map onlineProviderMap; std::vector onlineProviders; std::vector mapProviders; std::vector voiceProviders; diff --git a/libosmscout-client-qt/src/meson.build b/libosmscout-client-qt/src/meson.build index 210509e98..e1e0308fa 100644 --- a/libosmscout-client-qt/src/meson.build +++ b/libosmscout-client-qt/src/meson.build @@ -13,7 +13,6 @@ osmscoutclientqtSrc = [ 'src/osmscoutclientqt/NavigationModel.cpp', 'src/osmscoutclientqt/VehiclePosition.cpp', 'src/osmscoutclientqt/InputHandler.cpp', - 'src/osmscoutclientqt/OnlineTileProvider.cpp', 'src/osmscoutclientqt/OnlineTileProviderModel.cpp', 'src/osmscoutclientqt/OpeningHoursModel.cpp', 'src/osmscoutclientqt/SearchLocationModel.cpp', diff --git a/libosmscout-client-qt/src/osmscoutclientqt/MapObjectInfoModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/MapObjectInfoModel.cpp index 5ad657524..a9fbffbfc 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/MapObjectInfoModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/MapObjectInfoModel.cpp @@ -22,6 +22,8 @@ #include #include +#include + #include namespace osmscout { diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProviderModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProviderModel.cpp index d54c53c66..600d765e5 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProviderModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProviderModel.cpp @@ -27,9 +27,9 @@ QVariant OnlineTileProviderModel::data(const QModelIndex &index, int role) const switch (role) { case Qt::DisplayRole: case NameRole: - return provider.getName(); + return QString::fromStdString(provider.getName()); case IdRole: - return provider.getId(); + return QString::fromStdString(provider.getId()); default: break; } @@ -62,12 +62,12 @@ int OnlineTileProviderModel::count() const QString OnlineTileProviderModel::getId(int row) const { - return onlineProviders.at(row).getId(); + return QString::fromStdString(onlineProviders.at(row).getId()); } QString OnlineTileProviderModel::getName(int row) const { - return onlineProviders.at(row).getName(); + return QString::fromStdString(onlineProviders.at(row).getName()); } } diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OsmTileDownloader.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OsmTileDownloader.cpp index f3ba00049..54b01eb53 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OsmTileDownloader.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OsmTileDownloader.cpp @@ -23,9 +23,9 @@ #include #endif +#include + #include -#include -#include #include namespace osmscout { @@ -72,12 +72,12 @@ void OsmTileDownloader::download(uint32_t zoomLevel, uint32_t x, uint32_t y) return; } - QStringList servers = tileProvider.getServers(); + auto servers = tileProvider.getServers(); if (servers.empty()){ emit failed(zoomLevel, x, y, false); return; } - QString server = servers.at(serverNumber % servers.size()); + QString server = QString::fromStdString(servers[serverNumber % servers.size()]); QUrl tileUrl(server.arg(zoomLevel).arg(x).arg(y)); qDebug() << "Download tile" << tileUrl << "(current thread:" << QThread::currentThread() << ")"; diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index af1a78c65..31ca9ba3a 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -188,19 +188,20 @@ const std::vector Settings::GetVoiceProviders() const const OnlineTileProvider Settings::GetOnlineTileProvider() const { - if (onlineProviderMap.contains(QString::fromStdString(GetOnlineTileProviderId()))){ - return onlineProviderMap[QString::fromStdString(GetOnlineTileProviderId())]; + if (auto it=onlineProviderMap.find(GetOnlineTileProviderId()); + it!=onlineProviderMap.end()){ + return it->second; } return OnlineTileProvider(); } const std::string Settings::GetOnlineTileProviderId() const { - QString def = "?"; + std::string def = "?"; if (!onlineProviders.empty()){ def = onlineProviders.begin()->getId(); } - return storage->GetString("OSMScoutLib/Rendering/OnlineTileProvider", def.toStdString()); + return storage->GetString("OSMScoutLib/Rendering/OnlineTileProvider", def); } void Settings::SetOnlineTileProviderId(const std::string &id){ @@ -238,7 +239,7 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) qWarning() << "Can't parse online provider from json value" << QString::fromStdString(obj.dump()); result = false; } else { - if (!onlineProviderMap.contains(provider.getId())) { + if (onlineProviderMap.find(provider.getId())==onlineProviderMap.end()) { onlineProviderMap[provider.getId()] = provider; onlineProviders.push_back(provider); } @@ -251,10 +252,10 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) } // check if current provider is valid... - if (!onlineProviderMap.contains(QString::fromStdString(GetOnlineTileProviderId()))){ + if (onlineProviderMap.find(GetOnlineTileProviderId())==onlineProviderMap.end()){ // ...if not, setup first if (!onlineProviders.empty()){ - SetOnlineTileProviderId(onlineProviders.begin()->getId().toStdString()); + SetOnlineTileProviderId(onlineProviders.begin()->getId()); } } @@ -550,7 +551,7 @@ QString QmlSettings::onlineProviderCopyright() { OnlineTileProvider provider = settings->GetOnlineTileProvider(); if (provider.isValid()){ - return provider.getCopyright(); + return QString::fromStdString(provider.getCopyright()); } return ""; } diff --git a/libosmscout-client/CMakeLists.txt b/libosmscout-client/CMakeLists.txt index 705a885bc..8ac2b4abb 100644 --- a/libosmscout-client/CMakeLists.txt +++ b/libosmscout-client/CMakeLists.txt @@ -2,10 +2,12 @@ set(HEADER_FILES include/osmscoutclient/json/json.hpp include/osmscoutclient/json/json_fwd.hpp include/osmscoutclient/ClientImportExport.h + include/osmscoutclient/OnlineTileProvider.h include/osmscoutclient/VoiceProvider.h ) set(SOURCE_FILES + src/osmscoutclient/OnlineTileProvider.cpp src/osmscoutclient/VoiceProvider.cpp ) diff --git a/libosmscout-client/include/meson.build b/libosmscout-client/include/meson.build index 0315dc385..c48ce4554 100644 --- a/libosmscout-client/include/meson.build +++ b/libosmscout-client/include/meson.build @@ -4,6 +4,7 @@ osmscoutclientHeader = [ 'osmscoutclient/json/json.hpp', 'osmscoutclient/json/json_fwd.hpp', 'osmscoutclient/ClientImportExport.h', + 'osmscoutclient/OnlineTileProvider.h', 'osmscoutclient/VoiceProvider.h' ] diff --git a/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProvider.h b/libosmscout-client/include/osmscoutclient/OnlineTileProvider.h similarity index 59% rename from libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProvider.h rename to libosmscout-client/include/osmscoutclient/OnlineTileProvider.h index 565ea67d9..8132f6748 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/OnlineTileProvider.h +++ b/libosmscout-client/include/osmscoutclient/OnlineTileProvider.h @@ -2,7 +2,7 @@ #define OSMSCOUT_CLIENT_QT_ONLINETILEPROVIDER_H /* - OSMScout - a Qt backend for libosmscout and libosmscout-map + This source is part of the libosmscout library Copyright (C) 2016 Lukas Karas This library is free software; you can redistribute it and/or @@ -20,52 +20,42 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include -#include +#include #include -#include +#include +#include namespace osmscout { /** - * \ingroup QtAPI + * \ingroup ClientAPI * * Online tile provider object. See OnlineTileProviderModel and Settings. */ -class OSMSCOUT_CLIENT_QT_API OnlineTileProvider: public QObject +struct OSMSCOUT_CLIENT_API OnlineTileProvider { - Q_OBJECT - public: OnlineTileProvider() = default; - OnlineTileProvider(const OnlineTileProvider &o): - QObject(o.parent()), - valid(o.valid), id(o.id), name(o.name), servers(o.servers), - maximumZoomLevel(o.maximumZoomLevel), copyright(o.copyright){}; + OnlineTileProvider(const OnlineTileProvider &) = default; + OnlineTileProvider(OnlineTileProvider &&) = default; - OnlineTileProvider(const QString &id, const QString &name, const QStringList &servers, int maximumZoomLevel, - QString copyright): + OnlineTileProvider(const std::string &id, + const std::string &name, + const std::vector &servers, + int maximumZoomLevel, + const std::string ©right): valid(true), id(id), name(name), servers(servers), maximumZoomLevel(maximumZoomLevel), copyright(copyright){}; - ~OnlineTileProvider() override = default; + virtual ~OnlineTileProvider() = default; - OnlineTileProvider& operator=(const OnlineTileProvider &o) - { - valid = o.valid; - id = o.id; - name = o.name; - servers = o.servers; - maximumZoomLevel = o.maximumZoomLevel; - copyright = o.copyright; - - return *this; - } + OnlineTileProvider& operator=(const OnlineTileProvider &) = default; + OnlineTileProvider& operator=(OnlineTileProvider &&) = default; - QString getId() const { + std::string getId() const { return id; } @@ -73,11 +63,11 @@ class OSMSCOUT_CLIENT_QT_API OnlineTileProvider: public QObject return maximumZoomLevel; } - QString getName() const { + std::string getName() const { return name; } - QStringList getServers() const { + std::vector getServers() const { return servers; } @@ -85,7 +75,7 @@ class OSMSCOUT_CLIENT_QT_API OnlineTileProvider: public QObject return valid; } - QString getCopyright() const + std::string getCopyright() const { return copyright; } @@ -94,11 +84,11 @@ class OSMSCOUT_CLIENT_QT_API OnlineTileProvider: public QObject private: bool valid{false}; - QString id; - QString name; - QStringList servers; + std::string id; + std::string name; + std::vector servers; int maximumZoomLevel{-1}; - QString copyright; + std::string copyright; }; } diff --git a/libosmscout-client/include/osmscoutclient/VoiceProvider.h b/libosmscout-client/include/osmscoutclient/VoiceProvider.h index f716c8f35..f306f3f38 100644 --- a/libosmscout-client/include/osmscoutclient/VoiceProvider.h +++ b/libosmscout-client/include/osmscoutclient/VoiceProvider.h @@ -2,7 +2,7 @@ #define OSMSCOUT_CLIENT_VOICEPROVIDER_H /* - OSMScout - a Qt backend for libosmscout and libosmscout-map + This source is part of the libosmscout library Copyright (C) 2020 Lukas Karas This library is free software; you can redistribute it and/or diff --git a/libosmscout-client/src/meson.build b/libosmscout-client/src/meson.build index 0d9a17e0f..ae09421ad 100644 --- a/libosmscout-client/src/meson.build +++ b/libosmscout-client/src/meson.build @@ -1,3 +1,4 @@ osmscoutclientSrc = [ + 'src/osmscoutclient/OnlineTileProvider.cpp', 'src/osmscoutclient/VoiceProvider.cpp' ] diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProvider.cpp b/libosmscout-client/src/osmscoutclient/OnlineTileProvider.cpp similarity index 80% rename from libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProvider.cpp rename to libosmscout-client/src/osmscoutclient/OnlineTileProvider.cpp index a610e7a01..ecfa93eb5 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OnlineTileProvider.cpp +++ b/libosmscout-client/src/osmscoutclient/OnlineTileProvider.cpp @@ -17,7 +17,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include +#include #include @@ -39,21 +39,21 @@ OnlineTileProvider OnlineTileProvider::fromJson(const nlohmann::json &val) maximumZoomLevel.is_number() && copyright.is_string())){ return OnlineTileProvider(); } - - QStringList serverList; + + std::vector serverList; for (auto serverVal: servers){ if (serverVal.is_string()){ - serverList.append(QString::fromStdString(serverVal.get())); + serverList.push_back(serverVal.get()); } } if (serverList.empty()){ return OnlineTileProvider(); } - return OnlineTileProvider(QString::fromStdString(id.get()), - QString::fromStdString(name.get()), + return OnlineTileProvider(id.get(), + name.get(), serverList, maximumZoomLevel.get(), - QString::fromStdString(copyright.get())); + copyright.get()); } } From 5f99cc7f99056b0dd978854185de0f32d27fefd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Sun, 9 Jul 2023 22:02:51 +0200 Subject: [PATCH 08/13] cookie data as std::vector --- .../include/osmscoutclientqt/PersistentCookieJar.h | 6 +++--- .../include/osmscoutclientqt/Settings.h | 4 ++-- libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp | 9 ++++----- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/libosmscout-client-qt/include/osmscoutclientqt/PersistentCookieJar.h b/libosmscout-client-qt/include/osmscoutclientqt/PersistentCookieJar.h index 263d413a2..1a3ff8796 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/PersistentCookieJar.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/PersistentCookieJar.h @@ -87,14 +87,14 @@ class OSMSCOUT_CLIENT_QT_API PersistentCookieJar : public QNetworkCookieJar { } } - settings->SetCookieData(data); + settings->SetCookieData(std::vector(data.data(), data.data() + data.size())); } void load() { QMutexLocker lock(&mutex); - const QByteArray data = settings->GetCookieData(); - setAllCookies(QNetworkCookie::parseCookies(data)); + const auto data = settings->GetCookieData(); + setAllCookies(QNetworkCookie::parseCookies(QByteArray(data.data(), data.size()))); } mutable QMutex mutex; diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index 6343c9dce..e63b463f5 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -194,8 +194,8 @@ class OSMSCOUT_CLIENT_QT_API Settings const std::string GetHttpCacheDir() const; - const QByteArray GetCookieData() const; - void SetCookieData(QByteArray data); + const std::vector GetCookieData() const; + void SetCookieData(const std::vector &data); std::string GetUnits() const; void SetUnits(const std::string &units); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index 31ca9ba3a..88e05810b 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -461,15 +461,14 @@ const std::string Settings::GetHttpCacheDir() const return (cacheLocation + QDir::separator() + "OSMScoutHttpCache").toStdString(); } -const QByteArray Settings::GetCookieData() const +const std::vector Settings::GetCookieData() const { - auto bv = storage->GetBytes("OSMScoutLib/General/Cookies"); - return QByteArray(bv.data(), bv.size()); + return storage->GetBytes("OSMScoutLib/General/Cookies"); } -void Settings::SetCookieData(const QByteArray data) +void Settings::SetCookieData(const std::vector &data) { - storage->SetValue("OSMScoutLib/General/Cookies", std::vector(data.data(), data.data() + data.size())); + storage->SetValue("OSMScoutLib/General/Cookies", data); } std::string Settings::GetUnits() const From 0a60c1af9b9bc1d8b957b63da76936d206c79fac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Sun, 9 Jul 2023 22:21:13 +0200 Subject: [PATCH 09/13] move QtSettingsStorage to separate file --- libosmscout-client-qt/CMakeLists.txt | 2 + libosmscout-client-qt/include/meson.build | 1 + .../osmscoutclientqt/QtSettingsStorage.h | 60 ++++++++++ .../include/osmscoutclientqt/Settings.h | 26 ----- libosmscout-client-qt/src/meson.build | 1 + .../src/osmscoutclientqt/OSMScoutQt.cpp | 1 + .../osmscoutclientqt/QtSettingsStorage.cpp | 107 ++++++++++++++++++ .../src/osmscoutclientqt/Settings.cpp | 82 -------------- 8 files changed, 172 insertions(+), 108 deletions(-) create mode 100644 libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h create mode 100644 libosmscout-client-qt/src/osmscoutclientqt/QtSettingsStorage.cpp diff --git a/libosmscout-client-qt/CMakeLists.txt b/libosmscout-client-qt/CMakeLists.txt index db6cb9bbd..66164bb31 100644 --- a/libosmscout-client-qt/CMakeLists.txt +++ b/libosmscout-client-qt/CMakeLists.txt @@ -51,6 +51,7 @@ set(HEADER_FILES include/osmscoutclientqt/VehiclePosition.h include/osmscoutclientqt/QmlRoutingProfile.h include/osmscoutclientqt/QtRouteData.h + include/osmscoutclientqt/QtSettingsStorage.h include/osmscoutclientqt/RouteStep.h include/osmscoutclientqt/NearPOIModel.h include/osmscoutclientqt/POILookupModule.h @@ -109,6 +110,7 @@ set(SOURCE_FILES src/osmscoutclientqt/RouteStep.cpp src/osmscoutclientqt/QmlRoutingProfile.cpp src/osmscoutclientqt/QtRouteData.cpp + src/osmscoutclientqt/QtSettingsStorage.cpp src/osmscoutclientqt/NearPOIModel.cpp src/osmscoutclientqt/POILookupModule.cpp src/osmscoutclientqt/InstalledMapsModel.cpp diff --git a/libosmscout-client-qt/include/meson.build b/libosmscout-client-qt/include/meson.build index 293b0e6db..8fc8a9f80 100644 --- a/libosmscout-client-qt/include/meson.build +++ b/libosmscout-client-qt/include/meson.build @@ -13,6 +13,7 @@ osmscoutclientqtHeader = [ 'osmscoutclientqt/RouteStep.h', 'osmscoutclientqt/QmlRoutingProfile.h', 'osmscoutclientqt/QtRouteData.h', + 'osmscoutclientqt/QtSettingsStorage.h', 'osmscoutclientqt/NavigationModule.h', 'osmscoutclientqt/NavigationModel.h', 'osmscoutclientqt/VehiclePosition.h', diff --git a/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h b/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h new file mode 100644 index 000000000..d71cea238 --- /dev/null +++ b/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h @@ -0,0 +1,60 @@ +#ifndef LIBOSMSCOUT_QTSETTINGSSTORAGE_H +#define LIBOSMSCOUT_QTSETTINGSSTORAGE_H + +/* + OSMScout - a Qt backend for libosmscout and libosmscout-map + Copyright (C) 2023 Lukas Karas + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#include + +#include +#include + + +namespace osmscout { + + class OSMSCOUT_CLIENT_QT_API QtSettingsStorage: public QObject, public SettingsStorage + { + private: + QSettings *storage; + public: + /** + * @param providedStorage custom provider when not null. Storage takes ownership. + * When it is null, default Qt settings is used. + */ + explicit QtSettingsStorage(QSettings *providedStorage=nullptr); + virtual ~QtSettingsStorage() = default; + + void SetValue(const std::string &key, double d) override; + void SetValue(const std::string &key, uint32_t i) override; + void SetValue(const std::string &key, const std::string &str) override; + void SetValue(const std::string &key, bool b) override; + void SetValue(const std::string &key, std::vector bytes) override; + double GetDouble(const std::string &key, double defaultValue = 0) override; + uint32_t GetUInt(const std::string &key, uint32_t defaultValue = 0) override; + std::string GetString(const std::string &key, const std::string &defaultValue = "") override; + bool GetBool(const std::string &key, bool defaultValue = 0) override; + std::vector GetBytes(const std::string &key) override; + + std::vector Keys(const std::string &prefix) override; + }; + +} +#endif //LIBOSMSCOUT_QTSETTINGSSTORAGE_H diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index e63b463f5..b8de1094f 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -65,32 +65,6 @@ struct OSMSCOUT_CLIENT_QT_API SettingsStorage using SettingsStoragePtr = std::shared_ptr; -class OSMSCOUT_CLIENT_QT_API QtSettingsStorage: public QObject, public SettingsStorage -{ -private: - QSettings *storage; -public: - /** - * @param providedStorage custom provider when not null. Storage takes ownership. - * When it is null, default Qt settings is used. - */ - explicit QtSettingsStorage(QSettings *providedStorage=nullptr); - virtual ~QtSettingsStorage() = default; - - void SetValue(const std::string &key, double d) override; - void SetValue(const std::string &key, uint32_t i) override; - void SetValue(const std::string &key, const std::string &str) override; - void SetValue(const std::string &key, bool b) override; - void SetValue(const std::string &key, std::vector bytes) override; - double GetDouble(const std::string &key, double defaultValue = 0) override; - uint32_t GetUInt(const std::string &key, uint32_t defaultValue = 0) override; - std::string GetString(const std::string &key, const std::string &defaultValue = "") override; - bool GetBool(const std::string &key, bool defaultValue = 0) override; - std::vector GetBytes(const std::string &key) override; - - std::vector Keys(const std::string &prefix) override; -}; - /** * \ingroup QtAPI * diff --git a/libosmscout-client-qt/src/meson.build b/libosmscout-client-qt/src/meson.build index e1e0308fa..03cebe365 100644 --- a/libosmscout-client-qt/src/meson.build +++ b/libosmscout-client-qt/src/meson.build @@ -9,6 +9,7 @@ osmscoutclientqtSrc = [ 'src/osmscoutclientqt/RouteStep.cpp', 'src/osmscoutclientqt/QmlRoutingProfile.cpp', 'src/osmscoutclientqt/QtRouteData.cpp', + 'src/osmscoutclientqt/QtSettingsStorage.cpp', 'src/osmscoutclientqt/NavigationModule.cpp', 'src/osmscoutclientqt/NavigationModel.cpp', 'src/osmscoutclientqt/VehiclePosition.cpp', diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp index f627c48f4..9450c8434 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include diff --git a/libosmscout-client-qt/src/osmscoutclientqt/QtSettingsStorage.cpp b/libosmscout-client-qt/src/osmscoutclientqt/QtSettingsStorage.cpp new file mode 100644 index 000000000..cd4a94727 --- /dev/null +++ b/libosmscout-client-qt/src/osmscoutclientqt/QtSettingsStorage.cpp @@ -0,0 +1,107 @@ +/* + OSMScout - a Qt backend for libosmscout and libosmscout-map + Copyright (C) 2023 Lukas Karas + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +namespace osmscout { + + +QtSettingsStorage::QtSettingsStorage(QSettings *providedStorage): + storage(providedStorage) +{ + if (storage==nullptr){ + storage=new QSettings(this); + } else { + providedStorage->setParent(this); + } +} + +void QtSettingsStorage::SetValue(const std::string &key, double d) +{ + storage->setValue(QString::fromStdString(key), d); +} + +void QtSettingsStorage::SetValue(const std::string &key, uint32_t i) +{ + storage->setValue(QString::fromStdString(key), i); +} + +void QtSettingsStorage::SetValue(const std::string &key, const std::string &str) +{ + storage->setValue(QString::fromStdString(key), QString::fromStdString(str)); +} + +void QtSettingsStorage::SetValue(const std::string &key, bool b) +{ + storage->setValue(QString::fromStdString(key), b); +} + +void QtSettingsStorage::SetValue(const std::string &key, std::vector bytes) +{ + storage->setValue(QString::fromStdString(key), QByteArray(bytes.data(), bytes.size())); +} + +double QtSettingsStorage::GetDouble(const std::string &key, double defaultValue) +{ + bool ok; + double d = storage->value(QString::fromStdString(key), defaultValue).toDouble(&ok); + if (!ok) { + return defaultValue; + } + return d; +} + +uint32_t QtSettingsStorage::GetUInt(const std::string &key, uint32_t defaultValue) +{ + bool ok; + uint32_t i = storage->value(QString::fromStdString(key), defaultValue).toUInt(&ok); + if (!ok) { + return defaultValue; + } + return i; +} + +std::string QtSettingsStorage::GetString(const std::string &key, const std::string &defaultValue) +{ + return storage->value(QString::fromStdString(key), QString::fromStdString(defaultValue)).toString().toStdString(); +} + +bool QtSettingsStorage::GetBool(const std::string &key, bool defaultValue) +{ + return storage->value(QString::fromStdString(key), defaultValue).toBool(); +} + +std::vector QtSettingsStorage::GetBytes(const std::string &key) +{ + QByteArray arr = storage->value(QString::fromStdString(key)).toByteArray(); + return std::vector(arr.data(), arr.data() + arr.size()); +} + +std::vector QtSettingsStorage::Keys(const std::string &prefix) +{ + std::vector result; + storage->beginGroup(QString::fromStdString(prefix)); + for (const QString& key:storage->allKeys()){ + result.push_back(prefix + key.toStdString()); + } + storage->endGroup(); + return result; +} + +} diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index 88e05810b..f1ca39d16 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -34,88 +34,6 @@ namespace osmscout { -QtSettingsStorage::QtSettingsStorage(QSettings *providedStorage): - storage(providedStorage) -{ - if (storage==nullptr){ - storage=new QSettings(this); - } else { - providedStorage->setParent(this); - } -} - -void QtSettingsStorage::SetValue(const std::string &key, double d) -{ - storage->setValue(QString::fromStdString(key), d); -} - -void QtSettingsStorage::SetValue(const std::string &key, uint32_t i) -{ - storage->setValue(QString::fromStdString(key), i); -} - -void QtSettingsStorage::SetValue(const std::string &key, const std::string &str) -{ - storage->setValue(QString::fromStdString(key), QString::fromStdString(str)); -} - -void QtSettingsStorage::SetValue(const std::string &key, bool b) -{ - storage->setValue(QString::fromStdString(key), b); -} - -void QtSettingsStorage::SetValue(const std::string &key, std::vector bytes) -{ - storage->setValue(QString::fromStdString(key), QByteArray(bytes.data(), bytes.size())); -} - -double QtSettingsStorage::GetDouble(const std::string &key, double defaultValue) -{ - bool ok; - double d = storage->value(QString::fromStdString(key), defaultValue).toDouble(&ok); - if (!ok) { - return defaultValue; - } - return d; -} - -uint32_t QtSettingsStorage::GetUInt(const std::string &key, uint32_t defaultValue) -{ - bool ok; - uint32_t i = storage->value(QString::fromStdString(key), defaultValue).toUInt(&ok); - if (!ok) { - return defaultValue; - } - return i; -} - -std::string QtSettingsStorage::GetString(const std::string &key, const std::string &defaultValue) -{ - return storage->value(QString::fromStdString(key), QString::fromStdString(defaultValue)).toString().toStdString(); -} - -bool QtSettingsStorage::GetBool(const std::string &key, bool defaultValue) -{ - return storage->value(QString::fromStdString(key), defaultValue).toBool(); -} - -std::vector QtSettingsStorage::GetBytes(const std::string &key) -{ - QByteArray arr = storage->value(QString::fromStdString(key)).toByteArray(); - return std::vector(arr.data(), arr.data() + arr.size()); -} - -std::vector QtSettingsStorage::Keys(const std::string &prefix) -{ - std::vector result; - storage->beginGroup(QString::fromStdString(prefix)); - for (const QString& key:storage->allKeys()){ - result.push_back(prefix + key.toStdString()); - } - storage->endGroup(); - return result; -} - Settings::Settings(SettingsStoragePtr storage): storage(storage) { From 35cec2e5158b8881da18f3a993347c830a6ee5ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Sun, 9 Jul 2023 22:39:58 +0200 Subject: [PATCH 10/13] move QmlSettings to separate file --- libosmscout-client-qt/CMakeLists.txt | 2 + libosmscout-client-qt/include/meson.build | 1 + .../include/osmscoutclientqt/QmlSettings.h | 163 ++++++++++++++++++ .../osmscoutclientqt/QtSettingsStorage.h | 6 +- .../include/osmscoutclientqt/Settings.h | 133 -------------- libosmscout-client-qt/src/meson.build | 1 + .../src/osmscoutclientqt/OSMScoutQt.cpp | 1 + .../src/osmscoutclientqt/QmlSettings.cpp | 144 ++++++++++++++++ .../src/osmscoutclientqt/Settings.cpp | 119 ------------- 9 files changed, 315 insertions(+), 255 deletions(-) create mode 100644 libosmscout-client-qt/include/osmscoutclientqt/QmlSettings.h create mode 100644 libosmscout-client-qt/src/osmscoutclientqt/QmlSettings.cpp diff --git a/libosmscout-client-qt/CMakeLists.txt b/libosmscout-client-qt/CMakeLists.txt index 66164bb31..5b61c494a 100644 --- a/libosmscout-client-qt/CMakeLists.txt +++ b/libosmscout-client-qt/CMakeLists.txt @@ -50,6 +50,7 @@ set(HEADER_FILES include/osmscoutclientqt/NavigationModel.h include/osmscoutclientqt/VehiclePosition.h include/osmscoutclientqt/QmlRoutingProfile.h + include/osmscoutclientqt/QmlSettings.h include/osmscoutclientqt/QtRouteData.h include/osmscoutclientqt/QtSettingsStorage.h include/osmscoutclientqt/RouteStep.h @@ -109,6 +110,7 @@ set(SOURCE_FILES src/osmscoutclientqt/VehiclePosition.cpp src/osmscoutclientqt/RouteStep.cpp src/osmscoutclientqt/QmlRoutingProfile.cpp + src/osmscoutclientqt/QmlSettings.cpp src/osmscoutclientqt/QtRouteData.cpp src/osmscoutclientqt/QtSettingsStorage.cpp src/osmscoutclientqt/NearPOIModel.cpp diff --git a/libosmscout-client-qt/include/meson.build b/libosmscout-client-qt/include/meson.build index 8fc8a9f80..c57ccd7f5 100644 --- a/libosmscout-client-qt/include/meson.build +++ b/libosmscout-client-qt/include/meson.build @@ -12,6 +12,7 @@ osmscoutclientqtHeader = [ 'osmscoutclientqt/RouteDescriptionBuilder.h', 'osmscoutclientqt/RouteStep.h', 'osmscoutclientqt/QmlRoutingProfile.h', + 'osmscoutclientqt/QmlSettings.h', 'osmscoutclientqt/QtRouteData.h', 'osmscoutclientqt/QtSettingsStorage.h', 'osmscoutclientqt/NavigationModule.h', diff --git a/libosmscout-client-qt/include/osmscoutclientqt/QmlSettings.h b/libosmscout-client-qt/include/osmscoutclientqt/QmlSettings.h new file mode 100644 index 000000000..a81d1d3fb --- /dev/null +++ b/libosmscout-client-qt/include/osmscoutclientqt/QmlSettings.h @@ -0,0 +1,163 @@ +#ifndef OSMSCOUT_CLIENT_QT_QMLSETTINGS_H +#define OSMSCOUT_CLIENT_QT_QMLSETTINGS_H + +/* + OSMScout - a Qt backend for libosmscout and libosmscout-map + Copyright (C) 2023 Lukas Karas + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#include + +#include + +namespace osmscout { + +/** + * \ingroup QtAPI + * + * Provides interface to Settings object from QML. It should be registered + * by qmlRegisterType before first use. + * + * ``` + * qmlRegisterType("net.sf.libosmscout.map", 1, 0, "Settings"); + * ``` + * + * It may be imported and used in QML then: + * ``` + * import net.sf.libosmscout.map 1.0 + * + * Settings { + * id: settings + * } + * ``` + */ +class OSMSCOUT_CLIENT_QT_API QmlSettings: public QObject{ +Q_OBJECT + Q_PROPERTY(double physicalDPI READ GetPhysicalDPI CONSTANT) + Q_PROPERTY(double mapDPI READ GetMapDPI WRITE SetMapDPI NOTIFY MapDPIChange) + Q_PROPERTY(bool onlineTiles READ GetOnlineTilesEnabled WRITE SetOnlineTilesEnabled NOTIFY OnlineTilesEnabledChanged) + Q_PROPERTY(QString onlineTileProviderId READ GetOnlineTileProviderId WRITE SetOnlineTileProviderId NOTIFY OnlineTileProviderIdChanged) + Q_PROPERTY(bool offlineMap READ GetOfflineMap WRITE SetOfflineMap NOTIFY OfflineMapChanged) + Q_PROPERTY(QString styleSheetFile READ GetStyleSheetFile WRITE SetStyleSheetFile NOTIFY StyleSheetFileChanged) + Q_PROPERTY(bool renderSea READ GetRenderSea WRITE SetRenderSea NOTIFY RenderSeaChanged) + Q_PROPERTY(QString fontName READ GetFontName WRITE SetFontName NOTIFY FontNameChanged) + Q_PROPERTY(double fontSize READ GetFontSize WRITE SetFontSize NOTIFY FontSizeChanged) + Q_PROPERTY(bool showAltLanguage READ GetShowAltLanguage WRITE SetShowAltLanguage NOTIFY ShowAltLanguageChanged) + /// metrics or imperial + Q_PROPERTY(QString units READ GetUnits WRITE SetUnits NOTIFY UnitsChanged) + +private: + SettingsRef settings; + + // slots + Slot mapDPISlot{ + [this](const double &d){ this->MapDPIChange(d); } + }; + + Slot onlineTilesEnabledSlot{ + [this](const bool &b){this->OnlineTilesEnabledChanged(b);} + }; + + Slot onlineTileProviderIdSlot{ + [this](const std::string &str){ this->OnlineTileProviderIdChanged(QString::fromStdString(str));} + }; + + Slot offlineMapSlot{ + [this](const bool &b){ this->OfflineMapChanged(b);} + }; + + Slot styleSheetFileSlot{ + [this](const std::string &str){ this->StyleSheetFileChanged(QString::fromStdString(str));} + }; + + Slot renderSeaSlot{ + [this](const bool &b){ this->RenderSeaChanged(b);} + }; + + Slot fontNameSlot{ + [this](const std::string &str){ this->FontNameChanged(QString::fromStdString(str));} + }; + + Slot fontSizeSlot{ + [this](const double &d){ this->FontSizeChanged(d);} + }; + + Slot showAltLanguageSlot{ + [this](const bool &b){ this->ShowAltLanguageChanged(b);} + }; + + Slot unitsSlot{ + [this](const std::string &str){ this->UnitsChanged(QString::fromStdString(str));} + }; + +signals: + void MapDPIChange(double dpi); + void OnlineTilesEnabledChanged(bool enabled); + void OnlineTileProviderIdChanged(const QString id); + void OfflineMapChanged(bool); + void StyleSheetFileChanged(const QString file); + void RenderSeaChanged(bool); + void FontNameChanged(const QString fontName); + void FontSizeChanged(double fontSize); + void ShowAltLanguageChanged(bool showAltLanguage); + void UnitsChanged(const QString units); + +public: + QmlSettings(); + + ~QmlSettings() override = default; + + double GetPhysicalDPI() const; + + void SetMapDPI(double dpi); + double GetMapDPI() const; + + bool GetOnlineTilesEnabled() const; + void SetOnlineTilesEnabled(bool b); + + const QString GetOnlineTileProviderId() const; + void SetOnlineTileProviderId(QString id); + + Q_INVOKABLE QString onlineProviderCopyright(); + + bool GetOfflineMap() const; + void SetOfflineMap(bool); + + QString GetStyleSheetFile() const; + void SetStyleSheetFile(const QString file); + + bool GetRenderSea() const; + void SetRenderSea(bool); + + QString GetFontName() const; + void SetFontName(const QString fontName); + + double GetFontSize() const; + void SetFontSize(double fontSize); + + bool GetShowAltLanguage() const; + void SetShowAltLanguage(bool showAltLanguage); + + QString GetUnits() const; + void SetUnits(const QString units); +}; + +} + +#endif //OSMSCOUT_CLIENT_QT_QMLSETTINGS_H diff --git a/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h b/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h index d71cea238..3911358f1 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h @@ -1,5 +1,5 @@ -#ifndef LIBOSMSCOUT_QTSETTINGSSTORAGE_H -#define LIBOSMSCOUT_QTSETTINGSSTORAGE_H +#ifndef OSMSCOUT_CLIENT_QT_QTSETTINGSSTORAGE_H +#define OSMSCOUT_CLIENT_QT_QTSETTINGSSTORAGE_H /* OSMScout - a Qt backend for libosmscout and libosmscout-map @@ -57,4 +57,4 @@ namespace osmscout { }; } -#endif //LIBOSMSCOUT_QTSETTINGSSTORAGE_H +#endif //OSMSCOUT_CLIENT_QT_QTSETTINGSSTORAGE_H diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index b8de1094f..36881fb4d 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -23,9 +23,6 @@ #include #include -#include -#include - #include #include @@ -180,136 +177,6 @@ class OSMSCOUT_CLIENT_QT_API Settings */ using SettingsRef = std::shared_ptr; -/** - * \ingroup QtAPI - * - * Provides interface to Settings object from QML. It should be registered - * by qmlRegisterType before first use. - * - * ``` - * qmlRegisterType("net.sf.libosmscout.map", 1, 0, "Settings"); - * ``` - * - * It may be imported and used in QML then: - * ``` - * import net.sf.libosmscout.map 1.0 - * - * Settings { - * id: settings - * } - * ``` - */ -class OSMSCOUT_CLIENT_QT_API QmlSettings: public QObject{ - Q_OBJECT - Q_PROPERTY(double physicalDPI READ GetPhysicalDPI CONSTANT) - Q_PROPERTY(double mapDPI READ GetMapDPI WRITE SetMapDPI NOTIFY MapDPIChange) - Q_PROPERTY(bool onlineTiles READ GetOnlineTilesEnabled WRITE SetOnlineTilesEnabled NOTIFY OnlineTilesEnabledChanged) - Q_PROPERTY(QString onlineTileProviderId READ GetOnlineTileProviderId WRITE SetOnlineTileProviderId NOTIFY OnlineTileProviderIdChanged) - Q_PROPERTY(bool offlineMap READ GetOfflineMap WRITE SetOfflineMap NOTIFY OfflineMapChanged) - Q_PROPERTY(QString styleSheetFile READ GetStyleSheetFile WRITE SetStyleSheetFile NOTIFY StyleSheetFileChanged) - Q_PROPERTY(bool renderSea READ GetRenderSea WRITE SetRenderSea NOTIFY RenderSeaChanged) - Q_PROPERTY(QString fontName READ GetFontName WRITE SetFontName NOTIFY FontNameChanged) - Q_PROPERTY(double fontSize READ GetFontSize WRITE SetFontSize NOTIFY FontSizeChanged) - Q_PROPERTY(bool showAltLanguage READ GetShowAltLanguage WRITE SetShowAltLanguage NOTIFY ShowAltLanguageChanged) - /// metrics or imperial - Q_PROPERTY(QString units READ GetUnits WRITE SetUnits NOTIFY UnitsChanged) - -private: - SettingsRef settings; - - // slots - Slot mapDPISlot{ - [this](const double &d){ this->MapDPIChange(d); } - }; - - Slot onlineTilesEnabledSlot{ - [this](const bool &b){this->OnlineTilesEnabledChanged(b);} - }; - - Slot onlineTileProviderIdSlot{ - [this](const std::string &str){ this->OnlineTileProviderIdChanged(QString::fromStdString(str));} - }; - - Slot offlineMapSlot{ - [this](const bool &b){ this->OfflineMapChanged(b);} - }; - - Slot styleSheetFileSlot{ - [this](const std::string &str){ this->StyleSheetFileChanged(QString::fromStdString(str));} - }; - - Slot renderSeaSlot{ - [this](const bool &b){ this->RenderSeaChanged(b);} - }; - - Slot fontNameSlot{ - [this](const std::string &str){ this->FontNameChanged(QString::fromStdString(str));} - }; - - Slot fontSizeSlot{ - [this](const double &d){ this->FontSizeChanged(d);} - }; - - Slot showAltLanguageSlot{ - [this](const bool &b){ this->ShowAltLanguageChanged(b);} - }; - - Slot unitsSlot{ - [this](const std::string &str){ this->UnitsChanged(QString::fromStdString(str));} - }; - -signals: - void MapDPIChange(double dpi); - void OnlineTilesEnabledChanged(bool enabled); - void OnlineTileProviderIdChanged(const QString id); - void OfflineMapChanged(bool); - void StyleSheetFileChanged(const QString file); - void RenderSeaChanged(bool); - void FontNameChanged(const QString fontName); - void FontSizeChanged(double fontSize); - void ShowAltLanguageChanged(bool showAltLanguage); - void UnitsChanged(const QString units); - -public: - QmlSettings(); - - ~QmlSettings() override = default; - - double GetPhysicalDPI() const; - - void SetMapDPI(double dpi); - double GetMapDPI() const; - - bool GetOnlineTilesEnabled() const; - void SetOnlineTilesEnabled(bool b); - - const QString GetOnlineTileProviderId() const; - void SetOnlineTileProviderId(QString id); - - Q_INVOKABLE QString onlineProviderCopyright(); - - bool GetOfflineMap() const; - void SetOfflineMap(bool); - - QString GetStyleSheetFile() const; - void SetStyleSheetFile(const QString file); - - bool GetRenderSea() const; - void SetRenderSea(bool); - - QString GetFontName() const; - void SetFontName(const QString fontName); - - double GetFontSize() const; - void SetFontSize(double fontSize); - - bool GetShowAltLanguage() const; - void SetShowAltLanguage(bool showAltLanguage); - - QString GetUnits() const; - void SetUnits(const QString units); -}; - } #endif diff --git a/libosmscout-client-qt/src/meson.build b/libosmscout-client-qt/src/meson.build index 03cebe365..805f12f85 100644 --- a/libosmscout-client-qt/src/meson.build +++ b/libosmscout-client-qt/src/meson.build @@ -8,6 +8,7 @@ osmscoutclientqtSrc = [ 'src/osmscoutclientqt/RouteDescriptionBuilder.cpp', 'src/osmscoutclientqt/RouteStep.cpp', 'src/osmscoutclientqt/QmlRoutingProfile.cpp', + 'src/osmscoutclientqt/QmlSettings.cpp', 'src/osmscoutclientqt/QtRouteData.cpp', 'src/osmscoutclientqt/QtSettingsStorage.cpp', 'src/osmscoutclientqt/NavigationModule.cpp', diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp index 9450c8434..785089524 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/libosmscout-client-qt/src/osmscoutclientqt/QmlSettings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/QmlSettings.cpp new file mode 100644 index 000000000..a995dbbb4 --- /dev/null +++ b/libosmscout-client-qt/src/osmscoutclientqt/QmlSettings.cpp @@ -0,0 +1,144 @@ +/* + OSMScout - a Qt backend for libosmscout and libosmscout-map + Copyright (C) 2023 Lukas Karas + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +namespace osmscout { + +QmlSettings::QmlSettings() +{ + settings=OSMScoutQt::GetInstance().GetSettings(); + + settings->mapDPIChange.Connect(mapDPISlot); + settings->onlineTilesEnabledChanged.Connect(onlineTilesEnabledSlot); + settings->onlineTileProviderIdChanged.Connect(onlineTileProviderIdSlot); + settings->offlineMapChanged.Connect(offlineMapSlot); + settings->styleSheetFileChanged.Connect(styleSheetFileSlot); + settings->renderSeaChanged.Connect(renderSeaSlot); + settings->fontNameChanged.Connect(fontNameSlot); + settings->fontSizeChanged.Connect(fontSizeSlot); + settings->showAltLanguageChanged.Connect(showAltLanguageSlot); + settings->unitsChanged.Connect(unitsSlot); +} + +double QmlSettings::GetPhysicalDPI() const +{ + return settings->GetPhysicalDPI(); +} + +void QmlSettings::SetMapDPI(double dpi) +{ + settings->SetMapDPI(dpi); +} + +double QmlSettings::GetMapDPI() const +{ + return settings->GetMapDPI(); +} + +bool QmlSettings::GetOnlineTilesEnabled() const +{ + return settings->GetOnlineTilesEnabled(); +} + +void QmlSettings::SetOnlineTilesEnabled(bool b) +{ + settings->SetOnlineTilesEnabled(b); +} + +const QString QmlSettings::GetOnlineTileProviderId() const +{ + return QString::fromStdString(settings->GetOnlineTileProviderId()); +} + +void QmlSettings::SetOnlineTileProviderId(QString id) +{ + settings->SetOnlineTileProviderId(id.toStdString()); +} + +QString QmlSettings::onlineProviderCopyright() +{ + OnlineTileProvider provider = settings->GetOnlineTileProvider(); + if (provider.isValid()){ + return QString::fromStdString(provider.getCopyright()); + } + return ""; +} + +bool QmlSettings::GetOfflineMap() const +{ + return settings->GetOfflineMap(); +} +void QmlSettings::SetOfflineMap(bool b) +{ + settings->SetOfflineMap(b); +} + +QString QmlSettings::GetStyleSheetFile() const +{ + return QString::fromStdString(settings->GetStyleSheetFile()); +} +void QmlSettings::SetStyleSheetFile(const QString file) +{ + settings->SetStyleSheetFile(file.toStdString()); +} + +bool QmlSettings::GetRenderSea() const +{ + return settings->GetRenderSea(); +} +void QmlSettings::SetRenderSea(bool b) +{ + settings->SetRenderSea(b); +} +QString QmlSettings::GetFontName() const +{ + return QString::fromStdString(settings->GetFontName()); +} +void QmlSettings::SetFontName(const QString fontName) +{ + settings->SetFontName(fontName.toStdString()); +} +double QmlSettings::GetFontSize() const +{ + return settings->GetFontSize(); +} +void QmlSettings::SetFontSize(double fontSize) +{ + settings->SetFontSize(fontSize); +} +bool QmlSettings::GetShowAltLanguage() const +{ + return settings->GetShowAltLanguage(); +} +void QmlSettings::SetShowAltLanguage(bool showAltLanguage) +{ + settings->SetShowAltLanguage(showAltLanguage); +} +QString QmlSettings::GetUnits() const +{ + return QString::fromStdString(settings->GetUnits()); +} +void QmlSettings::SetUnits(const QString units) +{ + settings->SetUnits(units.toStdString()); +} + +} diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index f1ca39d16..9d5aa1dee 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -412,123 +412,4 @@ void Settings::SetUnits(const std::string &units) unitsChanged.Emit(units); } } - -QmlSettings::QmlSettings() -{ - settings=OSMScoutQt::GetInstance().GetSettings(); - - settings->mapDPIChange.Connect(mapDPISlot); - settings->onlineTilesEnabledChanged.Connect(onlineTilesEnabledSlot); - settings->onlineTileProviderIdChanged.Connect(onlineTileProviderIdSlot); - settings->offlineMapChanged.Connect(offlineMapSlot); - settings->styleSheetFileChanged.Connect(styleSheetFileSlot); - settings->renderSeaChanged.Connect(renderSeaSlot); - settings->fontNameChanged.Connect(fontNameSlot); - settings->fontSizeChanged.Connect(fontSizeSlot); - settings->showAltLanguageChanged.Connect(showAltLanguageSlot); - settings->unitsChanged.Connect(unitsSlot); -} - -double QmlSettings::GetPhysicalDPI() const -{ - return settings->GetPhysicalDPI(); -} - -void QmlSettings::SetMapDPI(double dpi) -{ - settings->SetMapDPI(dpi); -} - -double QmlSettings::GetMapDPI() const -{ - return settings->GetMapDPI(); -} - -bool QmlSettings::GetOnlineTilesEnabled() const -{ - return settings->GetOnlineTilesEnabled(); -} - -void QmlSettings::SetOnlineTilesEnabled(bool b) -{ - settings->SetOnlineTilesEnabled(b); -} - -const QString QmlSettings::GetOnlineTileProviderId() const -{ - return QString::fromStdString(settings->GetOnlineTileProviderId()); -} - -void QmlSettings::SetOnlineTileProviderId(QString id) -{ - settings->SetOnlineTileProviderId(id.toStdString()); -} - -QString QmlSettings::onlineProviderCopyright() -{ - OnlineTileProvider provider = settings->GetOnlineTileProvider(); - if (provider.isValid()){ - return QString::fromStdString(provider.getCopyright()); - } - return ""; -} - -bool QmlSettings::GetOfflineMap() const -{ - return settings->GetOfflineMap(); -} -void QmlSettings::SetOfflineMap(bool b) -{ - settings->SetOfflineMap(b); -} - -QString QmlSettings::GetStyleSheetFile() const -{ - return QString::fromStdString(settings->GetStyleSheetFile()); -} -void QmlSettings::SetStyleSheetFile(const QString file) -{ - settings->SetStyleSheetFile(file.toStdString()); -} - -bool QmlSettings::GetRenderSea() const -{ - return settings->GetRenderSea(); -} -void QmlSettings::SetRenderSea(bool b) -{ - settings->SetRenderSea(b); -} -QString QmlSettings::GetFontName() const -{ - return QString::fromStdString(settings->GetFontName()); -} -void QmlSettings::SetFontName(const QString fontName) -{ - settings->SetFontName(fontName.toStdString()); -} -double QmlSettings::GetFontSize() const -{ - return settings->GetFontSize(); -} -void QmlSettings::SetFontSize(double fontSize) -{ - settings->SetFontSize(fontSize); -} -bool QmlSettings::GetShowAltLanguage() const -{ - return settings->GetShowAltLanguage(); -} -void QmlSettings::SetShowAltLanguage(bool showAltLanguage) -{ - settings->SetShowAltLanguage(showAltLanguage); -} -QString QmlSettings::GetUnits() const -{ - return QString::fromStdString(settings->GetUnits()); -} -void QmlSettings::SetUnits(const QString units) -{ - settings->SetUnits(units.toStdString()); -} } From 23ce85f2323748422b8ea658e27d67433c09a21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Sun, 9 Jul 2023 23:22:33 +0200 Subject: [PATCH 11/13] remove Qt from MapProvider class, move it to client library --- libosmscout-client-qt/CMakeLists.txt | 2 - libosmscout-client-qt/include/meson.build | 1 - .../osmscoutclientqt/AvailableMapsModel.h | 3 +- .../osmscoutclientqt/MapDownloadsModel.h | 11 ++-- .../include/osmscoutclientqt/MapManager.h | 14 ++--- .../include/osmscoutclientqt/Settings.h | 8 +-- libosmscout-client-qt/src/meson.build | 1 - .../osmscoutclientqt/AvailableMapsModel.cpp | 10 +-- .../src/osmscoutclientqt/MapManager.cpp | 2 +- .../src/osmscoutclientqt/OSMScoutQt.cpp | 15 ++++- .../src/osmscoutclientqt/Settings.cpp | 32 +++++----- libosmscout-client/CMakeLists.txt | 2 + libosmscout-client/include/meson.build | 1 + .../include/osmscoutclient}/MapProvider.h | 61 ++++++++----------- libosmscout-client/src/meson.build | 1 + .../src/osmscoutclient}/MapProvider.cpp | 8 +-- 16 files changed, 86 insertions(+), 86 deletions(-) rename {libosmscout-client-qt/include/osmscoutclientqt => libosmscout-client/include/osmscoutclient}/MapProvider.h (52%) rename {libosmscout-client-qt/src/osmscoutclientqt => libosmscout-client/src/osmscoutclient}/MapProvider.cpp (82%) diff --git a/libosmscout-client-qt/CMakeLists.txt b/libosmscout-client-qt/CMakeLists.txt index 5b61c494a..dcdc2262e 100644 --- a/libosmscout-client-qt/CMakeLists.txt +++ b/libosmscout-client-qt/CMakeLists.txt @@ -24,7 +24,6 @@ set(HEADER_FILES include/osmscoutclientqt/SearchLocationModel.h include/osmscoutclientqt/Settings.h include/osmscoutclientqt/TileCache.h - include/osmscoutclientqt/MapProvider.h include/osmscoutclientqt/AvailableMapsModel.h include/osmscoutclientqt/PersistentCookieJar.h include/osmscoutclientqt/MapManager.h @@ -84,7 +83,6 @@ set(SOURCE_FILES src/osmscoutclientqt/SearchLocationModel.cpp src/osmscoutclientqt/Settings.cpp src/osmscoutclientqt/TileCache.cpp - src/osmscoutclientqt/MapProvider.cpp src/osmscoutclientqt/AvailableMapsModel.cpp src/osmscoutclientqt/MapManager.cpp src/osmscoutclientqt/MapDownloadsModel.cpp diff --git a/libosmscout-client-qt/include/meson.build b/libosmscout-client-qt/include/meson.build index c57ccd7f5..1279d7a0b 100644 --- a/libosmscout-client-qt/include/meson.build +++ b/libosmscout-client-qt/include/meson.build @@ -29,7 +29,6 @@ osmscoutclientqtHeader = [ 'osmscoutclientqt/OsmTileDownloader.h', 'osmscoutclientqt/OSMTile.h', 'osmscoutclientqt/TileCache.h', - 'osmscoutclientqt/MapProvider.h', 'osmscoutclientqt/AvailableMapsModel.h', 'osmscoutclientqt/FileDownloader.h', 'osmscoutclientqt/IconAnimation.h', diff --git a/libosmscout-client-qt/include/osmscoutclientqt/AvailableMapsModel.h b/libosmscout-client-qt/include/osmscoutclientqt/AvailableMapsModel.h index 3936ee02a..afc4c6f47 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/AvailableMapsModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/AvailableMapsModel.h @@ -25,7 +25,8 @@ #include #include -#include +#include + #include namespace osmscout { diff --git a/libosmscout-client-qt/include/osmscoutclientqt/MapDownloadsModel.h b/libosmscout-client-qt/include/osmscoutclientqt/MapDownloadsModel.h index 186657d47..ae62c3ce0 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/MapDownloadsModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/MapDownloadsModel.h @@ -20,18 +20,17 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include + +#include +#include + #include #include #include #include #include -#include - -#include -#include -#include - namespace osmscout { /** diff --git a/libosmscout-client-qt/include/osmscoutclientqt/MapManager.h b/libosmscout-client-qt/include/osmscoutclientqt/MapManager.h index 2d8ea3768..888566134 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/MapManager.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/MapManager.h @@ -20,19 +20,19 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include -#include -#include -#include -#include - #include -#include +#include + #include #include #include +#include +#include +#include +#include +#include #include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h index 36881fb4d..ad0acf250 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Settings.h @@ -26,10 +26,10 @@ #include #include +#include #include #include -#include #include // this variable should be defined by build system @@ -126,9 +126,9 @@ class OSMSCOUT_CLIENT_QT_API Settings const std::string GetOnlineTileProviderId() const; void SetOnlineTileProviderId(const std::string &id); - bool loadOnlineTileProviders(const QStringList &paths); - bool loadMapProviders(const QStringList &paths); - bool loadVoiceProviders(const QStringList &paths); + bool loadOnlineTileProviders(const std::vector &paths); + bool loadMapProviders(const std::vector &paths); + bool loadVoiceProviders(const std::vector &paths); bool GetOfflineMap() const; void SetOfflineMap(bool); diff --git a/libosmscout-client-qt/src/meson.build b/libosmscout-client-qt/src/meson.build index 805f12f85..d21d1e8f0 100644 --- a/libosmscout-client-qt/src/meson.build +++ b/libosmscout-client-qt/src/meson.build @@ -25,7 +25,6 @@ osmscoutclientqtSrc = [ 'src/osmscoutclientqt/OsmTileDownloader.cpp', 'src/osmscoutclientqt/OSMTile.cpp', 'src/osmscoutclientqt/TileCache.cpp', - 'src/osmscoutclientqt/MapProvider.cpp', 'src/osmscoutclientqt/AvailableMapsModel.cpp', 'src/osmscoutclientqt/FileDownloader.cpp', 'src/osmscoutclientqt/IconAnimation.cpp', diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp index f11dc23b2..b0b1e595d 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp @@ -84,10 +84,10 @@ void AvailableMapsModel::reload() QLocale locale; for (const auto &provider: mapProviders){ - QUrl url = provider.getListUri(osmscout::TypeConfig::MIN_FORMAT_VERSION, - osmscout::TypeConfig::MAX_FORMAT_VERSION, - locale.name()); - QNetworkRequest request(url); + std::string url = provider.getListUri(osmscout::TypeConfig::MIN_FORMAT_VERSION, + osmscout::TypeConfig::MAX_FORMAT_VERSION, + locale.name().toStdString()); + QNetworkRequest request(QUrl(QString::fromStdString(url))); request.setHeader(QNetworkRequest::UserAgentHeader, OSMScoutQt::GetInstance().GetUserAgent()); @@ -313,7 +313,7 @@ QVariant AvailableMapsModel::data(const QModelIndex &index, int role) const case SizeRole: return map==nullptr ? "": QVariant(map->getSizeHuman()); case ProviderUriRole: - return map==nullptr ? QVariant(): map->getProvider().getName(); + return map==nullptr ? QVariant(): QString::fromStdString(map->getProvider().getName()); case DescriptionRole: return item->getDescription(); case MapRole: diff --git a/libosmscout-client-qt/src/osmscoutclientqt/MapManager.cpp b/libosmscout-client-qt/src/osmscoutclientqt/MapManager.cpp index 0a19eb8c9..ea1b8d58a 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/MapManager.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/MapManager.cpp @@ -107,7 +107,7 @@ void MapDownloadJob::start() QStringList fileNames = MapDirectory::optionalFiles() + MapDirectory::mandatoryFiles(); - DownloadJob::start(map.getProvider().getUri()+"/"+map.getServerDirectory(), fileNames); + DownloadJob::start(QString::fromStdString(map.getProvider().getUri())+"/"+map.getServerDirectory(), fileNames); } MapDirectory::MapDirectory(QDir dir): diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp index 785089524..11504790b 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp @@ -87,15 +87,23 @@ bool OSMScoutQtBuilder::Init() SettingsRef settings=std::make_shared(std::make_shared(settingsStorage)); settingsStorage = nullptr; + auto StrVector = [](const QStringList &list) -> std::vector { + std::vector result; + for (const auto &str: list) { + result.push_back(str.toStdString()); + } + return result; + }; + // load online tile providers if (!onlineTileProviders.isEmpty()){ - settings->loadOnlineTileProviders(onlineTileProviders); + settings->loadOnlineTileProviders(StrVector(onlineTileProviders)); } if (!mapProviders.isEmpty()){ - settings->loadMapProviders(mapProviders); + settings->loadMapProviders(StrVector(mapProviders)); } if (!voiceProviders.isEmpty()){ - settings->loadVoiceProviders(voiceProviders); + settings->loadVoiceProviders(StrVector(voiceProviders)); } // setup style sheet @@ -176,6 +184,7 @@ void OSMScoutQt::RegisterQmlTypes(const char *uri, qRegisterMetaType>("std::map"); qRegisterMetaType("MapIcon"); qRegisterMetaType("VoiceProvider"); + qRegisterMetaType("MapProvider"); // register osmscout types for usage in QML qmlRegisterType(uri, versionMajor, versionMinor, "AvailableMapsModel"); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp index 9d5aa1dee..778e510d5 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp @@ -130,31 +130,31 @@ void Settings::SetOnlineTileProviderId(const std::string &id){ } } -bool Settings::loadOnlineTileProviders(const QStringList &paths) +bool Settings::loadOnlineTileProviders(const std::vector &paths) { // load online tile providers bool result = true; for (const auto &path : paths) { std::vector content; - if (!ReadFile(path.toStdString(), content)) { - qWarning() << "Couldn't open" << path << "file."; + if (!ReadFile(path, content)) { + log.Warn() << "Couldn't open" << path << "file."; result = false; continue; } - qDebug() << "Loading online tile providers from " << path; + log.Debug() << "Loading online tile providers from " << path; using json = nlohmann::json; try { auto doc = json::parse(content); if (!doc.is_array()) { - qWarning() << "Json is not array " << QString::fromStdString(doc.dump()); + log.Warn() << "Json is not array " << doc.dump(); result = false; continue; } for (auto obj: doc) { OnlineTileProvider provider = OnlineTileProvider::fromJson(obj); if (!provider.isValid()) { - qWarning() << "Can't parse online provider from json value" << QString::fromStdString(obj.dump()); + log.Warn() << "Can't parse online provider from json value" << obj.dump(); result = false; } else { if (onlineProviderMap.find(provider.getId())==onlineProviderMap.end()) { @@ -164,7 +164,7 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) } } } catch (const json::exception &e) { - qWarning() << "Failed to parse json from" << path << ":" << e.what(); + log.Warn() << "Failed to parse json from" << path << ":" << e.what(); result = false; } } @@ -184,39 +184,39 @@ bool Settings::loadOnlineTileProviders(const QStringList &paths) namespace { // anonymous namespace template -bool loadResourceProviders(const QString &path, std::vector &providers) +bool loadResourceProviders(const std::string &path, std::vector &providers) { std::vector content; - if (!ReadFile(path.toStdString(), content)) { - qWarning() << "Couldn't open" << path << "file."; + if (!ReadFile(path, content)) { + log.Warn() << "Couldn't open " << path << " file."; return false; } - qDebug() << "Loading providers from " << path; + log.Debug() << "Loading providers from " << path; using json = nlohmann::json; try { auto doc = json::parse(content); if (!doc.is_array()) { - qWarning() << "Json is not array " << QString::fromStdString(doc.dump()); + log.Warn() << "Json is not array " << doc.dump(); } else { for (auto obj: doc) { Provider provider = Provider::fromJson(obj); if (!provider.isValid()) { - qWarning() << "Can't parse online provider from json value" << QString::fromStdString(obj.dump()); + log.Warn() << "Can't parse online provider from json value " << obj.dump(); } else { providers.push_back(provider); } } } } catch (const json::exception &e) { - qWarning() << "Failed to parse json from" << path << ":" << e.what(); + log.Warn() << "Failed to parse json from " << path << ": " << e.what(); return false; } return true; } } -bool Settings::loadMapProviders(const QStringList &paths) +bool Settings::loadMapProviders(const std::vector &paths) { bool result = true; for (const auto &path:paths) { @@ -225,7 +225,7 @@ bool Settings::loadMapProviders(const QStringList &paths) return !mapProviders.empty() && result; } -bool Settings::loadVoiceProviders(const QStringList &paths) +bool Settings::loadVoiceProviders(const std::vector &paths) { bool result = true; for (const auto &path:paths) { diff --git a/libosmscout-client/CMakeLists.txt b/libosmscout-client/CMakeLists.txt index 8ac2b4abb..11b5bbc72 100644 --- a/libosmscout-client/CMakeLists.txt +++ b/libosmscout-client/CMakeLists.txt @@ -1,12 +1,14 @@ set(HEADER_FILES include/osmscoutclient/json/json.hpp include/osmscoutclient/json/json_fwd.hpp + include/osmscoutclient/MapProvider.h include/osmscoutclient/ClientImportExport.h include/osmscoutclient/OnlineTileProvider.h include/osmscoutclient/VoiceProvider.h ) set(SOURCE_FILES + src/osmscoutclient/MapProvider.cpp src/osmscoutclient/OnlineTileProvider.cpp src/osmscoutclient/VoiceProvider.cpp ) diff --git a/libosmscout-client/include/meson.build b/libosmscout-client/include/meson.build index c48ce4554..3b39d688c 100644 --- a/libosmscout-client/include/meson.build +++ b/libosmscout-client/include/meson.build @@ -4,6 +4,7 @@ osmscoutclientHeader = [ 'osmscoutclient/json/json.hpp', 'osmscoutclient/json/json_fwd.hpp', 'osmscoutclient/ClientImportExport.h', + 'osmscoutclient/MapProvider.h', 'osmscoutclient/OnlineTileProvider.h', 'osmscoutclient/VoiceProvider.h' ] diff --git a/libosmscout-client-qt/include/osmscoutclientqt/MapProvider.h b/libosmscout-client/include/osmscoutclient/MapProvider.h similarity index 52% rename from libosmscout-client-qt/include/osmscoutclientqt/MapProvider.h rename to libosmscout-client/include/osmscoutclient/MapProvider.h index 3f65af43a..17ddfd16d 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/MapProvider.h +++ b/libosmscout-client/include/osmscoutclient/MapProvider.h @@ -1,8 +1,8 @@ -#ifndef OSMSCOUT_CLIENT_QT_MAPPROVIDER_H -#define OSMSCOUT_CLIENT_QT_MAPPROVIDER_H +#ifndef OSMSCOUT_CLIENT_MAPPROVIDER_H +#define OSMSCOUT_CLIENT_MAPPROVIDER_H /* - OSMScout - a Qt backend for libosmscout and libosmscout-map + This source is part of the libosmscout library Copyright (C) 2016 Lukas Karas This library is free software; you can redistribute it and/or @@ -20,64 +20,57 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include -#include -#include -#include +#include #include +#include + namespace osmscout { /** - * \ingroup QtAPI + * \ingroup ClientAPI */ -class OSMSCOUT_CLIENT_QT_API MapProvider: public QObject +struct OSMSCOUT_CLIENT_API MapProvider { - Q_OBJECT private: bool valid=false; - QString uri; - QString listUri; - QString name; + std::string uri; + std::string listUri; + std::string name; public: MapProvider() = default; + MapProvider(const MapProvider &) = default; + MapProvider(MapProvider &&) = default; - MapProvider(const MapProvider &o): - QObject(o.parent()), - valid(o.valid), uri(o.uri), listUri(o.listUri), name(o.name){}; - - MapProvider(QString name, QString uri, QString listUri): + MapProvider(const std::string &name, const std::string &uri, const std::string &listUri): valid(true), uri(uri), listUri(listUri), name(name) {} - ~MapProvider() override = default; - - MapProvider& operator=(const MapProvider &o) - { - valid = o.valid; - uri = o.uri; - listUri = o.listUri; - name = o.name; + virtual ~MapProvider() = default; - return *this; - } + MapProvider& operator=(const MapProvider &) = default; + MapProvider& operator=(MapProvider &&) = default; - QString getName() const + std::string getName() const { return name; } - QString getUri() const + std::string getUri() const { return uri; } - QUrl getListUri(int fromVersion, int toVersion, QString locale="en") const + std::string getListUri(int fromVersion, int toVersion, std::string locale="en") const { - return listUri.arg(fromVersion).arg(toVersion).arg(locale); + std::string res = listUri; + res=ReplaceString(res, "%1", std::to_string(fromVersion)); + res=ReplaceString(res, "%2", std::to_string(toVersion)); + res=ReplaceString(res, "%3", locale); + return res; } bool isValid() const @@ -90,6 +83,4 @@ class OSMSCOUT_CLIENT_QT_API MapProvider: public QObject } -Q_DECLARE_METATYPE(osmscout::MapProvider) - -#endif // OSMSCOUT_CLIENT_QT_MAPPROVIDER_H +#endif // OSMSCOUT_CLIENT_MAPPROVIDER_H diff --git a/libosmscout-client/src/meson.build b/libosmscout-client/src/meson.build index ae09421ad..b9494029d 100644 --- a/libosmscout-client/src/meson.build +++ b/libosmscout-client/src/meson.build @@ -1,4 +1,5 @@ osmscoutclientSrc = [ + 'src/osmscoutclient/MapProvider.cpp', 'src/osmscoutclient/OnlineTileProvider.cpp', 'src/osmscoutclient/VoiceProvider.cpp' ] diff --git a/libosmscout-client-qt/src/osmscoutclientqt/MapProvider.cpp b/libosmscout-client/src/osmscoutclient/MapProvider.cpp similarity index 82% rename from libosmscout-client-qt/src/osmscoutclientqt/MapProvider.cpp rename to libosmscout-client/src/osmscoutclient/MapProvider.cpp index 09f978c23..b4881c1dc 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/MapProvider.cpp +++ b/libosmscout-client/src/osmscoutclient/MapProvider.cpp @@ -17,7 +17,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include +#include #include @@ -36,8 +36,8 @@ MapProvider MapProvider::fromJson(const nlohmann::json &obj) if (!(name.is_string() && uri.is_string() && listUri.is_string())){ return MapProvider(); } - return MapProvider(QString::fromStdString(name.get()), - QString::fromStdString(uri.get()), - QString::fromStdString(listUri.get())); + return MapProvider(name.get(), + uri.get(), + listUri.get()); } } From b65ee46d3291f4671840235c1387879e32b8b47b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Mon, 10 Jul 2023 00:05:56 +0200 Subject: [PATCH 12/13] remove Qt from Settings class, move it to client library --- OSMScout2/meson.build | 2 +- StyleEditor/meson.build | 2 +- StyleEditor/src/MainWindow.h | 3 +- StyleEditor/src/SettingsDialog.h | 2 +- StyleEditor/src/StyleEditor.cpp | 2 +- Tests/src/HeaderCheck.cpp | 3 ++ libosmscout-client-qt/CMakeLists.txt | 2 - libosmscout-client-qt/include/meson.build | 1 - .../osmscoutclientqt/AvailableMapsModel.h | 3 +- .../include/osmscoutclientqt/DBThread.h | 3 +- .../osmscoutclientqt/InstalledVoicesModel.h | 4 +- .../include/osmscoutclientqt/MapManager.h | 2 +- .../osmscoutclientqt/NavigationModule.h | 3 +- .../osmscoutclientqt/OsmTileDownloader.h | 2 +- .../include/osmscoutclientqt/QmlSettings.h | 2 +- .../osmscoutclientqt/QtSettingsStorage.h | 2 +- .../include/osmscoutclientqt/Router.h | 3 +- libosmscout-client-qt/src/meson.build | 1 - .../osmscoutclientqt/AvailableMapsModel.cpp | 4 +- .../osmscoutclientqt/AvailableVoicesModel.cpp | 3 +- .../src/osmscoutclientqt/FileDownloader.cpp | 3 +- .../src/osmscoutclientqt/OSMScoutQt.cpp | 31 ++++++++++- .../src/osmscoutclientqt/VoiceManager.cpp | 5 +- libosmscout-client/CMakeLists.txt | 2 + libosmscout-client/include/meson.build | 1 + .../include/osmscoutclient}/Settings.h | 37 ++++++++----- libosmscout-client/src/meson.build | 1 + .../src/osmscoutclient}/Settings.cpp | 54 +++---------------- 28 files changed, 98 insertions(+), 85 deletions(-) rename {libosmscout-client-qt/include/osmscoutclientqt => libosmscout-client/include/osmscoutclient}/Settings.h (90%) rename {libosmscout-client-qt/src/osmscoutclientqt => libosmscout-client/src/osmscoutclient}/Settings.cpp (87%) diff --git a/OSMScout2/meson.build b/OSMScout2/meson.build index 34fb06bdc..f41f72386 100644 --- a/OSMScout2/meson.build +++ b/OSMScout2/meson.build @@ -21,6 +21,6 @@ OSMScout2 = executable('OSMScout2', cpp_args: ['-fPIC'], include_directories: [osmscout2IncDir, osmscoutgpxIncDir, osmscoutclientqtIncDir, osmscoutclientIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir], dependencies: [mathDep, openmpDep, qtClientDep], - link_with: [osmscoutgpx, osmscoutclientqt, osmscoutmapqt, osmscoutmap, osmscout], + link_with: [osmscoutgpx, osmscoutclientqt, osmscoutclient, osmscoutmapqt, osmscoutmap, osmscout], install: true) diff --git a/StyleEditor/meson.build b/StyleEditor/meson.build index 0a4f572e4..f4618b614 100644 --- a/StyleEditor/meson.build +++ b/StyleEditor/meson.build @@ -25,5 +25,5 @@ OSMScout2 = executable('StyleEditor', cpp_args: ['-fPIC'], include_directories: [styleeditorIncDir, osmscoutclientqtIncDir, osmscoutclientIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir], dependencies: [mathDep, openmpDep, qtClientDep], - link_with: [osmscoutclientqt, osmscoutmapqt, osmscoutmap, osmscout], + link_with: [osmscoutclientqt, osmscoutclient, osmscoutmapqt, osmscoutmap, osmscout], install: true) diff --git a/StyleEditor/src/MainWindow.h b/StyleEditor/src/MainWindow.h index f1a966698..4ade32d10 100644 --- a/StyleEditor/src/MainWindow.h +++ b/StyleEditor/src/MainWindow.h @@ -22,7 +22,8 @@ #include -#include +#include + #include class MainWindow : public QQmlApplicationEngine diff --git a/StyleEditor/src/SettingsDialog.h b/StyleEditor/src/SettingsDialog.h index 9f5f0504b..ed31d3149 100644 --- a/StyleEditor/src/SettingsDialog.h +++ b/StyleEditor/src/SettingsDialog.h @@ -28,7 +28,7 @@ #include #include */ -#include +#include class SettingsDialog : public QQuickView { diff --git a/StyleEditor/src/StyleEditor.cpp b/StyleEditor/src/StyleEditor.cpp index dbc278ef9..430048ddf 100644 --- a/StyleEditor/src/StyleEditor.cpp +++ b/StyleEditor/src/StyleEditor.cpp @@ -25,7 +25,7 @@ #include // OSMScout library -#include +#include #include // Main Window diff --git a/Tests/src/HeaderCheck.cpp b/Tests/src/HeaderCheck.cpp index 1f1237e79..92bc79924 100644 --- a/Tests/src/HeaderCheck.cpp +++ b/Tests/src/HeaderCheck.cpp @@ -136,6 +136,9 @@ static const std::set allowedDependencies{ "osmscout.navigation => osmscout", // Fix this "osmscoutclient => osmscoutclient.json", + "osmscoutclient => osmscout.async", + "osmscoutclient => osmscout.io", + "osmscoutclient => osmscout.routing", "osmscoutclient => osmscout.util", "osmscoutclientqt => osmscout.system", diff --git a/libosmscout-client-qt/CMakeLists.txt b/libosmscout-client-qt/CMakeLists.txt index dcdc2262e..92ceb4a98 100644 --- a/libosmscout-client-qt/CMakeLists.txt +++ b/libosmscout-client-qt/CMakeLists.txt @@ -22,7 +22,6 @@ set(HEADER_FILES include/osmscoutclientqt/RoutingModel.h include/osmscoutclientqt/Router.h include/osmscoutclientqt/SearchLocationModel.h - include/osmscoutclientqt/Settings.h include/osmscoutclientqt/TileCache.h include/osmscoutclientqt/AvailableMapsModel.h include/osmscoutclientqt/PersistentCookieJar.h @@ -81,7 +80,6 @@ set(SOURCE_FILES src/osmscoutclientqt/RoutingModel.cpp src/osmscoutclientqt/Router.cpp src/osmscoutclientqt/SearchLocationModel.cpp - src/osmscoutclientqt/Settings.cpp src/osmscoutclientqt/TileCache.cpp src/osmscoutclientqt/AvailableMapsModel.cpp src/osmscoutclientqt/MapManager.cpp diff --git a/libosmscout-client-qt/include/meson.build b/libosmscout-client-qt/include/meson.build index 1279d7a0b..b48ce0065 100644 --- a/libosmscout-client-qt/include/meson.build +++ b/libosmscout-client-qt/include/meson.build @@ -22,7 +22,6 @@ osmscoutclientqtHeader = [ 'osmscoutclientqt/OnlineTileProviderModel.h', 'osmscoutclientqt/OpeningHoursModel.h', 'osmscoutclientqt/SearchLocationModel.h', - 'osmscoutclientqt/Settings.h', 'osmscoutclientqt/MapWidget.h', 'osmscoutclientqt/LocationEntry.h', 'osmscoutclientqt/LocationInfoModel.h', diff --git a/libosmscout-client-qt/include/osmscoutclientqt/AvailableMapsModel.h b/libosmscout-client-qt/include/osmscoutclientqt/AvailableMapsModel.h index afc4c6f47..162a6632f 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/AvailableMapsModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/AvailableMapsModel.h @@ -26,8 +26,9 @@ #include #include +#include -#include +#include namespace osmscout { diff --git a/libosmscout-client-qt/include/osmscoutclientqt/DBThread.h b/libosmscout-client-qt/include/osmscoutclientqt/DBThread.h index 3da6030b0..200cf4b06 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/DBThread.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/DBThread.h @@ -36,7 +36,8 @@ #include #include -#include +#include + #include #include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/InstalledVoicesModel.h b/libosmscout-client-qt/include/osmscoutclientqt/InstalledVoicesModel.h index 1368a54a3..313ab69b9 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/InstalledVoicesModel.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/InstalledVoicesModel.h @@ -19,9 +19,11 @@ License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include + #include #include -#include #include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/MapManager.h b/libosmscout-client-qt/include/osmscoutclientqt/MapManager.h index 888566134..127481986 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/MapManager.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/MapManager.h @@ -23,8 +23,8 @@ #include #include +#include -#include #include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/NavigationModule.h b/libosmscout-client-qt/include/osmscoutclientqt/NavigationModule.h index 54f594c20..3f0492901 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/NavigationModule.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/NavigationModule.h @@ -20,8 +20,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include + #include -#include #include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/OsmTileDownloader.h b/libosmscout-client-qt/include/osmscoutclientqt/OsmTileDownloader.h index ec6f278a5..4cd294862 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/OsmTileDownloader.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/OsmTileDownloader.h @@ -29,9 +29,9 @@ #include #include +#include #include -#include namespace osmscout { diff --git a/libosmscout-client-qt/include/osmscoutclientqt/QmlSettings.h b/libosmscout-client-qt/include/osmscoutclientqt/QmlSettings.h index a81d1d3fb..72b5f64c5 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/QmlSettings.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/QmlSettings.h @@ -22,7 +22,7 @@ #include -#include +#include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h b/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h index 3911358f1..0937536e0 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/QtSettingsStorage.h @@ -22,7 +22,7 @@ #include -#include +#include #include #include diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Router.h b/libosmscout-client-qt/include/osmscoutclientqt/Router.h index e4c6f0fb8..d50e0739f 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Router.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/Router.h @@ -30,8 +30,9 @@ #include +#include + #include -#include #include #include #include diff --git a/libosmscout-client-qt/src/meson.build b/libosmscout-client-qt/src/meson.build index d21d1e8f0..694d6507b 100644 --- a/libosmscout-client-qt/src/meson.build +++ b/libosmscout-client-qt/src/meson.build @@ -18,7 +18,6 @@ osmscoutclientqtSrc = [ 'src/osmscoutclientqt/OnlineTileProviderModel.cpp', 'src/osmscoutclientqt/OpeningHoursModel.cpp', 'src/osmscoutclientqt/SearchLocationModel.cpp', - 'src/osmscoutclientqt/Settings.cpp', 'src/osmscoutclientqt/MapWidget.cpp', 'src/osmscoutclientqt/LocationEntry.cpp', 'src/osmscoutclientqt/LocationInfoModel.cpp', diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp index b0b1e595d..d4d3d6d3d 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableMapsModel.cpp @@ -18,6 +18,7 @@ */ #include + #include #include #include @@ -28,6 +29,7 @@ #include #include #include +#include #include @@ -71,7 +73,7 @@ AvailableMapsModel::AvailableMapsModel() mapProviders << provider; } - diskCache.setCacheDirectory(QString::fromStdString(settings->GetHttpCacheDir())); + diskCache.setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QDir::separator() + "OSMScoutHttpCache"); webCtrl.setCache(&diskCache); webCtrl.setCookieJar(new PersistentCookieJar(settings)); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp index 6d87e5e90..f4ee0d721 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/AvailableVoicesModel.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -38,7 +39,7 @@ AvailableVoicesModel::AvailableVoicesModel() voiceProviders << provider; } - diskCache.setCacheDirectory(QString::fromStdString(settings->GetHttpCacheDir())); + diskCache.setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QDir::separator() + "OSMScoutHttpCache"); webCtrl.setCache(&diskCache); webCtrl.setCookieJar(new PersistentCookieJar(settings)); diff --git a/libosmscout-client-qt/src/osmscoutclientqt/FileDownloader.cpp b/libosmscout-client-qt/src/osmscoutclientqt/FileDownloader.cpp index 743af66ba..d785e4cef 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/FileDownloader.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/FileDownloader.cpp @@ -17,8 +17,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include + #include -#include #include #include diff --git a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp index 11504790b..27ba195a3 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/OSMScoutQt.cpp @@ -21,8 +21,9 @@ #include +#include + #include -#include #include #include #include @@ -56,6 +57,8 @@ #include #include #include +#include +#include #include @@ -84,7 +87,31 @@ bool OSMScoutQtBuilder::Init() return false; } - SettingsRef settings=std::make_shared(std::make_shared(settingsStorage)); + /* Warning: Sailfish OS before version 2.0.1 reports incorrect DPI (100) + * + * Some DPI values: + * + * ~ 330 - Jolla tablet native + * 242.236 - Jolla phone native + * 130 - PC (24" FullHD) + * 100 - Qt default (reported by SailfishOS < 2.0.1) + */ + QScreen *srn=QGuiApplication::screens().at(0); + double physicalDpi = (double)srn->physicalDotsPerInch(); + + QLocale locale; + QString defaultUnits; + switch (locale.measurementSystem()){ + case QLocale::ImperialUSSystem: + case QLocale::ImperialUKSystem: + defaultUnits="imperial"; + break; + case QLocale::MetricSystem: + default: + defaultUnits="metrics"; + } + + SettingsRef settings=std::make_shared(std::make_shared(settingsStorage), physicalDpi, defaultUnits.toStdString()); settingsStorage = nullptr; auto StrVector = [](const QStringList &list) -> std::vector { diff --git a/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp b/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp index 948dd6c63..403feafcb 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp +++ b/libosmscout-client-qt/src/osmscoutclientqt/VoiceManager.cpp @@ -18,10 +18,11 @@ */ #include -#include + +#include + #include #include -#include #include #include diff --git a/libosmscout-client/CMakeLists.txt b/libosmscout-client/CMakeLists.txt index 11b5bbc72..f7002f45d 100644 --- a/libosmscout-client/CMakeLists.txt +++ b/libosmscout-client/CMakeLists.txt @@ -4,12 +4,14 @@ set(HEADER_FILES include/osmscoutclient/MapProvider.h include/osmscoutclient/ClientImportExport.h include/osmscoutclient/OnlineTileProvider.h + include/osmscoutclient/Settings.h include/osmscoutclient/VoiceProvider.h ) set(SOURCE_FILES src/osmscoutclient/MapProvider.cpp src/osmscoutclient/OnlineTileProvider.cpp + src/osmscoutclient/Settings.cpp src/osmscoutclient/VoiceProvider.cpp ) diff --git a/libosmscout-client/include/meson.build b/libosmscout-client/include/meson.build index 3b39d688c..bb88e6f05 100644 --- a/libosmscout-client/include/meson.build +++ b/libosmscout-client/include/meson.build @@ -6,6 +6,7 @@ osmscoutclientHeader = [ 'osmscoutclient/ClientImportExport.h', 'osmscoutclient/MapProvider.h', 'osmscoutclient/OnlineTileProvider.h', + 'osmscoutclient/Settings.h', 'osmscoutclient/VoiceProvider.h' ] diff --git a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h b/libosmscout-client/include/osmscoutclient/Settings.h similarity index 90% rename from libosmscout-client-qt/include/osmscoutclientqt/Settings.h rename to libosmscout-client/include/osmscoutclient/Settings.h index ad0acf250..98ae63a74 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/Settings.h +++ b/libosmscout-client/include/osmscoutclient/Settings.h @@ -1,8 +1,8 @@ -#ifndef OSMSCOUT_CLIENT_QT_SETTINGS_H -#define OSMSCOUT_CLIENT_QT_SETTINGS_H +#ifndef OSMSCOUT_CLIENT_SETTINGS_H +#define OSMSCOUT_CLIENT_SETTINGS_H /* - OSMScout - a Qt backend for libosmscout and libosmscout-map + This source is part of the libosmscout library Copyright (C) 2013 Tim Teulings This library is free software; you can redistribute it and/or @@ -20,17 +20,16 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include -#include - #include #include +#include #include #include #include -#include +#include +#include // this variable should be defined by build system #ifndef LIBOSMSCOUT_VERSION_STRING @@ -39,7 +38,12 @@ namespace osmscout { -struct OSMSCOUT_CLIENT_QT_API SettingsStorage +/** + * \ingroup ClientAPI + * + * Abstract settings storage. + */ +struct OSMSCOUT_CLIENT_API SettingsStorage { public: virtual void SetValue(const std::string &key, double d) = 0; @@ -63,7 +67,7 @@ struct OSMSCOUT_CLIENT_QT_API SettingsStorage using SettingsStoragePtr = std::shared_ptr; /** - * \ingroup QtAPI + * \ingroup ClientAPI * * Settings provides central point mutable configuration of OSMScout library. * It uses Qt's QSettings for persistency. It may be accessed from DBThread instance. @@ -76,11 +80,12 @@ using SettingsStoragePtr = std::shared_ptr; * * Before program exit, resources should be released by calling Settings::FreeInstance. */ -class OSMSCOUT_CLIENT_QT_API Settings +class OSMSCOUT_CLIENT_API Settings { private: SettingsStoragePtr storage; - double physicalDpi; + double physicalDpi; + std::string defaultUnits; std::map onlineProviderMap; std::vector onlineProviders; std::vector mapProviders; @@ -103,7 +108,13 @@ class OSMSCOUT_CLIENT_QT_API Settings Signal unitsChanged; public: - explicit Settings(SettingsStoragePtr storage); + /** + * + * @param storage + * @param physicalDpi + * @param defaultUnits - metrics or imperial + */ + Settings(SettingsStoragePtr storage, double physicalDpi, const std::string &defaultUnits); virtual ~Settings() = default; double GetPhysicalDPI() const; @@ -163,8 +174,6 @@ class OSMSCOUT_CLIENT_QT_API Settings bool GetShowAltLanguage() const; void SetShowAltLanguage(bool showAltLanguage); - const std::string GetHttpCacheDir() const; - const std::vector GetCookieData() const; void SetCookieData(const std::vector &data); diff --git a/libosmscout-client/src/meson.build b/libosmscout-client/src/meson.build index b9494029d..e89fe7dcd 100644 --- a/libosmscout-client/src/meson.build +++ b/libosmscout-client/src/meson.build @@ -1,5 +1,6 @@ osmscoutclientSrc = [ 'src/osmscoutclient/MapProvider.cpp', 'src/osmscoutclient/OnlineTileProvider.cpp', + 'src/osmscoutclient/Settings.cpp', 'src/osmscoutclient/VoiceProvider.cpp' ] diff --git a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp b/libosmscout-client/src/osmscoutclient/Settings.cpp similarity index 87% rename from libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp rename to libosmscout-client/src/osmscoutclient/Settings.cpp index 778e510d5..9acee1b2c 100644 --- a/libosmscout-client-qt/src/osmscoutclientqt/Settings.cpp +++ b/libosmscout-client/src/osmscoutclient/Settings.cpp @@ -1,5 +1,5 @@ /* - OSMScout - a Qt backend for libosmscout and libosmscout-map + This source is part of the libosmscout library Copyright (C) 2013 Tim Teulings This library is free software; you can redistribute it and/or @@ -17,37 +17,17 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include -#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include - namespace osmscout { -Settings::Settings(SettingsStoragePtr storage): - storage(storage) +Settings::Settings(SettingsStoragePtr storage, double physicalDpi, const std::string &defaultUnits): + storage(storage), physicalDpi(physicalDpi), defaultUnits(defaultUnits) { - /* Warning: Sailfish OS before version 2.0.1 reports incorrect DPI (100) - * - * Some DPI values: - * - * ~ 330 - Jolla tablet native - * 242.236 - Jolla phone native - * 130 - PC (24" FullHD) - * 100 - Qt default (reported by SailfishOS < 2.0.1) - */ - QScreen *srn=QGuiApplication::screens().at(0); - physicalDpi = (double)srn->physicalDotsPerInch(); + // no code } double Settings::GetPhysicalDPI() const @@ -300,8 +280,7 @@ const std::string Settings::GetStyleSheetFile() const } const std::string Settings::GetStyleSheetAbsoluteFile() const { - return QFileInfo(QString::fromStdString(GetStyleSheetDirectory()), QString::fromStdString(GetStyleSheetFile())) - .absoluteFilePath().toStdString(); + return GetStyleSheetDirectory() + "/" + GetStyleSheetFile(); } void Settings::SetStyleSheetFile(const std::string &file) { @@ -373,12 +352,6 @@ void Settings::SetShowAltLanguage(bool showAltLanguage) } } -const std::string Settings::GetHttpCacheDir() const -{ - QString cacheLocation = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); - return (cacheLocation + QDir::separator() + "OSMScoutHttpCache").toStdString(); -} - const std::vector Settings::GetCookieData() const { return storage->GetBytes("OSMScoutLib/General/Cookies"); @@ -391,18 +364,7 @@ void Settings::SetCookieData(const std::vector &data) std::string Settings::GetUnits() const { - QLocale locale; - QString defaultUnits; - switch (locale.measurementSystem()){ - case QLocale::ImperialUSSystem: - case QLocale::ImperialUKSystem: - defaultUnits="imperial"; - break; - case QLocale::MetricSystem: - default: - defaultUnits="metrics"; - } - return storage->GetString("OSMScoutLib/General/Units", defaultUnits.toStdString()); + return storage->GetString("OSMScoutLib/General/Units", defaultUnits); } void Settings::SetUnits(const std::string &units) From f959c5a1289e68e9cb27ead589dceea512bd3e1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Karas?= Date: Mon, 10 Jul 2023 20:41:08 +0200 Subject: [PATCH 13/13] remove redundant qt metatype registration --- libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h b/libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h index d28902baa..7a6af09d8 100644 --- a/libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h +++ b/libosmscout-client-qt/include/osmscoutclientqt/OSMScoutQt.h @@ -329,7 +329,4 @@ public slots: } -Q_DECLARE_METATYPE(osmscout::TileRef) -Q_DECLARE_METATYPE(osmscout::BreakerRef) - #endif /* OSMSCOUT_CLIENT_QT_OSMSCOUTQT_H */