navit  0.5.3-trunk
proxy.h
Go to the documentation of this file.
1 #ifndef NAVIT_GUI_QML_PROXY_H
2 #define NAVIT_GUI_QML_PROXY_H
3 
4 class NGQStandardItemModel : public QStandardItemModel {
5 public:
6  NGQStandardItemModel(QObject* parent) : QStandardItemModel(parent) {
7  //Populate role list
8  roleNames.insert(NGQStandardItemModel::ItemId, "itemId");
9  roleNames.insert(NGQStandardItemModel::ItemName, "itemName");
10  roleNames.insert(NGQStandardItemModel::ItemIcon, "itemIcon");
11  roleNames.insert(NGQStandardItemModel::ItemPath, "itemPath");
12  roleNames.insert(NGQStandardItemModel::ItemValue, "itemValue");
13  this->setRoleNames(roleNames);
14  }
15 
16  enum listRoles {ItemId=Qt::UserRole+1,ItemName=Qt::UserRole+2,ItemIcon=Qt::UserRole+3,ItemPath=Qt::UserRole+4,ItemValue=Qt::UserRole+5};
17 private:
18  QHash<int, QByteArray> roleNames;
19 };
20 
21 class NGQProxy : public QObject {
22  Q_OBJECT;
23 
24  Q_PROPERTY(int itemId READ itemId NOTIFY itemIdSignal);
25 public:
26  NGQProxy(struct gui_priv* this_,QObject *parent) : QObject(parent) {
27  this->object=this_;
28  }
29 
30 signals:
31  void itemIdSignal(int itemId);
32 
33 public slots:
34  //Attribute read/write
35  QString getAttr(const QString &attr_name) {
36  QString ret;
37  struct attr attr;
38 
39  getAttrFunc(attr_from_name(attr_name.toStdString().c_str()), &attr, NULL);
40  if (ATTR_IS_INT(attr.type)) {
41  ret.setNum(attr.u.num);
42  }
43  if (ATTR_IS_DOUBLE(attr.type)) {
44  ret.setNum(*attr.u.numd);
45  }
46  if (ATTR_IS_STRING(attr.type)) {
47  ret=attr.u.str;
48  }
49  if (attr.type==attr_layout) {
50  ret=attr.u.layout->name;
51  }
52  return ret;
53  }
54  void setAttr(const QString &attr_name, const QString &attr_string) {
55  struct attr attr_value;
56  double *helper;
57 
58  dbg(lvl_debug,"Setting %s to %s",attr_name.toStdString().c_str(),attr_string.toStdString().c_str());
59  getAttrFunc(attr_from_name(attr_name.toStdString().c_str()), &attr_value, NULL);
60 
61  if (ATTR_IS_INT(attr_value.type)) {
62  //Special handling for "true"/"false"
63  if (attr_string=="true") {
64  attr_value.u.num=1;
65  } else if (attr_string=="false") {
66  attr_value.u.num=0;
67  } else {
68  attr_value.u.num=attr_string.toInt();
69  }
70  }
71  if (ATTR_IS_DOUBLE(attr_value.type)) {
72  helper = g_new0(double,1);
73  *helper=attr_string.toDouble();
74  attr_value.u.numd=helper;
75  }
76  if (ATTR_IS_STRING(attr_value.type)) {
77  attr_value.u.str=(char*)attr_string.toStdString().c_str();
78  }
79 
80  setAttrFunc(&attr_value);
81 
82  return;
83  }
84 
85  int itemId() {
86  return _itemId;
87  }
88 protected:
89  struct gui_priv* object;
90 
91  int _itemId;
92 
93  virtual int setAttrFunc(struct attr *attr)=0;
94  virtual int getAttrFunc(enum attr_type type, struct attr *attr, struct attr_iter *iter)=0;
95  virtual struct attr_iter* getIterFunc() { return NULL; };
96  virtual void dropIterFunc(struct attr_iter*) { return; };
97 
98  QDomElement _fieldValueHelper(QDomDocument doc, QString field,QString value) {
99  QDomElement fieldTag=doc.createElement(field);
100  QDomText valueText=doc.createTextNode(value);
101  fieldTag.appendChild(valueText);
102  return fieldTag;
103  }
104 
105 };
106 
107 #include "proxy.moc"
108 
109 #endif /* NAVIT_GUI_QML_PROXY_H */
enum attr_type attr_from_name(const char *name)
Converts a string to an attr_type.
Definition: attr.c:92
#define ATTR_IS_DOUBLE(x)
Definition: attr.h:139
#define ATTR_IS_INT(x)
Definition: attr.h:138
attr_type
Definition: attr.h:34
#define ATTR_IS_STRING(x)
Definition: attr.h:140
Definition: proxy.h:21
int itemId()
Definition: proxy.h:85
virtual struct attr_iter * getIterFunc()
Definition: proxy.h:95
void setAttr(const QString &attr_name, const QString &attr_string)
Definition: proxy.h:54
int itemId
Definition: proxy.h:22
void itemIdSignal(int itemId)
QString getAttr(const QString &attr_name)
Definition: proxy.h:35
struct gui_priv * object
Definition: proxy.h:89
NGQProxy(struct gui_priv *this_, QObject *parent)
Definition: proxy.h:26
virtual int setAttrFunc(struct attr *attr)=0
virtual int getAttrFunc(enum attr_type type, struct attr *attr, struct attr_iter *iter)=0
int _itemId
Definition: proxy.h:91
virtual void dropIterFunc(struct attr_iter *)
Definition: proxy.h:96
QDomElement _fieldValueHelper(QDomDocument doc, QString field, QString value)
Definition: proxy.h:98
Definition: proxy.h:4
NGQStandardItemModel(QObject *parent)
Definition: proxy.h:6
QHash< int, QByteArray > roleNames
Definition: proxy.h:18
listRoles
Definition: proxy.h:16
@ ItemPath
Definition: proxy.h:16
@ ItemName
Definition: proxy.h:16
@ ItemValue
Definition: proxy.h:16
@ ItemIcon
Definition: proxy.h:16
@ ItemId
Definition: proxy.h:16
static GValue value
Definition: datawindow.c:42
@ lvl_debug
Definition: debug.h:52
#define dbg(level,...)
Definition: debug.h:59
char type[3]
Definition: garmin_img.c:2
Definition: config_.c:47
Definition: attr.c:48
Definition: attr.h:157
char * str
Definition: attr.h:160
struct layout * layout
Definition: attr.h:173
double * numd
Definition: attr.h:166
union attr::@0 u
enum attr_type type
Definition: attr.h:158
long num
Definition: attr.h:162
Definition: graphics_win32.h:52
char * name
Definition: layout.h:117
Definition: gpx2navit_txt.h:51