|
|
@@ -1,5 +1,10 @@
|
|
|
#include "settingsviewmodel.h"
|
|
|
|
|
|
+#include "services/modelsregister.h"
|
|
|
+#include "services/settingsservice.h"
|
|
|
+
|
|
|
+#include "models/basemodel.h"
|
|
|
+
|
|
|
SettingsViewModel::SettingsViewModel(QObject *parent)
|
|
|
: QAbstractListModel{parent}
|
|
|
{
|
|
|
@@ -7,10 +12,16 @@ SettingsViewModel::SettingsViewModel(QObject *parent)
|
|
|
<< SettingItem { tr("Selected user id"), "selectedUserId", "choice", "users" }
|
|
|
<< SettingItem { tr("Selected store"), "selectedStoreId", "choice", "stores" };
|
|
|
|
|
|
- m_models["users"] = new BaseModel("users", this);
|
|
|
- m_models["stores"] = new BaseModel("stores", this);
|
|
|
-}
|
|
|
+ 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
|
|
|
{
|
|
|
@@ -27,7 +38,8 @@ QVariant SettingsViewModel::data(const QModelIndex &index, int role) const
|
|
|
|
|
|
switch (role) {
|
|
|
case Roles::Title: return item.title;
|
|
|
- case Roles::PropertyName: return item.propertyName;
|
|
|
+ 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:
|
|
|
@@ -41,17 +53,59 @@ QHash<int, QByteArray> SettingsViewModel::roleNames() const
|
|
|
{
|
|
|
return QHash<int, QByteArray> {
|
|
|
{ Roles::Title, "title" },
|
|
|
- { Roles::PropertyName, "name" },
|
|
|
+ { 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
|
|
|
{
|
|
|
- if (!m_models.contains(modelName)) {
|
|
|
+ BaseModel *model = modelName.isEmpty() ? nullptr : ModelsRegister::model(modelName);
|
|
|
+ if (!model) {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
- return m_models[modelName]->items();
|
|
|
+ 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;
|
|
|
}
|