From c3172c058b845781f1c4e6e3c2d98f2855d74f32 Mon Sep 17 00:00:00 2001 From: luddens Date: Tue, 5 Nov 2019 15:28:43 +0200 Subject: [PATCH] save zoom factor per zim Each time the zoom of a zim is changed, it is saved in the QSettings. The SettingsManager class has new methods that wrap QSettings method : - void setSettings(const QString &key, const QVariant &value); - void deleteSettings(const QString &key); - bool settingsExists(const QString &key); - QVariant getSettings(const QString &key); --- ChangeLog | 1 + src/contentmanager.cpp | 1 + src/settingsmanager.cpp | 34 ++++++++++++++++++++++++++++++++-- src/settingsmanager.h | 7 ++++++- src/tabbar.cpp | 11 ++++++++--- src/webview.cpp | 2 ++ 6 files changed, 50 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 163f353..dd57b1a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,7 @@ kiwix-desktop rc4 * Fix Reading list with bookmarks from missing books * Support video fullscreen mode * Support the default zoom level setting + * Support zoom level per zim kiwix-desktop rc3 ================= diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 08c9e8a..4eff8cb 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -241,6 +241,7 @@ void ContentManager::eraseBook(const QString& id) } else { emit(oneBookChanged(id)); } + KiwixApp::instance()->getSettingsManager()->deleteSettings(id); } void ContentManager::pauseBook(const QString& id) diff --git a/src/settingsmanager.cpp b/src/settingsmanager.cpp index 2b35dbd..d6e5db9 100644 --- a/src/settingsmanager.cpp +++ b/src/settingsmanager.cpp @@ -5,7 +5,7 @@ SettingsManager::SettingsManager(QObject *parent) m_settings("Kiwix", "Kiwix-desktop"), m_settingsViewDisplayed(false) { - setSettings(); + initSettings(); } SettingsManagerView* SettingsManager::getView() @@ -18,6 +18,36 @@ SettingsManagerView* SettingsManager::getView() return view; } +void SettingsManager::setSettings(const QString &key, const QVariant &value) +{ + m_settings.setValue(key, value); +} + +void SettingsManager::deleteSettings(const QString &key) +{ + m_settings.remove(key); +} + +bool SettingsManager::settingsExists(const QString &key) +{ + return m_settings.contains(key); +} + +QVariant SettingsManager::getSettings(const QString &key) +{ + return m_settings.value(key); +} + +qreal SettingsManager::getZoomFactorByZimId(const QString &id) +{ + auto zoomFactor = m_zoomFactor; + QString key = id + "/zoomFactor"; + if (settingsExists(key)) { + zoomFactor = getSettings(key).toDouble(); + } + return zoomFactor; +} + void SettingsManager::setKiwixServerPort(int port) { m_kiwixServerPort = port; @@ -31,7 +61,7 @@ void SettingsManager::setZoomFactor(qreal zoomFactor) m_settings.setValue("view/zoomFactor", zoomFactor); } -void SettingsManager::setSettings() +void SettingsManager::initSettings() { m_kiwixServerPort = m_settings.value("localKiwixServer/port", 8181).toInt(); m_zoomFactor = m_settings.value("view/zoomFactor", 1).toDouble(); diff --git a/src/settingsmanager.h b/src/settingsmanager.h index 3307152..4bac512 100644 --- a/src/settingsmanager.h +++ b/src/settingsmanager.h @@ -17,6 +17,11 @@ public: SettingsManagerView* getView(); bool isSettingsViewdisplayed() { return m_settingsViewDisplayed; }; + void setSettings(const QString &key, const QVariant &value); + void deleteSettings(const QString &key); + bool settingsExists(const QString &key); + QVariant getSettings(const QString &key); + qreal getZoomFactorByZimId(const QString &id); public slots: void setKiwixServerPort(int port); @@ -25,7 +30,7 @@ public slots: qreal getZoomFactor() { return m_zoomFactor; }; private: - void setSettings(); + void initSettings(); signals: void portChanged(int port); diff --git a/src/tabbar.cpp b/src/tabbar.cpp index 0e3faf6..fc8a9ed 100644 --- a/src/tabbar.cpp +++ b/src/tabbar.cpp @@ -46,6 +46,8 @@ TabBar::TabBar(QWidget *parent) : zoomFactor += 0.1; zoomFactor = max(min(zoomFactor, 5.0), 0.25); current->setZoomFactor(zoomFactor); + auto key = this->currentZimId() + "/zoomFactor"; + KiwixApp::instance()->getSettingsManager()->setSettings(key, zoomFactor); }); connect(app->getAction(KiwixApp::ZoomOutAction), &QAction::triggered, this, [=]() { @@ -55,12 +57,17 @@ TabBar::TabBar(QWidget *parent) : zoomFactor -= 0.1; zoomFactor = max(min(zoomFactor, 5.0), 0.25); current->setZoomFactor(zoomFactor); + auto key = this->currentZimId() + "/zoomFactor"; + KiwixApp::instance()->getSettingsManager()->setSettings(key, zoomFactor); }); connect(app->getAction(KiwixApp::ZoomResetAction), &QAction::triggered, this, [=]() { auto current = this->currentWidget(); QUITIFNULL(current); - current->setZoomFactor(1.0); + auto settingsManager = KiwixApp::instance()->getSettingsManager(); + current->setZoomFactor(settingsManager->getZoomFactor()); + auto key = this->currentZimId() + "/zoomFactor"; + settingsManager->deleteSettings(key); }); connect(app->getAction(KiwixApp::OpenHomePageAction), &QAction::triggered, this, [=]() { @@ -170,8 +177,6 @@ void TabBar::openUrl(const QUrl& url, bool newTab) } QUITIFNULL(webView); webView->setUrl(url); - auto zoomFactor = KiwixApp::instance()->getSettingsManager()->getZoomFactor(); - webView->setZoomFactor(zoomFactor); } void TabBar::setTitleOf(const QString& title, WebView* webView) diff --git a/src/webview.cpp b/src/webview.cpp index 2ecf2ea..c70b911 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -54,6 +54,8 @@ void WebView::onUrlChanged(const QUrl& url) { pixmap.loadFromData((const uchar*)favicon.data(), favicon.size()); m_icon = QIcon(pixmap); emit iconChanged(m_icon); + auto zoomFactor = app->getSettingsManager()->getZoomFactorByZimId(zimId); + this->setZoomFactor(zoomFactor); } }