Using "model/metadata.h" for file and JSON object naming as well. Using all upper case for naming static meta data constants and functions.
This commit is contained in:
@ -26,7 +26,8 @@ QList<QHash<int, QVariant>> JsonParser::toItemValuesList(const QByteArray& jsonD
|
|||||||
QHash<int, QVariant> JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) {
|
QHash<int, QVariant> JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) {
|
||||||
QHash<int, QVariant> values;
|
QHash<int, QVariant> values;
|
||||||
|
|
||||||
// TODO make this more generic (by reading from model meta data)
|
// TODO iterate over "public & editable" roles (the ones that should occur in JSON file)
|
||||||
|
// & use a (static) function to retrieve it (i. e. getRoleValue(int role))
|
||||||
values[NameRole] = itemJsonObject[ROLE_NAMES.value(NameRole)].toString();
|
values[NameRole] = itemJsonObject[ROLE_NAMES.value(NameRole)].toString();
|
||||||
values[DescriptionRole] = itemJsonObject[ROLE_NAMES.value(DescriptionRole)].toString();
|
values[DescriptionRole] = itemJsonObject[ROLE_NAMES.value(DescriptionRole)].toString();
|
||||||
values[InfoRole] = itemJsonObject[ROLE_NAMES.value(InfoRole)].toString();
|
values[InfoRole] = itemJsonObject[ROLE_NAMES.value(InfoRole)].toString();
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
#include "CoreConfig.h"
|
#include "CoreConfig.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "data/filehandler.h"
|
#include "data/filehandler.h"
|
||||||
|
#include "model/metadata.h"
|
||||||
#include "model/tablemodel.h"
|
#include "model/tablemodel.h"
|
||||||
|
|
||||||
#include <QtGui/QUndoStack>
|
#include <QtGui/QUndoStack>
|
||||||
@ -98,7 +99,7 @@ void GenericCore::saveItems() {
|
|||||||
qDebug() << "saving items...";
|
qDebug() << "saving items...";
|
||||||
|
|
||||||
const QJsonDocument doc = m_mainModel->getAllItemsAsJsonDoc();
|
const QJsonDocument doc = m_mainModel->getAllItemsAsJsonDoc();
|
||||||
const bool successfulSave = FileHandler::saveToFile(doc, "items.json");
|
const bool successfulSave = FileHandler::saveToFile(doc, ITEM_FILE_NAME);
|
||||||
if (successfulSave) {
|
if (successfulSave) {
|
||||||
// QStringList completedTaskStrings = m_model->completedTasks();
|
// QStringList completedTaskStrings = m_model->completedTasks();
|
||||||
// appendCompletedTasksToFile(completedTaskStrings, "completed.txt");
|
// appendCompletedTasksToFile(completedTaskStrings, "completed.txt");
|
||||||
@ -122,7 +123,7 @@ void GenericCore::setupModels() {
|
|||||||
*/
|
*/
|
||||||
void GenericCore::initModelData() {
|
void GenericCore::initModelData() {
|
||||||
qInfo() << "Trying to read model data from file...";
|
qInfo() << "Trying to read model data from file...";
|
||||||
const QByteArray jsonDoc = FileHandler::loadJSONDataFromFile("items.json");
|
const QByteArray jsonDoc = FileHandler::loadJSONDataFromFile(ITEM_FILE_NAME);
|
||||||
// qDebug() << "jsonDoc:" << jsonDoc;
|
// qDebug() << "jsonDoc:" << jsonDoc;
|
||||||
// TODO decide on lack of file(s) (config, data) if example items should be generated
|
// TODO decide on lack of file(s) (config, data) if example items should be generated
|
||||||
// (see welcome wizard)
|
// (see welcome wizard)
|
||||||
|
|||||||
@ -6,15 +6,25 @@
|
|||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
/// model data
|
||||||
enum UserRoles { NameRole = Qt::UserRole + 1, DescriptionRole, InfoRole, AmountRole, FactorRole };
|
enum UserRoles { NameRole = Qt::UserRole + 1, DescriptionRole, InfoRole, AmountRole, FactorRole };
|
||||||
static QHash<int, QByteArray> ROLE_NAMES = {{NameRole, "Name"},
|
static QHash<int, QByteArray> ROLE_NAMES = {{NameRole, "Name"},
|
||||||
{DescriptionRole, "Description"},
|
{DescriptionRole, "Description"},
|
||||||
{InfoRole, "Info"},
|
{InfoRole, "Info"},
|
||||||
{AmountRole, "Amount"},
|
{AmountRole, "Amount"},
|
||||||
{FactorRole, "Factor"}};
|
{FactorRole, "Factor"}};
|
||||||
static QList<QString> intColumns = {"Amount", "Factor"};
|
// TODO ? use a data structure containing the type information of each column
|
||||||
|
// ([QString, QString, QString, int, double], {{NameRole, QString},...})
|
||||||
|
// instead of INT_COLUMNS,...
|
||||||
|
static QList<QString> INT_COLUMNS = {"Amount", "Factor"};
|
||||||
|
|
||||||
static int getRoleForColumn(const int column) {
|
/// JSON keys
|
||||||
|
static const QString ITEM_KEY_STRING = "items";
|
||||||
|
|
||||||
|
/// file naming
|
||||||
|
static const QString ITEM_FILE_NAME = ITEM_KEY_STRING + ".json";
|
||||||
|
|
||||||
|
static int GET_ROLE_FOR_COLUMN(const int column) {
|
||||||
switch (column) {
|
switch (column) {
|
||||||
case 0:
|
case 0:
|
||||||
return NameRole;
|
return NameRole;
|
||||||
|
|||||||
@ -28,7 +28,7 @@ QByteArray TableModel::generateExampleItems() {
|
|||||||
|
|
||||||
array.append(itemObject);
|
array.append(itemObject);
|
||||||
}
|
}
|
||||||
rootObject.insert("items", array);
|
rootObject.insert(ITEM_KEY_STRING, array);
|
||||||
|
|
||||||
doc.setObject(rootObject);
|
doc.setObject(rootObject);
|
||||||
return doc.toJson();
|
return doc.toJson();
|
||||||
@ -65,7 +65,7 @@ QVariant TableModel::data(const QModelIndex& index, int role) const {
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
int roleForColumn = getRoleForColumn(column);
|
int roleForColumn = GET_ROLE_FOR_COLUMN(column);
|
||||||
switch (role) {
|
switch (role) {
|
||||||
case Qt::DisplayRole:
|
case Qt::DisplayRole:
|
||||||
case Qt::EditRole:
|
case Qt::EditRole:
|
||||||
@ -84,7 +84,7 @@ QVariant TableModel::data(const QModelIndex& index, int role) const {
|
|||||||
QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const {
|
QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const {
|
||||||
if (role == Qt::DisplayRole) {
|
if (role == Qt::DisplayRole) {
|
||||||
if (orientation == Qt::Horizontal) {
|
if (orientation == Qt::Horizontal) {
|
||||||
const int columnRole = getRoleForColumn(section);
|
const int columnRole = GET_ROLE_FOR_COLUMN(section);
|
||||||
const QString headerName = ROLE_NAMES.value(columnRole);
|
const QString headerName = ROLE_NAMES.value(columnRole);
|
||||||
return QString("%1").arg(headerName);
|
return QString("%1").arg(headerName);
|
||||||
} else {
|
} else {
|
||||||
@ -97,7 +97,7 @@ QVariant TableModel::headerData(int section, Qt::Orientation orientation, int ro
|
|||||||
bool TableModel::setData(const QModelIndex& index, const QVariant& value, int role) {
|
bool TableModel::setData(const QModelIndex& index, const QVariant& value, int role) {
|
||||||
if (role == Qt::EditRole && checkIndex(index)) {
|
if (role == Qt::EditRole && checkIndex(index)) {
|
||||||
const int column = index.column();
|
const int column = index.column();
|
||||||
const int roleForColumn = getRoleForColumn(column);
|
const int roleForColumn = GET_ROLE_FOR_COLUMN(column);
|
||||||
return setItemData(index, {{roleForColumn, value}});
|
return setItemData(index, {{roleForColumn, value}});
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -129,7 +129,7 @@ QJsonDocument TableModel::getAllItemsAsJsonDoc() const {
|
|||||||
QJsonObject itemObject = item->toJsonObject();
|
QJsonObject itemObject = item->toJsonObject();
|
||||||
array.append(itemObject);
|
array.append(itemObject);
|
||||||
}
|
}
|
||||||
rootObject.insert("items", array);
|
rootObject.insert(ITEM_KEY_STRING, array);
|
||||||
|
|
||||||
doc.setObject(rootObject);
|
doc.setObject(rootObject);
|
||||||
return doc;
|
return doc;
|
||||||
@ -167,7 +167,7 @@ void TableModel::insertItems(int startPosition,
|
|||||||
startPosition = m_items.size();
|
startPosition = m_items.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QHash<int, QVariant>> valueList = JsonParser::toItemValuesList(jsonDoc, "items");
|
QList<QHash<int, QVariant>> valueList = JsonParser::toItemValuesList(jsonDoc, ITEM_KEY_STRING);
|
||||||
|
|
||||||
InsertRowsCommand* insertCommand = new InsertRowsCommand(this, startPosition, valueList);
|
InsertRowsCommand* insertCommand = new InsertRowsCommand(this, startPosition, valueList);
|
||||||
m_undoStack->push(insertCommand);
|
m_undoStack->push(insertCommand);
|
||||||
@ -237,7 +237,7 @@ QMap<int, QVariant> TableModel::onlyChangedValues(const QModelIndex& index,
|
|||||||
|
|
||||||
bool TableModel::isEmptyValueEqualToZero(const int role) const {
|
bool TableModel::isEmptyValueEqualToZero(const int role) const {
|
||||||
const QString roleName = ROLE_NAMES.value(role);
|
const QString roleName = ROLE_NAMES.value(role);
|
||||||
if (intColumns.contains(roleName)) {
|
if (INT_COLUMNS.contains(roleName)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user