-
Notifications
You must be signed in to change notification settings - Fork 0
/
helpers.cpp
102 lines (98 loc) · 3.08 KB
/
helpers.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
#include <QObject>
#include <QVariant>
#include <QVariantMap>
#include <QWebElement>
#include <QStringList>
#include <QScriptValue>
#include <QDebug>
#include <QMetaProperty>
#include <QFileInfo>
extern QString idOf(QScriptValue v) {
QVariant val = v.toVariant();
//qDebug() << "### idOf(" << val.typeName() << ")";
if (val.type() == QMetaType::QVariantMap) {
QVariantMap map = val.toMap();
QString id = map["id"].toString();
return id;
} else {
//qDebug() << "Converting to QString";
return val.toString();
}
}
extern QVariantMap toMap(QWebElement el, QStringList css_attrs) {
QVariantMap map;
map["isNull"] = false;
map["classes"] = QVariant(el.classes());
map["tagName"] = QVariant(el.tagName());
QRect rect = el.geometry();
QVariantMap geo;
geo["width"] = rect.width();
geo["height"] = rect.height();
geo["x"] = rect.x();
geo["y"] = rect.y();
map["geometry"] = QVariant(geo);
QVariantMap attrs;
QStringList attributes = el.attributeNames();
foreach(QString name,attributes) {
attrs[name] = el.attribute(name);
}
map["id"] = "#" + el.attribute("id");
map["attributes"] = QVariant(attrs);
QVariantMap css;
foreach (QString css_attr, css_attrs) {
css[css_attr] = el.styleProperty(css_attr, QWebElement::CascadedStyle);
}
int i = 0;
QVariantMap children;
QWebElementCollection col = el.findAll("*");
for (i = 0; i < col.count(); i++) {
QWebElement cel = col.at(i);
QString name = cel.attribute("id","__NOIDSET");
if (name == "__NOIDSET") {
name = cel.attribute("name", "__NONAMESET");
if (name == "__NONAMESET") {
name = QString::number(i);
}
}
children.insert( name,QVariant( toMap(cel,css_attrs) ) );
}
map["children"] = QVariant(children);
map["css"] = QVariant(css);
return map;
}
extern QVariantMap toMap(QObject * object) {
qDebug() << "Converting " << object;
QVariantMap map;
const QMetaObject * metaobject = object->metaObject();
int count = metaobject->propertyCount();
for (int i = 0; i < count; ++i) {
QMetaProperty metaproperty = metaobject->property(i);
const char * name = metaproperty.name();
QVariant value = object->property(name);
map.insert(name,value);
}
return map;
}
extern QVariantMap toMap(QFileInfo file_info) {
QVariantMap m;
m["name"] = file_info.fileName();
m["path"] = file_info.absoluteFilePath();
m["baseDir"] = file_info.path();
m["isDir"] = file_info.isDir();
m["isExecutable"] = file_info.isExecutable();
m["isHidden"] = file_info.isHidden();
m["isReadable"] = file_info.isReadable();
m["isWritable"] = file_info.isWritable();
m["isSymlink"] = file_info.isSymLink();
m["owner"] = file_info.owner();
m["ownerId"] = file_info.ownerId();
return m;
}
extern QVariantMap toMap(const QRect r) {
QVariantMap m;
m["x"] = r.x();
m["y"] = r.y();
m["width"] = r.width();
m["height"] = r.height();
return m;
}