Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/Application/src/projectio.cpp
3203 views
1
/*****************************************************************************
2
* *
3
* Elmer, A Finite Element Software for Multiphysical Problems *
4
* *
5
* Copyright 1st April 1995 - , CSC - IT Center for Science Ltd., Finland *
6
* *
7
* This program is free software; you can redistribute it and/or *
8
* modify it under the terms of the GNU General Public License *
9
* as published by the Free Software Foundation; either version 2 *
10
* of the License, or (at your option) any later version. *
11
* *
12
* This program is distributed in the hope that it will be useful, *
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15
* GNU General Public License for more details. *
16
* *
17
* You should have received a copy of the GNU General Public License *
18
* along with this program (in file fem/GPL-2); if not, write to the *
19
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *
20
* Boston, MA 02110-1301, USA. *
21
* *
22
*****************************************************************************/
23
24
/*****************************************************************************
25
* *
26
* ElmerGUI projectio *
27
* *
28
*****************************************************************************
29
* *
30
* Authors: Mikko Lyly, Juha Ruokolainen and Peter R�back *
31
* Email: [email protected] *
32
* Web: http://www.csc.fi/elmer *
33
* Address: CSC - IT Center for Science Ltd. *
34
* Keilaranta 14 *
35
* 02101 Espoo, Finland *
36
* *
37
* Original Date: 15 Mar 2008 *
38
* *
39
*****************************************************************************/
40
41
#include <QtGui>
42
#include <iostream>
43
#include "projectio.h"
44
45
#if WITH_QT5 || WITH_QT6
46
#include <QtWidgets>
47
#endif
48
49
using namespace std;
50
51
ProjectIO::ProjectIO(QWidget *parent)
52
: QDialog(parent)
53
{
54
parentWidget = parent;
55
}
56
57
ProjectIO::~ProjectIO()
58
{
59
}
60
61
void ProjectIO::appendToProject(QDomDocument *projectDoc, QDomElement *item)
62
{
63
// Radio buttons:
64
//----------------
65
QList<QRadioButton *> allRadioButtons = parentWidget->findChildren<QRadioButton *>();
66
67
for(int i = 0; i < allRadioButtons.size(); i++) {
68
QRadioButton *rb = allRadioButtons.at(i);
69
70
if(!rb)
71
continue;
72
73
QString rbObjectName = rb->objectName();
74
QString rbValue = QString::number(rb->isChecked());
75
76
if(rbObjectName.isEmpty())
77
continue;
78
79
QDomElement widget = projectDoc->createElement("widget");
80
widget.setAttribute("type", "RadioButton");
81
item->appendChild(widget);
82
83
QDomElement objectName = projectDoc->createElement("objectName");
84
QDomText objectNameValue = projectDoc->createTextNode(rbObjectName);
85
objectName.appendChild(objectNameValue);
86
widget.appendChild(objectName);
87
88
QDomElement isChecked = projectDoc->createElement("isChecked");
89
QDomText isCheckedValue = projectDoc->createTextNode(rbValue);
90
isChecked.appendChild(isCheckedValue);
91
widget.appendChild(isChecked);
92
}
93
94
// Check boxes:
95
//--------------
96
QList<QCheckBox *> allCheckBoxes = parentWidget->findChildren<QCheckBox *>();
97
98
for(int i = 0; i < allCheckBoxes.size(); i++) {
99
QCheckBox *cb = allCheckBoxes.at(i);
100
101
if(!cb)
102
continue;
103
104
QString cbObjectName = cb->objectName();
105
QString cbValue = QString::number(cb->isChecked());
106
107
if(cbObjectName.isEmpty())
108
continue;
109
110
QDomElement widget = projectDoc->createElement("widget");
111
widget.setAttribute("type", "CheckBox");
112
item->appendChild(widget);
113
114
QDomElement objectName = projectDoc->createElement("objectName");
115
QDomText objectNameValue = projectDoc->createTextNode(cbObjectName);
116
objectName.appendChild(objectNameValue);
117
widget.appendChild(objectName);
118
119
QDomElement isChecked = projectDoc->createElement("isChecked");
120
QDomText isCheckedValue = projectDoc->createTextNode(cbValue);
121
isChecked.appendChild(isCheckedValue);
122
widget.appendChild(isChecked);
123
}
124
125
// Line edits:
126
//-------------
127
QList<QLineEdit *> allLineEdits = parentWidget->findChildren<QLineEdit *>();
128
129
for(int i = 0; i < allLineEdits.size(); i++) {
130
QLineEdit *le = allLineEdits.at(i);
131
132
if(!le)
133
continue;
134
135
QString leObjectName = le->objectName();
136
QString leValue = le->text().trimmed();
137
138
if(leObjectName.isEmpty())
139
continue;
140
141
QDomElement widget = projectDoc->createElement("widget");
142
widget.setAttribute("type", "LineEdit");
143
item->appendChild(widget);
144
145
QDomElement objectName = projectDoc->createElement("objectName");
146
QDomText objectNameValue = projectDoc->createTextNode(leObjectName);
147
objectName.appendChild(objectNameValue);
148
widget.appendChild(objectName);
149
150
QDomElement text = projectDoc->createElement("text");
151
QDomText textValue = projectDoc->createTextNode(leValue);
152
text.appendChild(textValue);
153
widget.appendChild(text);
154
}
155
156
// Text edits:
157
//-------------
158
QList<QTextEdit *> allTextEdits = parentWidget->findChildren<QTextEdit *>();
159
160
for(int i = 0; i < allTextEdits.size(); i++) {
161
QTextEdit *te = allTextEdits.at(i);
162
163
if(!te)
164
continue;
165
166
QString teObjectName = te->objectName();
167
QString teValue = te->toPlainText();
168
169
if(teObjectName.isEmpty())
170
continue;
171
172
QDomElement widget = projectDoc->createElement("widget");
173
widget.setAttribute("type", "TextEdit");
174
item->appendChild(widget);
175
176
QDomElement objectName = projectDoc->createElement("objectName");
177
QDomText objectNameValue = projectDoc->createTextNode(teObjectName);
178
objectName.appendChild(objectNameValue);
179
widget.appendChild(objectName);
180
181
QDomElement text = projectDoc->createElement("text");
182
QDomText textValue = projectDoc->createTextNode(teValue);
183
text.appendChild(textValue);
184
widget.appendChild(text);
185
}
186
187
// Combo boxes:
188
//--------------
189
QList<QComboBox *> allComboBoxes = parentWidget->findChildren<QComboBox *>();
190
191
for(int i = 0; i < allComboBoxes.size(); i++) {
192
QComboBox *cx = allComboBoxes.at(i);
193
194
if(!cx)
195
continue;
196
197
QString cxObjectName = cx->objectName();
198
QString cxValue = QString::number(cx->currentIndex());
199
200
if(cxObjectName.isEmpty())
201
continue;
202
203
QDomElement widget = projectDoc->createElement("widget");
204
widget.setAttribute("type", "ComboBox");
205
item->appendChild(widget);
206
207
QDomElement objectName = projectDoc->createElement("objectName");
208
QDomText objectNameValue = projectDoc->createTextNode(cxObjectName);
209
objectName.appendChild(objectNameValue);
210
widget.appendChild(objectName);
211
212
QDomElement currentIndex = projectDoc->createElement("currentIndex");
213
QDomText currentIndexValue = projectDoc->createTextNode(cxValue);
214
currentIndex.appendChild(currentIndexValue);
215
widget.appendChild(currentIndex);
216
}
217
}
218
219
void ProjectIO::readFromProject(QDomDocument *projectDoc, QDomElement *item)
220
{
221
// Radio buttons:
222
//----------------
223
#if WITH_QT5 || WITH_QT6
224
QList<QRadioButton *> allRadioButtons = parentWidget->findChildren<QRadioButton *>(QString());
225
#else
226
QList<QRadioButton *> allRadioButtons = parentWidget->findChildren<QRadioButton *>();
227
#endif
228
229
QList<QString> rbObjectNames;
230
for(int i = 0; i < allRadioButtons.size(); i++)
231
rbObjectNames.append(allRadioButtons.at(i)->objectName());
232
233
QDomElement widget = item->firstChildElement("widget");
234
for( ; !widget.isNull(); widget = widget.nextSiblingElement()) {
235
236
QString type = widget.attribute("type").trimmed();
237
238
if(type != "RadioButton")
239
continue;
240
241
QString objectName = widget.firstChildElement("objectName").text().trimmed();
242
bool isChecked = (widget.firstChildElement("isChecked").text().toInt() > 0);
243
244
if(objectName.isEmpty())
245
continue;
246
247
int index = rbObjectNames.indexOf(objectName);
248
249
if(index < 0) {
250
cout << "Load project: RadioButton: mismatch with object name" << endl;
251
#if WITH_QT5 || WITH_QT6
252
cout << "*** " << string(objectName.toLatin1()) << " ***" << endl;
253
#else
254
cout << "*** " << string(objectName.toAscii()) << " ***" << endl;
255
#endif
256
return;
257
}
258
259
QRadioButton *rb = allRadioButtons.at(index);
260
rb->setChecked(isChecked);
261
}
262
263
// Check boxes:
264
//--------------
265
QList<QCheckBox *> allCheckBoxes = parentWidget->findChildren<QCheckBox *>();
266
267
QList<QString> cbObjectNames;
268
for(int i = 0; i < allCheckBoxes.size(); i++)
269
cbObjectNames.append(allCheckBoxes.at(i)->objectName());
270
271
widget = item->firstChildElement("widget");
272
for( ; !widget.isNull(); widget = widget.nextSiblingElement()) {
273
274
QString type = widget.attribute("type").trimmed();
275
276
if(type != "CheckBox")
277
continue;
278
279
QString objectName = widget.firstChildElement("objectName").text().trimmed();
280
bool isChecked = (widget.firstChildElement("isChecked").text().toInt() > 0);
281
282
if(objectName.isEmpty())
283
continue;
284
285
int index = cbObjectNames.indexOf(objectName);
286
287
if(index < 0) {
288
cout << "Load project: Check box: mismatch with object name" << endl;
289
#if WITH_QT5 || WITH_QT6
290
cout << "*** " << string(objectName.toLatin1()) << " ***" << endl;
291
#else
292
cout << "*** " << string(objectName.toAscii()) << " ***" << endl;
293
#endif
294
return;
295
}
296
297
QCheckBox *cb = allCheckBoxes.at(index);
298
cb->setChecked(isChecked);
299
}
300
301
// Line edits:
302
//-------------
303
QList<QLineEdit *> allLineEdits = parentWidget->findChildren<QLineEdit *>();
304
305
QList<QString> leObjectNames;
306
for(int i = 0; i < allLineEdits.size(); i++)
307
leObjectNames.append(allLineEdits.at(i)->objectName());
308
309
widget = item->firstChildElement("widget");
310
for( ; !widget.isNull(); widget = widget.nextSiblingElement()) {
311
312
QString type = widget.attribute("type").trimmed();
313
314
if(type != "LineEdit")
315
continue;
316
317
QString objectName = widget.firstChildElement("objectName").text().trimmed();
318
QString text = widget.firstChildElement("text").text().trimmed();
319
320
if(objectName.isEmpty())
321
continue;
322
323
int index = leObjectNames.indexOf(objectName);
324
325
if(index < 0) {
326
cout << "Load project: LineEdit: mismatch with object name" << endl;
327
#if WITH_QT5 || WITH_QT6
328
cout << "*** " << string(objectName.toLatin1()) << " ***" << endl;
329
#else
330
cout << "*** " << string(objectName.toAscii()) << " ***" << endl;
331
#endif
332
return;
333
}
334
335
QLineEdit *le = allLineEdits.at(index);
336
le->setText(text);
337
}
338
339
// Text edits:
340
//-------------
341
QList<QTextEdit *> allTextEdits = parentWidget->findChildren<QTextEdit *>();
342
343
QList<QString> teObjectNames;
344
345
for(int i = 0; i < allTextEdits.size(); i++)
346
teObjectNames.append(allTextEdits.at(i)->objectName());
347
348
widget = item->firstChildElement("widget");
349
for( ; !widget.isNull(); widget = widget.nextSiblingElement()) {
350
351
QString type = widget.attribute("type").trimmed();
352
353
if(type != "TextEdit")
354
continue;
355
356
QString objectName = widget.firstChildElement("objectName").text().trimmed();
357
QString text = widget.firstChildElement("text").text().trimmed();
358
359
if(objectName.isEmpty())
360
continue;
361
362
int index = teObjectNames.indexOf(objectName);
363
364
if(index < 0) {
365
cout << "Load project: TextEdit: mismatch with object name" << endl;
366
#if WITH_QT5 || WITH_QT6
367
cout << "*** " << string(objectName.toLatin1()) << " ***" << endl;
368
#else
369
cout << "*** " << string(objectName.toAscii()) << " ***" << endl;
370
#endif
371
return;
372
}
373
374
QTextEdit *te = allTextEdits.at(index);
375
te->clear();
376
te->append(text);
377
}
378
379
// Combo boxes:
380
//--------------
381
#if WITH_QT5 || WITH_QT6
382
QList<QComboBox *> allComboBoxes = parentWidget->findChildren<QComboBox *>(QString());
383
#else
384
QList<QComboBox *> allComboBoxes = parentWidget->findChildren<QComboBox *>();
385
#endif
386
387
QList<QString> cxObjectNames;
388
for(int i = 0; i < allComboBoxes.size(); i++)
389
cxObjectNames.append(allComboBoxes.at(i)->objectName());
390
391
widget = item->firstChildElement("widget");
392
for( ; !widget.isNull(); widget = widget.nextSiblingElement()) {
393
394
QString type = widget.attribute("type").trimmed();
395
396
if(type != "ComboBox")
397
continue;
398
399
QString objectName = widget.firstChildElement("objectName").text().trimmed();
400
int currentIndex = widget.firstChildElement("currentIndex").text().toInt();
401
402
if(objectName.isEmpty())
403
continue;
404
405
int index = cxObjectNames.indexOf(objectName);
406
407
if(index < 0) {
408
cout << "Load project: Combo box: mismatch with object name" << endl;
409
#if WITH_QT5 || WITH_QT6
410
cout << "*** " << string(objectName.toLatin1()) << " ***" << endl;
411
#else
412
cout << "*** " << string(objectName.toAscii()) << " ***" << endl;
413
#endif
414
return;
415
}
416
417
QComboBox *cx = allComboBoxes.at(index);
418
cx->setCurrentIndex(currentIndex);
419
}
420
}
421
422