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