Merge pull request #90 from 0xFEEDC0DE64/88-settings-error-handling
Improve error handling of QSettings saving [#88]
This commit is contained in:
@@ -19,13 +19,28 @@ QString LunchMealSettings::url() const
|
|||||||
return m_settings.value(m_url, m_defaultUrl).toString();
|
return m_settings.value(m_url, m_defaultUrl).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LunchMealSettings::setUrl(const QString &url)
|
bool LunchMealSettings::setUrl(const QString &url)
|
||||||
{
|
{
|
||||||
if(this->url() != url)
|
if(this->url() == url)
|
||||||
{
|
return true;
|
||||||
m_settings.setValue(QStringLiteral("LunchMealPlugin/url"), url);
|
|
||||||
|
if(url == m_defaultUrl)
|
||||||
|
m_settings.remove(m_url);
|
||||||
|
else
|
||||||
|
m_settings.setValue(m_url, url);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT urlChanged(url);
|
Q_EMIT urlChanged(url);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString LunchMealSettings::dateFormat() const
|
QString LunchMealSettings::dateFormat() const
|
||||||
@@ -33,11 +48,26 @@ QString LunchMealSettings::dateFormat() const
|
|||||||
return m_settings.value(m_dateFormat, m_defaultDateFormat).toString();
|
return m_settings.value(m_dateFormat, m_defaultDateFormat).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LunchMealSettings::setDateFormat(const QString &dateFormat)
|
bool LunchMealSettings::setDateFormat(const QString &dateFormat)
|
||||||
{
|
{
|
||||||
if(this->dateFormat() != dateFormat)
|
if(this->dateFormat() == dateFormat)
|
||||||
{
|
return true;
|
||||||
m_settings.setValue(QStringLiteral("LunchMealPlugin/dateFormat"), dateFormat);
|
|
||||||
|
if(dateFormat == m_defaultDateFormat)
|
||||||
|
m_settings.remove(m_dateFormat);
|
||||||
|
else
|
||||||
|
m_settings.setValue(m_dateFormat, dateFormat);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT dateFormatChanged(dateFormat);
|
Q_EMIT dateFormatChanged(dateFormat);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
@@ -16,12 +16,14 @@ public:
|
|||||||
|
|
||||||
// no QString becuase placeholder %0 encodes wrong in urls!
|
// no QString becuase placeholder %0 encodes wrong in urls!
|
||||||
QString url() const;
|
QString url() const;
|
||||||
void setUrl(const QString &url);
|
bool setUrl(const QString &url);
|
||||||
|
|
||||||
QString dateFormat() const;
|
QString dateFormat() const;
|
||||||
void setDateFormat(const QString &dateFormat);
|
bool setDateFormat(const QString &dateFormat);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
void saveErrorOccured();
|
||||||
|
|
||||||
void urlChanged(const QString &url);
|
void urlChanged(const QString &url);
|
||||||
void dateFormatChanged(const QString &dateFormat);
|
void dateFormatChanged(const QString &dateFormat);
|
||||||
|
|
||||||
|
@@ -29,8 +29,8 @@ bool LunchMealSettingsWidget::isValid(QString &message) const
|
|||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LunchMealSettingsWidget::apply()
|
bool LunchMealSettingsWidget::apply()
|
||||||
{
|
{
|
||||||
m_settings.setUrl(m_lineEditUrl->text());
|
return m_settings.setUrl(m_lineEditUrl->text()) &&
|
||||||
m_settings.setDateFormat(m_lineEditDateFormat->text());
|
m_settings.setDateFormat(m_lineEditDateFormat->text());
|
||||||
}
|
}
|
||||||
|
@@ -16,7 +16,7 @@ public:
|
|||||||
virtual bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
virtual bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
virtual void apply() Q_DECL_OVERRIDE;
|
virtual bool apply() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LunchMealSettings m_settings;
|
LunchMealSettings m_settings;
|
||||||
|
@@ -17,11 +17,26 @@ int PresenceSettings::interval() const
|
|||||||
return m_settings.value(m_interval, m_defaultInterval).toInt();
|
return m_settings.value(m_interval, m_defaultInterval).toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PresenceSettings::setInterval(int interval)
|
bool PresenceSettings::setInterval(int interval)
|
||||||
{
|
{
|
||||||
if(this->interval() != interval)
|
if(this->interval() == interval)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
|
if(interval == m_defaultInterval)
|
||||||
|
m_settings.remove(m_interval);
|
||||||
|
else
|
||||||
m_settings.setValue(m_interval, interval);
|
m_settings.setValue(m_interval, interval);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT intervalChanged(interval);
|
Q_EMIT intervalChanged(interval);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
@@ -13,9 +13,11 @@ public:
|
|||||||
PresenceSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR);
|
PresenceSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR);
|
||||||
|
|
||||||
int interval() const;
|
int interval() const;
|
||||||
void setInterval(int interval);
|
bool setInterval(int interval);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
void saveErrorOccured();
|
||||||
|
|
||||||
void intervalChanged(int interval);
|
void intervalChanged(int interval);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@@ -18,13 +18,7 @@ PresenceSettingsWidget::PresenceSettingsWidget(ZeiterfassungSettings &settings,
|
|||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PresenceSettingsWidget::isValid(QString &message) const
|
bool PresenceSettingsWidget::apply()
|
||||||
{
|
{
|
||||||
Q_UNUSED(message)
|
return m_settings.setInterval(m_spinBox->value());
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PresenceSettingsWidget::apply()
|
|
||||||
{
|
|
||||||
m_settings.setInterval(m_spinBox->value());
|
|
||||||
}
|
}
|
||||||
|
@@ -13,10 +13,8 @@ class PresenceSettingsWidget : public SettingsWidget
|
|||||||
public:
|
public:
|
||||||
explicit PresenceSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR);
|
explicit PresenceSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR);
|
||||||
|
|
||||||
virtual bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
virtual void apply() Q_DECL_OVERRIDE;
|
virtual bool apply() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PresenceSettings m_settings;
|
PresenceSettings m_settings;
|
||||||
|
@@ -18,13 +18,28 @@ QUrl UpdaterSettings::url() const
|
|||||||
return m_settings.value(m_url, m_defaultUrl).toUrl();
|
return m_settings.value(m_url, m_defaultUrl).toUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdaterSettings::setUrl(const QUrl &url)
|
bool UpdaterSettings::setUrl(const QUrl &url)
|
||||||
{
|
{
|
||||||
if(this->url() != url)
|
if(this->url() == url)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
|
if(url == m_defaultUrl)
|
||||||
|
m_settings.remove(m_url);
|
||||||
|
else
|
||||||
m_settings.setValue(m_url, url);
|
m_settings.setValue(m_url, url);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT urlChanged(url);
|
Q_EMIT urlChanged(url);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDate UpdaterSettings::lastUpdateCheck() const
|
QDate UpdaterSettings::lastUpdateCheck() const
|
||||||
@@ -32,11 +47,26 @@ QDate UpdaterSettings::lastUpdateCheck() const
|
|||||||
return m_settings.value(m_lastUpdateCheck).toDate();
|
return m_settings.value(m_lastUpdateCheck).toDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdaterSettings::setLastUpdateCheck(const QDate &lastUpdateCheck)
|
bool UpdaterSettings::setLastUpdateCheck(const QDate &lastUpdateCheck)
|
||||||
{
|
{
|
||||||
if(this->lastUpdateCheck() != lastUpdateCheck)
|
if(this->lastUpdateCheck() == lastUpdateCheck)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
|
if(!lastUpdateCheck.isValid())
|
||||||
|
m_settings.remove(m_lastUpdateCheck);
|
||||||
|
else
|
||||||
m_settings.setValue(m_lastUpdateCheck, lastUpdateCheck);
|
m_settings.setValue(m_lastUpdateCheck, lastUpdateCheck);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT lastUpdateCheckChanged(lastUpdateCheck);
|
Q_EMIT lastUpdateCheckChanged(lastUpdateCheck);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
@@ -16,12 +16,14 @@ public:
|
|||||||
explicit UpdaterSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR);
|
explicit UpdaterSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR);
|
||||||
|
|
||||||
QUrl url() const;
|
QUrl url() const;
|
||||||
void setUrl(const QUrl &url);
|
bool setUrl(const QUrl &url);
|
||||||
|
|
||||||
QDate lastUpdateCheck() const;
|
QDate lastUpdateCheck() const;
|
||||||
void setLastUpdateCheck(const QDate &lastUpdateCheck);
|
bool setLastUpdateCheck(const QDate &lastUpdateCheck);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
void saveErrorOccured();
|
||||||
|
|
||||||
void urlChanged(const QUrl &url);
|
void urlChanged(const QUrl &url);
|
||||||
void lastUpdateCheckChanged(const QDate &lastUpdateCheck);
|
void lastUpdateCheckChanged(const QDate &lastUpdateCheck);
|
||||||
|
|
||||||
|
@@ -26,7 +26,7 @@ bool UpdaterSettingsWidget::isValid(QString &message) const
|
|||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdaterSettingsWidget::apply()
|
bool UpdaterSettingsWidget::apply()
|
||||||
{
|
{
|
||||||
m_settings.setUrl(QUrl(m_lineEdit->text()));
|
return m_settings.setUrl(QUrl(m_lineEdit->text()));
|
||||||
}
|
}
|
||||||
|
@@ -16,7 +16,7 @@ public:
|
|||||||
virtual bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
virtual bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
virtual void apply() Q_DECL_OVERRIDE;
|
virtual bool apply() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UpdaterSettings m_settings;
|
UpdaterSettings m_settings;
|
||||||
|
@@ -17,11 +17,26 @@ QUrl WeatherSettings::url() const
|
|||||||
return m_settings.value(m_url, m_defaultUrl).toUrl();
|
return m_settings.value(m_url, m_defaultUrl).toUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WeatherSettings::setUrl(const QUrl &url)
|
bool WeatherSettings::setUrl(const QUrl &url)
|
||||||
{
|
{
|
||||||
if(this->url() != url)
|
if(this->url() == url)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
|
if(url == m_defaultUrl)
|
||||||
|
m_settings.remove(m_url);
|
||||||
|
else
|
||||||
m_settings.setValue(m_url, url);
|
m_settings.setValue(m_url, url);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT urlChanged(url);
|
Q_EMIT urlChanged(url);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
@@ -14,9 +14,11 @@ public:
|
|||||||
WeatherSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR);
|
WeatherSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR);
|
||||||
|
|
||||||
QUrl url() const;
|
QUrl url() const;
|
||||||
void setUrl(const QUrl &url);
|
bool setUrl(const QUrl &url);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
void saveErrorOccured();
|
||||||
|
|
||||||
void urlChanged(const QUrl &url);
|
void urlChanged(const QUrl &url);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@@ -26,7 +26,7 @@ bool WeatherSettingsWidget::isValid(QString &message) const
|
|||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WeatherSettingsWidget::apply()
|
bool WeatherSettingsWidget::apply()
|
||||||
{
|
{
|
||||||
m_settings.setUrl(QUrl::fromUserInput(m_lineEdit->text()));
|
return m_settings.setUrl(QUrl::fromUserInput(m_lineEdit->text()));
|
||||||
}
|
}
|
||||||
|
@@ -20,7 +20,7 @@ public:
|
|||||||
bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void apply() Q_DECL_OVERRIDE;
|
virtual bool apply() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WeatherSettings m_settings;
|
WeatherSettings m_settings;
|
||||||
|
@@ -31,13 +31,28 @@ QStringList WebRadioSettings::urls() const
|
|||||||
return m_settings.value(m_urls, m_defaultUrls).toStringList();
|
return m_settings.value(m_urls, m_defaultUrls).toStringList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebRadioSettings::setUrls(const QStringList &urls)
|
bool WebRadioSettings::setUrls(const QStringList &urls)
|
||||||
{
|
{
|
||||||
if(this->urls() != urls)
|
if(this->urls() == urls)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
|
if(urls == m_defaultUrls)
|
||||||
|
m_settings.remove(m_urls);
|
||||||
|
else
|
||||||
m_settings.setValue(m_urls, urls);
|
m_settings.setValue(m_urls, urls);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT urlsChanged(urls);
|
Q_EMIT urlsChanged(urls);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString WebRadioSettings::lastUrl() const
|
QString WebRadioSettings::lastUrl() const
|
||||||
@@ -45,13 +60,28 @@ QString WebRadioSettings::lastUrl() const
|
|||||||
return m_settings.value(m_lastUrl).toString();
|
return m_settings.value(m_lastUrl).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebRadioSettings::setLastUrl(const QString &lastUrl)
|
bool WebRadioSettings::setLastUrl(const QString &lastUrl)
|
||||||
{
|
{
|
||||||
if(this->lastUrl() != lastUrl)
|
if(this->lastUrl() == lastUrl)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
|
if(lastUrl.isNull())
|
||||||
|
m_settings.remove(m_lastUrl);
|
||||||
|
else
|
||||||
m_settings.setValue(m_lastUrl, lastUrl);
|
m_settings.setValue(m_lastUrl, lastUrl);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT lastUrlChanged(lastUrl);
|
Q_EMIT lastUrlChanged(lastUrl);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
int WebRadioSettings::volume() const
|
int WebRadioSettings::volume() const
|
||||||
@@ -59,11 +89,26 @@ int WebRadioSettings::volume() const
|
|||||||
return m_settings.value(m_volume, m_defaultVolume).toInt();
|
return m_settings.value(m_volume, m_defaultVolume).toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebRadioSettings::setVolume(int volume)
|
bool WebRadioSettings::setVolume(int volume)
|
||||||
{
|
{
|
||||||
if(this->volume() != volume)
|
if(this->volume() == volume)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
|
if(volume == m_defaultVolume)
|
||||||
|
m_settings.remove(m_volume);
|
||||||
|
else
|
||||||
m_settings.setValue(m_volume, volume);
|
m_settings.setValue(m_volume, volume);
|
||||||
|
|
||||||
|
m_settings.sync();
|
||||||
|
|
||||||
|
const auto success = m_settings.status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT volumeChanged(volume);
|
Q_EMIT volumeChanged(volume);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Q_EMIT m_settings.saveErrorOccured();
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
@@ -16,15 +16,17 @@ public:
|
|||||||
WebRadioSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR);
|
WebRadioSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR);
|
||||||
|
|
||||||
QStringList urls() const;
|
QStringList urls() const;
|
||||||
void setUrls(const QStringList &urls);
|
bool setUrls(const QStringList &urls);
|
||||||
|
|
||||||
QString lastUrl() const;
|
QString lastUrl() const;
|
||||||
void setLastUrl(const QString &lastUrl);
|
bool setLastUrl(const QString &lastUrl);
|
||||||
|
|
||||||
int volume() const;
|
int volume() const;
|
||||||
void setVolume(int volume);
|
bool setVolume(int volume);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
void saveErrorOccured();
|
||||||
|
|
||||||
void urlsChanged(const QStringList &urls);
|
void urlsChanged(const QStringList &urls);
|
||||||
void lastUrlChanged(const QString &lastUrl);
|
void lastUrlChanged(const QString &lastUrl);
|
||||||
void volumeChanged(int volume);
|
void volumeChanged(int volume);
|
||||||
|
@@ -31,8 +31,7 @@ bool WebRadioSettingsWidget::isValid(QString &message) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebRadioSettingsWidget::apply()
|
bool WebRadioSettingsWidget::apply()
|
||||||
{
|
{
|
||||||
if(m_urlsWidget->stringList() != m_settings.urls())
|
return m_settings.setUrls(m_urlsWidget->stringList());
|
||||||
m_settings.setUrls(m_urlsWidget->stringList());
|
|
||||||
}
|
}
|
||||||
|
@@ -20,7 +20,7 @@ public:
|
|||||||
bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
bool isValid(QString &message) const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void apply() Q_DECL_OVERRIDE;
|
virtual bool apply() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WebRadioSettings m_settings;
|
WebRadioSettings m_settings;
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
#include "zeiterfassungsettings.h"
|
#include "zeiterfassungsettings.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
const QString ZeiterfassungSettings::m_language("language");
|
const QString ZeiterfassungSettings::m_language("language");
|
||||||
const QString ZeiterfassungSettings::m_url("url");
|
const QString ZeiterfassungSettings::m_url("url");
|
||||||
const QString ZeiterfassungSettings::m_username("username");
|
const QString ZeiterfassungSettings::m_username("username");
|
||||||
@@ -48,16 +50,25 @@ QLocale::Language ZeiterfassungSettings::language() const
|
|||||||
return value(m_language, m_defaultLanguage).value<QLocale::Language>();
|
return value(m_language, m_defaultLanguage).value<QLocale::Language>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setLanguage(QLocale::Language language)
|
bool ZeiterfassungSettings::setLanguage(QLocale::Language language)
|
||||||
{
|
{
|
||||||
if(this->language() != language)
|
if(this->language() == language)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(m_defaultLanguage == language)
|
if(m_defaultLanguage == language)
|
||||||
remove(m_language);
|
remove(m_language);
|
||||||
else
|
else
|
||||||
setValue(m_language, language);
|
setValue(m_language, language);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT languageChanged(language);
|
Q_EMIT languageChanged(language);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
QUrl ZeiterfassungSettings::url() const
|
QUrl ZeiterfassungSettings::url() const
|
||||||
@@ -65,16 +76,25 @@ QUrl ZeiterfassungSettings::url() const
|
|||||||
return value(m_url, m_defaultUrl).toUrl();
|
return value(m_url, m_defaultUrl).toUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setUrl(const QUrl &url)
|
bool ZeiterfassungSettings::setUrl(const QUrl &url)
|
||||||
{
|
{
|
||||||
if(this->url() != url)
|
if(this->url() == url)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(m_defaultUrl == url)
|
if(m_defaultUrl == url)
|
||||||
remove(m_url);
|
remove(m_url);
|
||||||
else
|
else
|
||||||
setValue(m_url, url);
|
setValue(m_url, url);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT urlChanged(url);
|
Q_EMIT urlChanged(url);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ZeiterfassungSettings::username() const
|
QString ZeiterfassungSettings::username() const
|
||||||
@@ -82,16 +102,25 @@ QString ZeiterfassungSettings::username() const
|
|||||||
return value(m_username).toString();
|
return value(m_username).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setUsername(const QString &username)
|
bool ZeiterfassungSettings::setUsername(const QString &username)
|
||||||
{
|
{
|
||||||
if(this->username() != username)
|
if(this->username() == username)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(username.isEmpty())
|
if(username.isEmpty())
|
||||||
remove(m_username);
|
remove(m_username);
|
||||||
else
|
else
|
||||||
setValue(m_username, username);
|
setValue(m_username, username);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT usernameChanged(username);
|
Q_EMIT usernameChanged(username);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ZeiterfassungSettings::password() const
|
QString ZeiterfassungSettings::password() const
|
||||||
@@ -99,16 +128,25 @@ QString ZeiterfassungSettings::password() const
|
|||||||
return value(m_password).toString();
|
return value(m_password).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setPassword(const QString &password)
|
bool ZeiterfassungSettings::setPassword(const QString &password)
|
||||||
{
|
{
|
||||||
if(this->password() != password)
|
if(this->password() == password)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(password.isEmpty())
|
if(password.isEmpty())
|
||||||
remove(m_password);
|
remove(m_password);
|
||||||
else
|
else
|
||||||
setValue(m_password, password);
|
setValue(m_password, password);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT passwordChanged(password);
|
Q_EMIT passwordChanged(password);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList ZeiterfassungSettings::projects() const
|
QStringList ZeiterfassungSettings::projects() const
|
||||||
@@ -116,21 +154,30 @@ QStringList ZeiterfassungSettings::projects() const
|
|||||||
return value(m_projects).toStringList();
|
return value(m_projects).toStringList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setProjects(const QStringList &projects)
|
bool ZeiterfassungSettings::setProjects(const QStringList &projects)
|
||||||
{
|
{
|
||||||
if(this->projects() != projects)
|
if(this->projects() == projects)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(projects.isEmpty())
|
if(projects.isEmpty())
|
||||||
remove(m_projects);
|
remove(m_projects);
|
||||||
else
|
else
|
||||||
setValue(m_projects, projects);
|
setValue(m_projects, projects);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT projectsChanged(projects);
|
Q_EMIT projectsChanged(projects);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::prependProject(const QString &project)
|
bool ZeiterfassungSettings::prependProject(const QString &project)
|
||||||
{
|
{
|
||||||
setProjects(prependItem(projects(), project));
|
return setProjects(prependItem(projects(), project));
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList ZeiterfassungSettings::subprojects() const
|
QStringList ZeiterfassungSettings::subprojects() const
|
||||||
@@ -138,21 +185,30 @@ QStringList ZeiterfassungSettings::subprojects() const
|
|||||||
return value(m_subprojects).toStringList();
|
return value(m_subprojects).toStringList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setSubprojects(const QStringList &subprojects)
|
bool ZeiterfassungSettings::setSubprojects(const QStringList &subprojects)
|
||||||
{
|
{
|
||||||
if(this->subprojects() != subprojects)
|
if(this->subprojects() == subprojects)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(subprojects.isEmpty())
|
if(subprojects.isEmpty())
|
||||||
remove(m_subprojects);
|
remove(m_subprojects);
|
||||||
else
|
else
|
||||||
setValue(m_subprojects, subprojects);
|
setValue(m_subprojects, subprojects);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT subprojectsChanged(subprojects);
|
Q_EMIT subprojectsChanged(subprojects);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::prependSubproject(const QString &subproject)
|
bool ZeiterfassungSettings::prependSubproject(const QString &subproject)
|
||||||
{
|
{
|
||||||
setSubprojects(prependItem(subprojects(), subproject));
|
return setSubprojects(prependItem(subprojects(), subproject));
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList ZeiterfassungSettings::workpackages() const
|
QStringList ZeiterfassungSettings::workpackages() const
|
||||||
@@ -160,21 +216,30 @@ QStringList ZeiterfassungSettings::workpackages() const
|
|||||||
return value(m_workpackages).toStringList();
|
return value(m_workpackages).toStringList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setWorkpackages(const QStringList &workpackages)
|
bool ZeiterfassungSettings::setWorkpackages(const QStringList &workpackages)
|
||||||
{
|
{
|
||||||
if(this->workpackages() != workpackages)
|
if(this->workpackages() == workpackages)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(workpackages.isEmpty())
|
if(workpackages.isEmpty())
|
||||||
remove(m_workpackages);
|
remove(m_workpackages);
|
||||||
else
|
else
|
||||||
setValue(m_workpackages, workpackages);
|
setValue(m_workpackages, workpackages);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT workpackagesChanged(workpackages);
|
Q_EMIT workpackagesChanged(workpackages);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::prependWorkpackage(const QString &workpackage)
|
bool ZeiterfassungSettings::prependWorkpackage(const QString &workpackage)
|
||||||
{
|
{
|
||||||
setWorkpackages(prependItem(workpackages(), workpackage));
|
return setWorkpackages(prependItem(workpackages(), workpackage));
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList ZeiterfassungSettings::texts() const
|
QStringList ZeiterfassungSettings::texts() const
|
||||||
@@ -182,21 +247,30 @@ QStringList ZeiterfassungSettings::texts() const
|
|||||||
return value(m_texts).toStringList();
|
return value(m_texts).toStringList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setTexts(const QStringList &texts)
|
bool ZeiterfassungSettings::setTexts(const QStringList &texts)
|
||||||
{
|
{
|
||||||
if(this->texts() != texts)
|
if(this->texts() == texts)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(m_texts.isEmpty())
|
if(m_texts.isEmpty())
|
||||||
remove(m_texts);
|
remove(m_texts);
|
||||||
else
|
else
|
||||||
setValue(m_texts, texts);
|
setValue(m_texts, texts);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT textsChanged(texts);
|
Q_EMIT textsChanged(texts);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::prependText(const QString &text)
|
bool ZeiterfassungSettings::prependText(const QString &text)
|
||||||
{
|
{
|
||||||
setTexts(prependItem(texts(), text));
|
return setTexts(prependItem(texts(), text));
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ZeiterfassungSettings::theme() const
|
QString ZeiterfassungSettings::theme() const
|
||||||
@@ -204,16 +278,25 @@ QString ZeiterfassungSettings::theme() const
|
|||||||
return value(m_theme).toString();
|
return value(m_theme).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeiterfassungSettings::setTheme(const QString &theme)
|
bool ZeiterfassungSettings::setTheme(const QString &theme)
|
||||||
{
|
{
|
||||||
if(this->theme() != theme)
|
if(this->theme() == theme)
|
||||||
{
|
return true;
|
||||||
|
|
||||||
if(theme.isEmpty())
|
if(theme.isEmpty())
|
||||||
remove(m_theme);
|
remove(m_theme);
|
||||||
else
|
else
|
||||||
setValue(m_theme, theme);
|
setValue(m_theme, theme);
|
||||||
|
|
||||||
|
sync();
|
||||||
|
|
||||||
|
const auto success = status() == QSettings::NoError;
|
||||||
|
if(success)
|
||||||
Q_EMIT themeChanged(theme);
|
Q_EMIT themeChanged(theme);
|
||||||
}
|
else
|
||||||
|
Q_EMIT saveErrorOccured();
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList ZeiterfassungSettings::prependItem(QStringList list, const QString &item)
|
QStringList ZeiterfassungSettings::prependItem(QStringList list, const QString &item)
|
||||||
|
@@ -33,37 +33,39 @@ public:
|
|||||||
explicit ZeiterfassungSettings(QObject *parent = Q_NULLPTR);
|
explicit ZeiterfassungSettings(QObject *parent = Q_NULLPTR);
|
||||||
|
|
||||||
QLocale::Language language() const;
|
QLocale::Language language() const;
|
||||||
void setLanguage(QLocale::Language language);
|
bool setLanguage(QLocale::Language language);
|
||||||
|
|
||||||
QUrl url() const;
|
QUrl url() const;
|
||||||
void setUrl(const QUrl &url);
|
bool setUrl(const QUrl &url);
|
||||||
|
|
||||||
QString username() const;
|
QString username() const;
|
||||||
void setUsername(const QString &username);
|
bool setUsername(const QString &username);
|
||||||
|
|
||||||
QString password() const;
|
QString password() const;
|
||||||
void setPassword(const QString &password);
|
bool setPassword(const QString &password);
|
||||||
|
|
||||||
QStringList projects() const;
|
QStringList projects() const;
|
||||||
void setProjects(const QStringList &projects);
|
bool setProjects(const QStringList &projects);
|
||||||
void prependProject(const QString &project);
|
bool prependProject(const QString &project);
|
||||||
|
|
||||||
QStringList subprojects() const;
|
QStringList subprojects() const;
|
||||||
void setSubprojects(const QStringList &subprojects);
|
bool setSubprojects(const QStringList &subprojects);
|
||||||
void prependSubproject(const QString &subproject);
|
bool prependSubproject(const QString &subproject);
|
||||||
|
|
||||||
QStringList workpackages() const;
|
QStringList workpackages() const;
|
||||||
void setWorkpackages(const QStringList &workpackages);
|
bool setWorkpackages(const QStringList &workpackages);
|
||||||
void prependWorkpackage(const QString &workpackage);
|
bool prependWorkpackage(const QString &workpackage);
|
||||||
|
|
||||||
QStringList texts() const;
|
QStringList texts() const;
|
||||||
void setTexts(const QStringList &texts);
|
bool setTexts(const QStringList &texts);
|
||||||
void prependText(const QString &text);
|
bool prependText(const QString &text);
|
||||||
|
|
||||||
QString theme() const;
|
QString theme() const;
|
||||||
void setTheme(const QString &theme);
|
bool setTheme(const QString &theme);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
void saveErrorOccured();
|
||||||
|
|
||||||
void languageChanged(QLocale::Language language);
|
void languageChanged(QLocale::Language language);
|
||||||
void urlChanged(const QUrl &url);
|
void urlChanged(const QUrl &url);
|
||||||
void usernameChanged(const QString &username);
|
void usernameChanged(const QString &username);
|
||||||
|
@@ -82,7 +82,12 @@ void SettingsDialog::submit()
|
|||||||
|
|
||||||
if(ui->comboBoxLanguage->currentData().value<QLocale::Language>() != m_settings.language())
|
if(ui->comboBoxLanguage->currentData().value<QLocale::Language>() != m_settings.language())
|
||||||
{
|
{
|
||||||
m_settings.setLanguage(ui->comboBoxLanguage->currentData().value<QLocale::Language>());
|
if(!m_settings.setLanguage(ui->comboBoxLanguage->currentData().value<QLocale::Language>()))
|
||||||
|
{
|
||||||
|
errorOccured();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//TODO #73 Allow changing of the language without restart
|
//TODO #73 Allow changing of the language without restart
|
||||||
QMessageBox::information(this, tr("Restart required!"), tr("To apply the new settings a restart is required!"));
|
QMessageBox::information(this, tr("Restart required!"), tr("To apply the new settings a restart is required!"));
|
||||||
}
|
}
|
||||||
@@ -90,9 +95,8 @@ void SettingsDialog::submit()
|
|||||||
auto theme = ui->comboBoxTheme->currentData().toString();
|
auto theme = ui->comboBoxTheme->currentData().toString();
|
||||||
if(theme != m_settings.theme())
|
if(theme != m_settings.theme())
|
||||||
{
|
{
|
||||||
if(theme.isEmpty())
|
QString styleSheet;
|
||||||
qApp->setStyleSheet(QString());
|
if(!theme.isEmpty())
|
||||||
else
|
|
||||||
{
|
{
|
||||||
auto themePath = QDir(QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(QStringLiteral("themes"))).absoluteFilePath(theme);
|
auto themePath = QDir(QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(QStringLiteral("themes"))).absoluteFilePath(theme);
|
||||||
|
|
||||||
@@ -111,14 +115,31 @@ void SettingsDialog::submit()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QTextStream textStream(&file);
|
QTextStream textStream(&file);
|
||||||
qApp->setStyleSheet(textStream.readAll().replace(QStringLiteral("@THEME_RESOURCES@"), themePath));
|
styleSheet = textStream.readAll().replace(QStringLiteral("@THEME_RESOURCES@"), themePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_settings.setTheme(theme);
|
if(!m_settings.setTheme(theme))
|
||||||
|
{
|
||||||
|
errorOccured();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qApp->setStyleSheet(styleSheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(const auto widget : m_settingsWidgets)
|
for(const auto widget : m_settingsWidgets)
|
||||||
widget->apply();
|
{
|
||||||
|
if(!widget->apply())
|
||||||
|
{
|
||||||
|
errorOccured();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
accept();
|
accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsDialog::errorOccured()
|
||||||
|
{
|
||||||
|
QMessageBox::warning(this, tr("Could not save settings!"), tr("Could not load settings!") % "\n\n" % tr("Make sure you have writing permissions!"));
|
||||||
|
}
|
||||||
|
@@ -20,6 +20,8 @@ private Q_SLOTS:
|
|||||||
void submit();
|
void submit();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void errorOccured();
|
||||||
|
|
||||||
Ui::SettingsDialog *ui;
|
Ui::SettingsDialog *ui;
|
||||||
ZeiterfassungSettings &m_settings;
|
ZeiterfassungSettings &m_settings;
|
||||||
QVector<SettingsWidget*> m_settingsWidgets;
|
QVector<SettingsWidget*> m_settingsWidgets;
|
||||||
|
@@ -15,5 +15,5 @@ public:
|
|||||||
virtual bool isValid(QString &message) const { Q_UNUSED(message) return true; }
|
virtual bool isValid(QString &message) const { Q_UNUSED(message) return true; }
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
virtual void apply() { }
|
virtual bool apply() = 0;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user