Choice model settings was added
This commit is contained in:
@@ -1,41 +0,0 @@
|
||||
#include "abstractmodel.h"
|
||||
|
||||
#include "services/beerservice.h"
|
||||
|
||||
AbstractModel::AbstractModel(QObject *parent)
|
||||
: QObject{parent}
|
||||
{
|
||||
}
|
||||
|
||||
void AbstractModel::created(const QVariant &data)
|
||||
{
|
||||
modified(data);
|
||||
}
|
||||
|
||||
void AbstractModel::modified(const QVariant &data)
|
||||
{
|
||||
QVariantMap d = data.toMap();
|
||||
m_data[d.value("id").toString()] = d;
|
||||
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
void AbstractModel::deleted(const QVariant &data)
|
||||
{
|
||||
QString id = data.toString();
|
||||
m_data.remove(id);
|
||||
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
void AbstractModel::received(const QVariant &data)
|
||||
{
|
||||
m_data = data.toMap();
|
||||
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
BeerService *AbstractModel::service() const
|
||||
{
|
||||
return BeerService::instance();
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
#ifndef ABSTRACTMODEL_H
|
||||
#define ABSTRACTMODEL_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QVariantMap>
|
||||
|
||||
class BeerService;
|
||||
class AbstractModel : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QString entity READ entity CONSTANT)
|
||||
|
||||
public:
|
||||
explicit AbstractModel(QObject *parent = nullptr);
|
||||
|
||||
virtual QString entity() const = 0;
|
||||
|
||||
public slots:
|
||||
void created(const QVariant &data);
|
||||
void modified(const QVariant &data);
|
||||
void deleted(const QVariant &data);
|
||||
void received(const QVariant &data);
|
||||
|
||||
signals:
|
||||
void dataChanged();
|
||||
|
||||
protected:
|
||||
BeerService *service() const;
|
||||
|
||||
QVariantMap m_data;
|
||||
};
|
||||
|
||||
#endif // ABSTRACTMODEL_H
|
||||
90
models/basemodel.cpp
Normal file
90
models/basemodel.cpp
Normal file
@@ -0,0 +1,90 @@
|
||||
#include "basemodel.h"
|
||||
|
||||
#include "services/beerservice.h"
|
||||
|
||||
BaseModel::BaseModel(const QString &entity, QObject *parent) : QObject{parent},
|
||||
m_entity(entity)
|
||||
{
|
||||
Q_ASSERT(!m_entity.isEmpty());
|
||||
|
||||
service()->connectListener(this);
|
||||
service()->sendCommand(m_entity, BeerService::ActionGet);
|
||||
}
|
||||
|
||||
BaseModel::~BaseModel()
|
||||
{
|
||||
service()->removeListener(this);
|
||||
}
|
||||
|
||||
QString BaseModel::entity() const
|
||||
{
|
||||
return m_entity;
|
||||
}
|
||||
|
||||
QVariantList BaseModel::items() const
|
||||
{
|
||||
return m_data.values();
|
||||
}
|
||||
|
||||
QVariantMap BaseModel::item(const QString &itemId) const
|
||||
{
|
||||
return m_data.value(itemId).toMap();
|
||||
}
|
||||
|
||||
QVariant BaseModel::itemProperty(const QString &itemId, const QString &propertyName, const QVariant &def) const
|
||||
{
|
||||
return item(itemId).value(propertyName, def);
|
||||
}
|
||||
|
||||
void BaseModel::addItem(const QVariantMap &item) const
|
||||
{
|
||||
service()->sendCommand(entity(), BeerService::ActionAdd, item);
|
||||
}
|
||||
|
||||
void BaseModel::deleteItem(const QString &itemId) const
|
||||
{
|
||||
service()->sendCommand(entity(), BeerService::ActionDelete, QVariantMap { { "id", itemId } });
|
||||
}
|
||||
|
||||
void BaseModel::modifyItem(const QString &itemId, const QVariantMap &properties) const
|
||||
{
|
||||
QVariantMap item = this->item(itemId);
|
||||
for (auto it = properties.constBegin(); it != properties.constEnd(); ++it) {
|
||||
item[it.key()] = it.value();
|
||||
}
|
||||
|
||||
service()->sendCommand(entity(), BeerService::ActionModify, item);
|
||||
}
|
||||
|
||||
void BaseModel::created(const QVariant &data)
|
||||
{
|
||||
modified(data);
|
||||
}
|
||||
|
||||
void BaseModel::modified(const QVariant &data)
|
||||
{
|
||||
QVariantMap d = data.toMap();
|
||||
m_data[d.value("id").toString()] = d;
|
||||
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
void BaseModel::deleted(const QVariant &data)
|
||||
{
|
||||
QString id = data.toString();
|
||||
m_data.remove(id);
|
||||
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
void BaseModel::received(const QVariant &data)
|
||||
{
|
||||
m_data = data.toMap();
|
||||
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
BeerService *BaseModel::service() const
|
||||
{
|
||||
return BeerService::instance();
|
||||
}
|
||||
44
models/basemodel.h
Normal file
44
models/basemodel.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef BASEMODEL_H
|
||||
#define BASEMODEL_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QVariantMap>
|
||||
|
||||
class BeerService;
|
||||
class BaseModel : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QString entity READ entity CONSTANT)
|
||||
|
||||
public:
|
||||
explicit BaseModel(const QString &entity, QObject *parent = nullptr);
|
||||
virtual ~BaseModel();
|
||||
|
||||
QString entity() const;
|
||||
|
||||
QVariantList items() const;
|
||||
QVariantMap item(const QString &itemId) const;
|
||||
QVariant itemProperty(const QString &itemId, const QString &propertyName, const QVariant &def = QVariant{}) const;
|
||||
|
||||
void addItem(const QVariantMap &item) const;
|
||||
void deleteItem(const QString &itemId) const;
|
||||
void modifyItem(const QString &itemId, const QVariantMap &properties) const;
|
||||
|
||||
public slots:
|
||||
void created(const QVariant &data);
|
||||
void modified(const QVariant &data);
|
||||
void deleted(const QVariant &data);
|
||||
void received(const QVariant &data);
|
||||
|
||||
signals:
|
||||
void dataChanged();
|
||||
|
||||
private:
|
||||
BeerService *service() const;
|
||||
|
||||
QVariantMap m_data;
|
||||
QString m_entity;
|
||||
};
|
||||
|
||||
#endif // BASEMODEL_H
|
||||
15
models/ordersmodel.cpp
Normal file
15
models/ordersmodel.cpp
Normal file
@@ -0,0 +1,15 @@
|
||||
#include "ordersmodel.h"
|
||||
|
||||
OrdersModel::OrdersModel(QObject *parent) : BaseModel { "orders", parent }
|
||||
{
|
||||
}
|
||||
|
||||
QVariantList OrdersModel::orders() const
|
||||
{
|
||||
return items();
|
||||
}
|
||||
|
||||
void OrdersModel::submitOrder(const QVariantMap &order) const
|
||||
{
|
||||
addItem(order);
|
||||
}
|
||||
17
models/ordersmodel.h
Normal file
17
models/ordersmodel.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef ORDERSMODEL_H
|
||||
#define ORDERSMODEL_H
|
||||
|
||||
#include "basemodel.h"
|
||||
|
||||
class OrdersModel : public BaseModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit OrdersModel(QObject *parent = nullptr);
|
||||
|
||||
QVariantList orders() const;
|
||||
void submitOrder(const QVariantMap &order) const;
|
||||
};
|
||||
|
||||
#endif // ORDERSMODEL_H
|
||||
@@ -1,39 +0,0 @@
|
||||
#include "summarymodel.h"
|
||||
|
||||
QVariantList SummaryModel::items() const
|
||||
{
|
||||
return m_items.values();
|
||||
}
|
||||
|
||||
float SummaryModel::sum() const
|
||||
{
|
||||
float res = 0.0;
|
||||
for (auto it = m_items.constBegin(); it != m_items.constEnd(); ++it) {
|
||||
QVariantMap item = it.value().toMap();
|
||||
int count = item.value("count", 0).toInt();
|
||||
float price = item.value("cost", 0.0).toFloat();
|
||||
res += count * price;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
void SummaryModel::setItemCount(QVariantMap item, int count)
|
||||
{
|
||||
QString id = item.value("id", QString()).toString();
|
||||
|
||||
if (count) {
|
||||
item["count"] = count;
|
||||
m_items[id] = item;
|
||||
} else {
|
||||
m_items.remove(id);
|
||||
}
|
||||
|
||||
emit itemsChanged();
|
||||
}
|
||||
|
||||
void SummaryModel::clear()
|
||||
{
|
||||
m_items.clear();
|
||||
|
||||
emit itemsChanged();
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
#ifndef SUMMARYMODEL_H
|
||||
#define SUMMARYMODEL_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QVariantMap>
|
||||
|
||||
class SummaryModel : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QVariantList items READ items NOTIFY itemsChanged)
|
||||
Q_PROPERTY(float sum READ sum NOTIFY itemsChanged)
|
||||
|
||||
public:
|
||||
QVariantList items() const;
|
||||
float sum() const;
|
||||
|
||||
Q_INVOKABLE void setItemCount(QVariantMap item, int count);
|
||||
Q_INVOKABLE void clear();
|
||||
|
||||
signals:
|
||||
void itemsChanged();
|
||||
|
||||
private:
|
||||
QVariantMap m_items;
|
||||
};
|
||||
|
||||
#endif // SUMMARYMODEL_H
|
||||
@@ -1,24 +1,13 @@
|
||||
#include "usersmodel.h"
|
||||
|
||||
#include "services/beerservice.h"
|
||||
|
||||
namespace Keys {
|
||||
|
||||
constexpr auto Users = "users";
|
||||
constexpr auto Name = "name";
|
||||
|
||||
}
|
||||
|
||||
UsersModel::UsersModel(QObject *parent)
|
||||
: AbstractModel{parent}
|
||||
UsersModel::UsersModel(QObject *parent) : BaseModel{ "users", parent }
|
||||
{
|
||||
service()->connectListener(this);
|
||||
service()->sendCommand(Keys::Users, "get");
|
||||
}
|
||||
|
||||
QString UsersModel::entity() const
|
||||
{
|
||||
return Keys::Users;
|
||||
}
|
||||
|
||||
void UsersModel::connected(const QVariant &data)
|
||||
@@ -33,10 +22,5 @@ void UsersModel::disconnected(const QVariant &data)
|
||||
|
||||
QVariantList UsersModel::users() const
|
||||
{
|
||||
return m_data.values();
|
||||
}
|
||||
|
||||
QString UsersModel::userName(const QString &userId) const
|
||||
{
|
||||
return m_data.value(userId).toMap().value(Keys::Name).toString();
|
||||
return items();
|
||||
}
|
||||
|
||||
@@ -4,19 +4,16 @@
|
||||
#include <QObject>
|
||||
#include <QVariantMap>
|
||||
|
||||
#include "models/abstractmodel.h"
|
||||
#include "models/basemodel.h"
|
||||
|
||||
class UsersModel : public AbstractModel
|
||||
class UsersModel : public BaseModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit UsersModel(QObject *parent = nullptr);
|
||||
|
||||
QString entity() const override;
|
||||
|
||||
QVariantList users() const;
|
||||
QString userName(const QString &userId) const;
|
||||
|
||||
public slots:
|
||||
void connected(const QVariant &data);
|
||||
|
||||
Reference in New Issue
Block a user