-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathqmljsonmodel.cpp
104 lines (81 loc) · 2.96 KB
/
qmljsonmodel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "qmljsonmodel.h"
QmlJsonModel::QmlJsonModel(QObject *parent)
: JsonModel{parent}
{
}
QQmlListProperty<QmlJsonModelColumn> QmlJsonModel::qmlColumnList()
{
return QQmlListProperty<QmlJsonModelColumn>(this, nullptr,
&QmlJsonModel::columnList_append,
&QmlJsonModel::columnList_count,
&QmlJsonModel::columnList_at,
&QmlJsonModel::columnList_clear,
&QmlJsonModel::columnList_replace,
&QmlJsonModel::columnList_removeLast);
}
void QmlJsonModel::columnList_append(QQmlListProperty<QmlJsonModelColumn> *property, QmlJsonModelColumn *value)
{
QmlJsonModel *model = static_cast<QmlJsonModel*>(property->object);
// QmlJsonModelColumn *column = qobject_cast<QmlJsonModelColumn*>(value);
if (value){
model->m_qmlColumnList.append(value);
}
}
qsizetype QmlJsonModel::columnList_count(QQmlListProperty<QmlJsonModelColumn> *property)
{
const QmlJsonModel *model = static_cast<QmlJsonModel*>(property->object);
return model->m_qmlColumnList.count();
}
QmlJsonModelColumn *QmlJsonModel::columnList_at(QQmlListProperty<QmlJsonModelColumn> *property, qsizetype index)
{
const QmlJsonModel *model = static_cast<QmlJsonModel*>(property->object);
return model->m_qmlColumnList.at(index);
}
void QmlJsonModel::columnList_clear(QQmlListProperty<QmlJsonModelColumn> *property)
{
QmlJsonModel *model = static_cast<QmlJsonModel*>(property->object);
model->m_qmlColumnList.clear();
model->m_columns.clear();
}
void QmlJsonModel::columnList_replace(QQmlListProperty<QmlJsonModelColumn> *property, qsizetype index, QmlJsonModelColumn *value)
{
QmlJsonModel *model = static_cast<QmlJsonModel*>(property->object);
if (QmlJsonModelColumn *column = qobject_cast<QmlJsonModelColumn*>(value)){
model->m_qmlColumnList.replace(index, column);
model->m_columns.replace(index, *column);
}
}
void QmlJsonModel::columnList_removeLast(QQmlListProperty<QmlJsonModelColumn> *property)
{
QmlJsonModel *model = static_cast<QmlJsonModel*>(property->object);
model->m_qmlColumnList.removeLast();
model->m_columns.removeLast();
}
QVariant QmlJsonModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(orientation==Qt::Vertical)
return QVariant();
if(m_qmlColumnList.size() && section >= m_qmlColumnList.size()){
return QVariant();
}else
if(m_record.count() && section >= m_record.count()){
return QVariant();
}
if(role==Qt::EditRole){
return m_qmlColumnList.size() ? m_qmlColumnList.at(section)->m_accessKey : fieldName(section);
}
if(role==Qt::DisplayRole){
return m_qmlColumnList.size() ? m_qmlColumnList.at(section)->m_displayName : fieldName(section);
}
return QVariant();
}
void QmlJsonModel::classBegin()
{
}
void QmlJsonModel::componentComplete()
{
for(int i=0; i<m_qmlColumnList.size(); i++){
m_columns.append(*m_qmlColumnList.at(i));
}
loadRecord();
}