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
104
105
106
107
108
109
|
#ifndef NAVIT_GUI_QML_PROXY_H
#define NAVIT_GUI_QML_PROXY_H
class NGQStandardItemModel : public QStandardItemModel {
public:
NGQStandardItemModel(QObject* parent) : QStandardItemModel(parent) {
//Populate role list
roleNames.insert(NGQStandardItemModel::ItemId, "itemId");
roleNames.insert(NGQStandardItemModel::ItemName, "itemName");
roleNames.insert(NGQStandardItemModel::ItemIcon, "itemIcon");
roleNames.insert(NGQStandardItemModel::ItemPath, "itemPath");
roleNames.insert(NGQStandardItemModel::ItemValue, "itemValue");
this->setRoleNames(roleNames);
}
enum listRoles {ItemId=Qt::UserRole+1,ItemName=Qt::UserRole+2,ItemIcon=Qt::UserRole+3,ItemPath=Qt::UserRole+4,ItemValue=Qt::UserRole+5};
private:
QHash<int, QByteArray> roleNames;
};
class NGQProxy : public QObject {
Q_OBJECT;
Q_PROPERTY(int itemId READ itemId NOTIFY itemIdSignal);
public:
NGQProxy(struct gui_priv* this_,QObject *parent) : QObject(parent) {
this->object=this_;
}
signals:
void itemIdSignal(int itemId);
public slots:
//Attribute read/write
QString getAttr(const QString &attr_name) {
QString ret;
struct attr attr;
getAttrFunc(attr_from_name(attr_name.toStdString().c_str()), &attr, NULL);
if (ATTR_IS_INT(attr.type)) {
ret.setNum(attr.u.num);
}
if (ATTR_IS_DOUBLE(attr.type)) {
ret.setNum(*attr.u.numd);
}
if (ATTR_IS_STRING(attr.type)) {
ret=attr.u.str;
}
if (attr.type==attr_layout) {
ret=attr.u.layout->name;
}
return ret;
}
void setAttr(const QString &attr_name, const QString &attr_string) {
struct attr attr_value;
double *helper;
dbg(1,"Setting %s to %s\n",attr_name.toStdString().c_str(),attr_string.toStdString().c_str());
getAttrFunc(attr_from_name(attr_name.toStdString().c_str()), &attr_value, NULL);
if (ATTR_IS_INT(attr_value.type)) {
//Special handling for "true"/"false"
if (attr_string=="true") {
attr_value.u.num=1;
} else if (attr_string=="false") {
attr_value.u.num=0;
} else {
attr_value.u.num=attr_string.toInt();
}
}
if (ATTR_IS_DOUBLE(attr_value.type)) {
helper = g_new0(double,1);
*helper=attr_string.toDouble();
attr_value.u.numd=helper;
}
if (ATTR_IS_STRING(attr_value.type)) {
attr_value.u.str=(char*)attr_string.toStdString().c_str();
}
setAttrFunc(&attr_value);
return;
}
int itemId() {
return _itemId;
}
protected:
struct gui_priv* object;
int _itemId;
virtual int setAttrFunc(struct attr *attr)=0;
virtual int getAttrFunc(enum attr_type type, struct attr *attr, struct attr_iter *iter)=0;
virtual struct attr_iter* getIterFunc() { return NULL; };
virtual void dropIterFunc(struct attr_iter*) { return; };
QDomElement _fieldValueHelper(QDomDocument doc, QString field,QString value) {
QDomElement fieldTag=doc.createElement(field);
QDomText valueText=doc.createTextNode(value);
fieldTag.appendChild(valueText);
return fieldTag;
}
};
#include "proxy.moc"
#endif /* NAVIT_GUI_QML_PROXY_H */
|