libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
pappsojsqml.cpp
Go to the documentation of this file.
1#include "pappsojsqml.h"
2
3namespace pappso
4{
5
6void
7registerQmlTypes(const char *uri, int versionMajor, int versionMinor)
8{
9 Q_UNUSED(uri)
10 Q_UNUSED(versionMajor)
11 Q_UNUSED(versionMinor)
12
13 // Register the namespace meta object
14#if 0
15 // At the moment no need to register namespace pappso as metaobject.
16 qmlRegisterUncreatableMetaObject(staticMetaObject,
17 uri,
18 versionMajor,
19 versionMinor,
20 "Enums",
21 "Cannot create PappsoMS namespace");
22#endif
23 // Register other types here too
24}
25
26// This function needs to be called this way:
27// pappso::registerEnumsToQJSEngine(engine_p)
28// in the program or library linking to this library.
29void
30registerEnumsToQJSEngine(QJSEngine *engine)
31{
32 // qDebug() << "Now registering the Enums:: enums for pappso";
33
34 // Get the meta-object for the namespace (generated by Q_NAMESPACE
35 // as stated right below the Enums namespace at types.h).
36
37 if(engine == nullptr)
38 {
39 qFatal() << "Cannot register class: engine is null";
40 }
41
42 const QMetaObject *metaObject = &Enums::staticMetaObject;
43 // qDebug() << "Namespace Enums with full name:" << metaObject->className();
44
45 QJSValue pappso_root_property;
46
47 if(engine->globalObject().hasProperty("pappso"))
48 {
49 // qDebug() << "Global object property 'pappso' already exists.";
50 pappso_root_property = engine->globalObject().property("pappso");
51 }
52 else
53 {
54 // qDebug() << "Global object property 'pappso' not found.";
55 // Create a JS object for pappso
56 pappso_root_property = engine->newObject();
57 }
58
59 // Create a nested JS object for Enums
60 QJSValue all_js_enums = engine->newObject();
61
62 // Loop through all enums and populate jsEnums
63 for(int i = 0; i < metaObject->enumeratorCount(); ++i)
64 {
65 QMetaEnum iter_meta_enum = metaObject->enumerator(i);
66
67 // qDebug() << "Now iterating in enum:" << iter_meta_enum.enumName();
68
69 QJSValue single_js_enum = engine->newObject();
70
71 for(int j = 0; j < iter_meta_enum.keyCount(); ++j)
72 {
73 // qDebug() << "Now iterating in new key:" << iter_meta_enum.key(j)
74 // << "with value:" << iter_meta_enum.value(j);
75
76 // key() would be "LEFT", with value() = 1
77 single_js_enum.setProperty(iter_meta_enum.key(j),
78 iter_meta_enum.value(j));
79 }
80
81 // name would be CapType
82 all_js_enums.setProperty(iter_meta_enum.enumName(), single_js_enum);
83 }
84
85 // Attach Enums to pappsomspp
86 pappso_root_property.setProperty("Enums", all_js_enums);
87
88 engine->globalObject().setProperty("pappso", pappso_root_property);
89
90#if 0
91
92 qDebug()
93 << "Now checking for correct exposition of Enums::enum::<key/value> pairs.";
94
95 QJSValue jsEnums =
96 engine->globalObject().property("pappso").property("Enums");
97
98 if(jsEnums.isUndefined())
99 {
100 qDebug() << "Error: pappso.Enums not found!";
101 return;
102 }
103 else
104 {
105 qDebug() << "pappso.Enums JS object exists";
106
107 // Get all enum names (properties of the Enums object)
108 QJSValue propNames =
109 engine->evaluate("Object.getOwnPropertyNames(pappso.Enums)");
110
111 if(propNames.isError())
112 {
113 qDebug() << "JS Error:" << propNames.toString();
114 return;
115 }
116
117 // Iterate through each enum
118 const QStringList enumNames = propNames.toVariant().toStringList();
119 for(const QString &enumName : enumNames)
120 {
121 QJSValue jsEnum = jsEnums.property(enumName);
122
123 if(!jsEnum.isObject())
124 {
125 qDebug() << "Skipping non-object property:" << enumName;
126 continue;
127 }
128
129 qDebug() << "\nChecking enum:" << enumName;
130
131 // Get all keys of the iterated enum
132 QJSValue enumKeys = engine->evaluate(
133 QString("Object.getOwnPropertyNames(pappso.Enums.%1)")
134 .arg(enumName));
135
136 if(enumKeys.isError())
137 {
138 qDebug() << " JS Error:" << enumKeys.toString();
139 continue;
140 }
141
142 // Print key-value pairs for the iterated enum
143 const QStringList keys = enumKeys.toVariant().toStringList();
144 for(const QString &key : keys)
145 {
146 QJSValue value = jsEnum.property(key);
147 qDebug() << " " << key << "=" << value.toInt();
148 qDebug().noquote() << "\nChecked enum: " << enumName << "member ("
149 << key << " / " << value.toInt() << ")";
150 }
151 }
152 }
153#endif
154}
155
156
157} // namespace pappso
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39
void registerEnumsToQJSEngine(QJSEngine *engine)
void registerQmlTypes(const char *uri, int versionMajor, int versionMinor)