forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.3 KiB
140 lines
4.3 KiB
/* |
|
optionsmodel.cpp |
|
SPDX-FileCopyrightText: 2021 Han Young <[email protected]> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
#include <KLocalizedString> |
|
|
|
#include "exampleutility.cpp" |
|
#include "formatssettings.h" |
|
#include "optionsmodel.h" |
|
|
|
OptionsModel::OptionsModel(QObject *parent) |
|
: QAbstractListModel(parent) |
|
, m_settings(new FormatsSettings(this)) |
|
{ |
|
m_staticNames = {{{i18n("Region"), QStringLiteral("lang")}, |
|
{i18n("Numbers"), QStringLiteral("numeric")}, |
|
{i18n("Time"), QStringLiteral("time")}, |
|
{i18n("Currency"), QStringLiteral("currency")}, |
|
{i18n("Measurement"), QStringLiteral("measurement")}}}; |
|
connect(m_settings, &FormatsSettings::langChanged, this, &OptionsModel::handleLangChange); |
|
connect(m_settings, &FormatsSettings::numericChanged, this, [this] { |
|
Q_EMIT dataChanged(createIndex(1, 0), createIndex(1, 0), {Subtitle, Example}); |
|
}); |
|
connect(m_settings, &FormatsSettings::timeChanged, this, [this] { |
|
Q_EMIT dataChanged(createIndex(2, 0), createIndex(2, 0), {Subtitle, Example}); |
|
}); |
|
connect(m_settings, &FormatsSettings::monetaryChanged, this, [this] { |
|
Q_EMIT dataChanged(createIndex(3, 0), createIndex(3, 0), {Subtitle, Example}); |
|
}); |
|
connect(m_settings, &FormatsSettings::measurementChanged, this, [this] { |
|
Q_EMIT dataChanged(createIndex(4, 0), createIndex(4, 0), {Subtitle, Example}); |
|
}); |
|
} |
|
int OptionsModel::rowCount(const QModelIndex &parent) const |
|
{ |
|
Q_UNUSED(parent) |
|
return m_staticNames.size(); |
|
} |
|
QVariant OptionsModel::data(const QModelIndex &index, int role) const |
|
{ |
|
const int row = index.row(); |
|
if (row < 0 || row >= (int)m_staticNames.size()) |
|
return QVariant(); |
|
|
|
switch (role) { |
|
case Name: |
|
return m_staticNames[row].first; |
|
case Subtitle: { |
|
switch (row) { |
|
case 0: |
|
return m_settings->lang(); |
|
case 1: |
|
return m_settings->numeric(); |
|
case 2: |
|
return m_settings->time(); |
|
case 3: |
|
return m_settings->monetary(); |
|
case 4: |
|
return m_settings->measurement(); |
|
default: |
|
return QVariant(); |
|
} |
|
} |
|
case Example: { |
|
switch (row) { |
|
case 0: |
|
return QString(); |
|
case 1: |
|
return numberExample(); |
|
case 2: |
|
return timeExample(); |
|
case 3: |
|
return currencyExample(); |
|
case 4: |
|
return measurementExample(); |
|
default: |
|
return QVariant(); |
|
} |
|
} |
|
case Page: |
|
return m_staticNames[row].second; |
|
default: |
|
return QVariant(); |
|
} |
|
} |
|
|
|
QHash<int, QByteArray> OptionsModel::roleNames() const |
|
{ |
|
return {{Name, "name"}, {Subtitle, "localeName"}, {Example, "example"}, {Page, "page"}}; |
|
} |
|
|
|
void OptionsModel::handleLangChange() |
|
{ |
|
Q_EMIT dataChanged(createIndex(0, 0), createIndex(0, 0), {Subtitle, Example}); |
|
|
|
QString defaultVal = i18n("Default"); |
|
if (m_settings->numeric() == defaultVal) { |
|
Q_EMIT dataChanged(createIndex(1, 0), createIndex(1, 0), {Subtitle, Example}); |
|
} |
|
if (m_settings->time() == defaultVal) { |
|
Q_EMIT dataChanged(createIndex(2, 0), createIndex(2, 0), {Subtitle, Example}); |
|
} |
|
if (m_settings->measurement() == defaultVal) { |
|
Q_EMIT dataChanged(createIndex(3, 0), createIndex(3, 0), {Subtitle, Example}); |
|
} |
|
if (m_settings->monetary() == defaultVal) { |
|
Q_EMIT dataChanged(createIndex(4, 0), createIndex(4, 0), {Subtitle, Example}); |
|
} |
|
} |
|
|
|
QString OptionsModel::numberExample() const |
|
{ |
|
return Utility::numericExample(localeWithDefault(m_settings->numeric())); |
|
} |
|
QString OptionsModel::timeExample() const |
|
{ |
|
return Utility::timeExample(localeWithDefault(m_settings->time())); |
|
} |
|
QString OptionsModel::currencyExample() const |
|
{ |
|
return Utility::monetaryExample(localeWithDefault(m_settings->monetary())); |
|
} |
|
QString OptionsModel::measurementExample() const |
|
{ |
|
return Utility::measurementExample(localeWithDefault(m_settings->measurement())); |
|
} |
|
QLocale OptionsModel::localeWithDefault(const QString &val) const |
|
{ |
|
if (val != i18n("Default")) { |
|
return QLocale(val); |
|
} else { |
|
return QLocale(m_settings->lang()); |
|
} |
|
} |
|
FormatsSettings *OptionsModel::settings() const |
|
{ |
|
return m_settings; |
|
}
|
|
|