| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #include "settingsviewmodel.h"
- #include "services/modelsregister.h"
- #include "services/settingsservice.h"
- #include "models/basemodel.h"
- SettingsViewModel::SettingsViewModel(QObject *parent)
- : QAbstractListModel{parent}
- {
- m_items << SettingItem { tr("BeerLog service address"), "serverAddress", "text" }
- << SettingItem { tr("Selected user id"), "selectedUserId", "choice", "users" }
- << SettingItem { tr("Selected store"), "selectedStoreId", "choice", "stores" };
- QModelIndex selectedUserIdIndex = index(1);
- QModelIndex selectedStoreIdIndex = index(2);
- connect(settings(), &SettingsService::selectedUserIdChanged, this, [this, selectedUserIdIndex]() {
- emit dataChanged(selectedUserIdIndex, selectedUserIdIndex);
- });
- connect(settings(), &SettingsService::selectedStoreIdChanged, this, [this, selectedStoreIdIndex]() {
- emit dataChanged(selectedStoreIdIndex, selectedStoreIdIndex);
- });
- }
- int SettingsViewModel::rowCount(const QModelIndex &) const
- {
- return m_items.count();
- }
- QVariant SettingsViewModel::data(const QModelIndex &index, int role) const
- {
- if (!index.isValid()) {
- return {};
- }
- SettingItem item = m_items.at(index.row());
- switch (role) {
- case Roles::Title: return item.title;
- case Roles::Subtitle: return subtitle(item.propertyName, item.modelName);
- case Roles::Value: return settings()->property(item.propertyName.toLocal8Bit());
- case Roles::ControlType: return item.controlType;
- case Roles::Model: return model(item.modelName);
- default:
- break;
- }
- return {};
- }
- QHash<int, QByteArray> SettingsViewModel::roleNames() const
- {
- return QHash<int, QByteArray> {
- { Roles::Title, "title" },
- { Roles::Subtitle, "subtitle" },
- { Roles::Value, "value" },
- { Roles::ControlType, "control" },
- { Roles::Model, "choiceModel" }
- };
- }
- bool SettingsViewModel::setData(const QModelIndex &index, const QVariant &value, int role)
- {
- if (!index.isValid()) {
- return false;
- }
- if (Roles::Value != role) {
- return false;
- }
- SettingItem item = m_items.at(index.row());
- bool res = settings()->setProperty(item.propertyName.toLocal8Bit(), value);
- if (res) {
- emit dataChanged(index, index);
- }
- return res;
- }
- Qt::ItemFlags SettingsViewModel::flags(const QModelIndex &index) const
- {
- return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
- }
- SettingsService *SettingsViewModel::settings() const
- {
- return SettingsService::instance();
- }
- QVariant SettingsViewModel::model(const QString &modelName) const
- {
- BaseModel *model = modelName.isEmpty() ? nullptr : ModelsRegister::model(modelName);
- if (!model) {
- return {};
- }
- return model->items();
- }
- QVariant SettingsViewModel::subtitle(const QString &propertyName, const QString &modelName) const
- {
- BaseModel *model = modelName.isEmpty() ? nullptr : ModelsRegister::model(modelName);
- QVariant propertyValue = settings()->property(propertyName.toLocal8Bit());
- if (model) {
- return model->itemProperty(propertyValue.toString(), "name");
- }
- return propertyValue;
- }
|