Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/Application/src/mainwindow.h
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 mainwindow *
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
#ifndef MAINWINDOW_H
42
#define MAINWINDOW_H
43
44
#include <QDomDocument>
45
#include <QMainWindow>
46
#include <QProcess>
47
48
#include "bodypropertyeditor.h"
49
#include "boundarydivision.h"
50
#include "boundarypropertyeditor.h"
51
#include "checkmpi.h"
52
#include "dynamiceditor.h"
53
#include "edfeditor.h"
54
#include "egini.h"
55
#include "generalsetup.h"
56
#include "glcontrol.h"
57
#include "glwidget.h"
58
#include "materiallibrary.h"
59
#include "maxlimits.h"
60
#include "meshcontrol.h"
61
#include "meshingthread.h"
62
#include "meshutils.h"
63
#include "objectbrowser.h"
64
#include "operation.h"
65
#include "parallel.h"
66
#include "plugins/elmergrid_api.h"
67
#include "plugins/nglib_api.h"
68
#include "plugins/tetlib_api.h"
69
#include "sifgenerator.h"
70
#include "sifwindow.h"
71
#include "solverlogwindow.h"
72
#include "summaryeditor.h"
73
#include "twod/twodview.h"
74
75
#ifdef EG_QWT
76
#include "convergenceview.h"
77
#endif
78
79
#if __APPLE__
80
// #ifndef EG_OCC
81
// #define EG_OCC
82
// #endif
83
#endif
84
85
#ifdef EG_OCC
86
#include "cad/cadview.h"
87
#endif
88
89
class QAction;
90
class QMenu;
91
class GLWidget;
92
class QProgressBar;
93
class QSystemTrayIcon;
94
class QContextMenuEvent;
95
96
#ifdef EG_VTK
97
class VtkPost;
98
#endif
99
100
#define MAXPATHLENGTH 600
101
102
class MainWindow : public QMainWindow {
103
Q_OBJECT
104
105
friend class ObjectBrowser;
106
107
public:
108
MainWindow();
109
~MainWindow();
110
111
void parseCmdLine();
112
113
static QVariant settings_value(const QString &key,
114
const QVariant &defaultValue = QVariant());
115
static void settings_setValue(const QString &key, const QVariant &value);
116
void saveAndRun(bool generateSif);
117
void showContextMenu(QPoint);
118
119
protected:
120
void contextMenuEvent(QContextMenuEvent *event);
121
void closeEvent(QCloseEvent *event);
122
123
private slots:
124
// menu slots:
125
void openSlot(); // File -> Open...
126
void loadSlot(); // File -> Load...
127
void loadProjectSlot(); // File -> Load project...
128
void saveSlot(); // File -> Save...
129
void saveAsSlot(); // File -> Save As...
130
void saveProjectSlot(); // File -> Save project
131
void saveProjectAsSlot(); // File -> Save project as...
132
void newProjectSlot(); // File -> New project...
133
void savePictureSlot(); // File -> Save picture as...
134
void grabFrameSlot(); // utility slot
135
void closeMainWindowSlot(); // File -> exit
136
void modelSetupSlot(); // Model -> Setup...
137
void addEquationSlot(); // Model -> Equation...
138
void addMaterialSlot(); // Model -> Material...
139
void addBodyForceSlot(); // Model -> Body force...
140
void addInitialConditionSlot(); // Model -> Initial condition...
141
void addBoundaryConditionSlot(); // Model -> Boundary condition...
142
void bodyEditSlot(); // Model -> Set body properties
143
void bcEditSlot(); // Model -> Set boundary conditions
144
void modelSummarySlot(); // Model -> Summary...
145
void modelClearSlot(); // Model -> Clear
146
void generateSifSlot(); // Edit -> Generate sif
147
void showsifSlot(); // Edit -> Solver input file...
148
void editDefinitionsSlot(); // Edit -> Definitions...
149
void meshcontrolSlot(); // Mesh -> Control...
150
void remeshSlot(); // Mesh -> Remesh
151
void stopMeshingSlot(); // Mesh -> Kill generator
152
void surfaceDivideSlot(); // Mesh -> Divide surface...
153
void surfaceUnifySlot(); // Mesh -> Unify surface
154
void edgeUnifySlot(); // Mesh -> Unify edge
155
void edgeDivideSlot(); // Mesh -> Divide edge...
156
void cleanHangingSharpEdgesSlot(); // Mesh -> Clean up
157
void viewFullScreenSlot(); // View -> Full screen
158
void hidesurfacemeshSlot(); // View -> Surface mesh
159
void hidevolumemeshSlot(); // View -> Volume mesh
160
void hidesharpedgesSlot(); // View -> Sharp edges
161
void viewCoordinatesSlot(); // View -> Coordinates
162
void selectAllSurfacesSlot(); // View -> Select all surfaces
163
void selectAllEdgesSlot(); // View -> Select all edges
164
void selectDefinedEdgesSlot(); // View -> Select defined edges
165
void showSurfaceNumbersSlot(); // View -> Show numbering -> surface numbering
166
void showEdgeNumbersSlot(); // View -> Show numbering -> edge numbering
167
void showNodeNumbersSlot(); // View -> Show numbering -> node numbering
168
void showBoundaryIndexSlot(); // View -> Show numbering -> boundary index
169
void showBodyIndexSlot(); // View -> Show numbering -> body index
170
void glControlSlot(); // View -> Colors -> GL controls
171
void backgroundColorSlot(); // View -> Colors -> Background
172
void surfaceColorSlot(); // View -> Colors -> Surfaces
173
void edgeColorSlot(); // View -> Colors -> Edges
174
void surfaceMeshColorSlot(); // View -> Colors -> Surface mesh
175
void sharpEdgeColorSlot(); // View -> Colors -> Sharp edges
176
void selectionColorSlot(); // View -> Colors -> Selection
177
void colorizeBoundarySlot(); // View -> Colors -> Boundaries
178
void colorizeBodySlot(); // View -> Colors -> Bodies
179
void selectDefinedSurfacesSlot(); // View -> Select defined surfaces
180
void hideselectedSlot(); // View -> Hide/show selected
181
void showallSlot(); // View -> Show all
182
void resetSlot(); // View -> Reset model view
183
void flatShadeSlot(); // View -> Shade model -> flat
184
void smoothShadeSlot(); // View -> Shade model -> smooth
185
void orthoSlot(); // View -> Projection -> Ortho
186
void perspectiveSlot(); // View -> Projection -> Perspective
187
void showCadModelSlot(); // View -> Show cad model...
188
void showTwodViewSlot(); // View -> Show 2D view...
189
void showVtkPostSlot(); // View -> Show VTK post processor...
190
void showParaViewSlot(); // View -> Use ParaView for postprocessing
191
void showObjectBrowserSlot(); // view -> Show Object Browser
192
void parallelSettingsSlot(); // Solver -> Parallel settings
193
void runsolverSlot(); // Solver -> Run solver
194
void killsolverSlot(); // Solver -> Kill solver
195
void showConvergenceSlot(); // Solver -> Show convergence...
196
void resultsSlot(); // Solver -> Post process
197
void killresultsSlot(); // Solver -> Kill post process
198
void compileSolverSlot(); // Solver -> Compile...
199
void showaboutSlot(); // Help -> About...
200
void getStartedSlot(); // Help -> Get Started...
201
void generateAndSaveAndRunSlot();
202
203
// other private slots:
204
void meshingStartedSlot(); // signal emitted by meshingThread
205
void meshingTerminatedSlot(); // signal emitted by meshingThread
206
void meshingFinishedSlot(); // signal emitted by meshingThread
207
208
void boundarySelectedSlot(list_t *, Qt::KeyboardModifiers); // signal emitted by glWidget
209
void doDivideSurfaceSlot(double); // signal emitted by boundaryDivide
210
void doDivideEdgeSlot(double); // signal emitted by boundaryDivide
211
212
void postProcessFinishedSlot(int); // signal emitted by postProcess
213
void paraviewProcessFinishedSlot(int); // signal emitted by paraview
214
215
void solverStdoutSlot(); // solver's stdout redirection
216
void solverStderrSlot(); // solver's stderr redirection
217
void solverFinishedSlot(int); // signal emitted by solver process
218
void solverErrorSlot(QProcess::ProcessError); // solver error signal
219
void solverStateChangedSlot(QProcess::ProcessState); // state changed
220
221
void compilerStdoutSlot(); // compiler's stdout redirection
222
void compilerStderrSlot(); // compiler's stderr redirection
223
void compilerFinishedSlot(int); // signal emitted by compiler
224
225
void meshSplitterStdoutSlot(); // meshSplitter's stdout redirection
226
void meshSplitterStderrSlot(); // meshSplitter's stderr redirection
227
void meshSplitterFinishedSlot(int); // signal emitted by meshSplitter
228
229
void meshUnifierStdoutSlot(); // meshUnifier's stdout redirection
230
void meshUnifierStderrSlot(); // meshUnifier's stderr redirection
231
void meshUnifierFinishedSlot(int); // signal emitted by meshUnifier
232
233
void pdeEditorFinishedSlot(int, int); // signal emitted by pde editor
234
void matEditorFinishedSlot(int, int); // signal emitted by mat editor
235
void bodyForceEditorFinishedSlot(int, int); // signal emitted by bf editor
236
void initialConditionEditorFinishedSlot(int, int); // emitted by ic editor
237
void boundaryConditionEditorFinishedSlot(int, int); // emitted by bc editor
238
239
void equationSelectedSlot(QAction *); // signal emitted by Equation menu
240
void materialSelectedSlot(QAction *); // signal emitted by Material menu
241
void bodyForceSelectedSlot(QAction *); // signal emitted by BodyForce menu
242
void initialConditionSelectedSlot(QAction *); // emitted by ic menu
243
void boundaryConditionSelectedSlot(QAction *); // emitted by bc menu
244
245
void materialComboChanged(BodyPropertyEditor *, QString);
246
void initialComboChanged(BodyPropertyEditor *, QString);
247
void forceComboChanged(BodyPropertyEditor *, QString);
248
void equationComboChanged(BodyPropertyEditor *, QString);
249
void boundaryAsABodyChanged(BoundaryPropertyEditor *, int);
250
void boundaryComboChanged(BoundaryPropertyEditor *, QString);
251
252
void dynamicEditorNameChange(QString);
253
254
void editNumericalMethods(int, int); // signal emitted by dynamic editor
255
void showMaterialLibrary(int, int); // signal emitted by dynamic editor
256
void materialBodyChanged(int);
257
void initialBodyChanged(int);
258
void forceBodyChanged(int);
259
void bcBoundaryChanged(int);
260
void equationBodyChanged(int);
261
262
void viewNormalModeSlot();
263
264
void menuBarTriggeredSlot(QAction *);
265
266
void loadRecentProject0Slot();
267
void loadRecentProject1Slot();
268
void loadRecentProject2Slot();
269
void loadRecentProject3Slot();
270
void loadRecentProject4Slot();
271
void loadRecentProject5Slot();
272
void loadRecentProject6Slot();
273
void loadRecentProject7Slot();
274
void loadRecentProject8Slot();
275
void loadRecentProject9Slot();
276
277
void selectElmerPostSlot();
278
void selectVtkPostSlot();
279
void selectParaViewSlot();
280
281
private:
282
// widgets and helpers:
283
GLWidget *glWidget; // central gl widget
284
SifWindow *sifWindow; // sif text editor
285
MeshControl *meshControl; // mesh generator control
286
BoundaryDivide *boundaryDivide; // boundary division control
287
Meshutils *meshutils; // mesh manipulation utilities
288
MeshingThread *meshingThread; // meshing thread
289
SolverLogWindow *solverLogWindow; // Solver log
290
SifGenerator *sifGenerator; // SIF generator
291
EdfEditor *edfEditor; // Edf editor
292
#ifdef EG_QWT
293
ConvergenceView *convergenceView; // Convergence plotter
294
#endif
295
296
void createActions();
297
void createMenus();
298
void createToolBars();
299
void createStatusBar();
300
void applyOperations();
301
void populateBodyComboBoxes(BodyPropertyEditor *);
302
void populateBoundaryComboBoxes(BoundaryPropertyEditor *);
303
void saveProjectContents(QDomDocument, QString, QVector<DynamicEditor *> &);
304
void loadProjectContents(QDomElement, QVector<DynamicEditor *> &, QString);
305
QString getDefaultDirName();
306
void loadProject(QString);
307
bool saveProject(QString);
308
void loadSettings();
309
void saveSettings();
310
bool loadExtraSolver(
311
QString); // load the solver with specified solver name, Nov 2019 by TS
312
void checkAndLoadExtraSolvers(QFile *);
313
314
QMenu *fileMenu; // File menu
315
QMenu *recentProjectsMenu; // File -> Recent projects menu
316
QMenu *modelMenu; // Model menu
317
QMenu *equationMenu; // Model -> Equation menu
318
QMenu *materialMenu; // Model -> Material menu
319
QMenu *bodyForceMenu; // Model -> Body force...
320
QMenu *initialConditionMenu; // Model -> Initial condition...
321
QMenu *boundaryConditionMenu; // Model -> Boundary condition...
322
QMenu *editMenu; // Edit menu
323
QMenu *viewMenu; // View menu
324
QMenu *shadeMenu; // View -> Shade model menu
325
QMenu *projectionMenu; // View -> Projection menu
326
QMenu *numberingMenu; // View -> Show numbering menu
327
QMenu *colorizeMenu; // View -> Colors menu
328
QMenu *meshMenu; // Mesh menu
329
QMenu *solverMenu; // Solver menu
330
QMenu *helpMenu; // Help menu
331
QMenu *sysTrayMenu; // System tray menu
332
QMenu *contextMenu; // Context menu
333
QMenu *selectPostMenu;
334
335
QToolBar *fileToolBar; // File toolbar
336
QToolBar *editToolBar; // Edit toolbar
337
QToolBar *meshToolBar; // Mesh toolbar
338
QToolBar *solverToolBar; // Solver toolbar
339
340
QAction *openAct; // File -> Open...
341
QAction *loadAct; // File -> Load...
342
QAction *loadProjectAct; // File -> Load project....
343
QAction *newProjectAct; // File -> New Project...
344
QAction *recentProject0Act;
345
QAction *recentProject1Act;
346
QAction *recentProject2Act;
347
QAction *recentProject3Act;
348
QAction *recentProject4Act;
349
QAction *recentProject5Act;
350
QAction *recentProject6Act;
351
QAction *recentProject7Act;
352
QAction *recentProject8Act;
353
QAction *recentProject9Act;
354
QAction *saveAct; // File -> Save...
355
QAction *saveAsAct; // File -> Save As...
356
QAction *saveProjectAct; // File -> Save project
357
QAction *saveProjectAsAct; // File -> Save project as...
358
QAction *savePictureAct; // File -> Save picture as...
359
QAction *exitAct; // File -> Exit
360
QAction *modelSetupAct; // Model -> Setup...
361
QAction *addEquationAct; // Model -> Equation...
362
QAction *addMaterialAct; // Model -> Material...
363
QAction *addBodyForceAct; // Model -> Body force...
364
QAction *addInitialConditionAct; // Model -> Initial condition...
365
QAction *addBoundaryConditionAct; // Model -> Boundary condition...
366
QAction *bodyEditAct; // Model -> Set body properties
367
QAction *bcEditAct; // Model -> Set boundary conditions
368
QAction *modelSummaryAct; // Model -> Summary...
369
QAction *modelClearAct; // Model -> Clear
370
QAction *generateSifAct; // Edit -> Generate sif
371
QAction *showsifAct; // Edit -> Edit SIF...
372
QAction *editDefinitionsAct; // Edit -> Edit SIF...
373
QAction *viewFullScreenAct; // View -> Full screen
374
QAction *hidesurfacemeshAct; // View -> Show surface mesh
375
QAction *hidevolumemeshAct; // View -> Show volume mesh
376
QAction *hidesharpedgesAct; // View -> Show sharp edges
377
QAction *viewCoordinatesAct; // View -> Show sharp edges
378
QAction *selectAllSurfacesAct; // View -> Select all surfaces
379
QAction *selectAllEdgesAct; // View -> Select all edges
380
QAction *selectDefinedEdgesAct; // View -> Select defined edges
381
QAction *selectDefinedSurfacesAct; // View -> Select defined surfaces
382
QAction *showSurfaceNumbersAct; // View -> Show numbering -> element numbers
383
QAction *showEdgeNumbersAct; // View -> Show numbering -> edge numbers
384
QAction *showNodeNumbersAct; // View -> Show numbering -> node numbers
385
QAction *showBoundaryIndexAct; // View -> Show numbering -> boundary index
386
QAction *showBodyIndexAct; // View -> Show numbering -> body index
387
QAction *glControlAct; // View -> Colors -> GL controls
388
QAction *chooseBGColorAct; // View -> Colors -> Background color
389
QAction *chooseSurfaceColorAct; // View -> Colors -> Surface color
390
QAction *chooseSurfaceMeshColorAct; // View -> Colors -> Surface mesh
391
QAction *chooseSharpEdgeColorAct; // View -> Colors -> Sharp edges
392
QAction *chooseEdgeColorAct; // View -> Colors -> Edge color
393
QAction *chooseSelectionColorAct; // View -> Colors -> Selection
394
QAction *showBoundaryColorAct; // View -> Colors -> Boundaries
395
QAction *showBodyColorAct; // View -> Colors -> Body
396
QAction *hideselectedAct; // View -> Show selected
397
QAction *flatShadeAct; // View -> Shade model -> Flat
398
QAction *smoothShadeAct; // View -> Shade model -> Smooth
399
QAction *orthoAct; // View -> Projection -> Ortho
400
QAction *perspectiveAct; // View -> Projection -> Perspective
401
QAction *showallAct; // View -> Show all
402
QAction *resetAct; // View -> Reset model view
403
QAction *showCadModelAct; // View -> Show cad model...
404
QAction *showTwodViewAct; // View -> Show 2d view...
405
QAction *showVtkPostAct; // View -> Show VTK post processor...
406
QAction *showObjectBrowserAct; // View -> Show Object Browser
407
QAction *meshcontrolAct; // Mesh -> Control...
408
QAction *remeshAct; // Mesh -> Remesh
409
QAction *stopMeshingAct; // Mesh -> Kill generator
410
QAction *surfaceDivideAct; // Mesh -> Divide surface...
411
QAction *surfaceUnifyAct; // Mesh -> Unify surface
412
QAction *edgeDivideAct; // Mesh -> Divide edges...
413
QAction *edgeUnifyAct; // Mesh -> Unify edge
414
QAction *cleanHangingSharpEdgesAct; // Mesh -> Clean up
415
QAction *parallelSettingsAct; // Solver -> Parallel settings
416
QAction *runsolverAct; // Solver -> Run solver
417
QAction *killsolverAct; // Solver -> Kill solver
418
QAction *showConvergenceAct; // Solver -> Show convergence...
419
QAction *resultsAct; // Solver -> Post process
420
QAction *killresultsAct; // Solver -> Kill post process
421
QAction *paraviewAct; // Solver -> Launch Paraview
422
QAction *compileSolverAct; // Solver -> Compile...
423
QAction *aboutAct; // Help -> About...
424
QAction *getStartedAct; // Help -> Get Started...
425
QAction *generateAndSaveAndRunAct;
426
QAction *runPostProcessorAct;
427
QAction *selectElmerPostAct;
428
QAction *selectVtkPostAct;
429
QAction *selectParaViewAct;
430
431
// property editors etc:
432
GeneralSetup *generalSetup;
433
434
QVector<DynamicEditor *> equationEditor;
435
QVector<DynamicEditor *> materialEditor;
436
QVector<DynamicEditor *> bodyForceEditor;
437
QVector<DynamicEditor *> initialConditionEditor;
438
QVector<DynamicEditor *> boundaryConditionEditor;
439
QVector<BoundaryPropertyEditor *> boundaryPropertyEditor;
440
QVector<BodyPropertyEditor *> bodyPropertyEditor;
441
QVector<SolverParameterEditor *> solverParameterEditor;
442
443
SummaryEditor *summaryEditor;
444
GLcontrol *glControl;
445
Parallel *parallel;
446
CheckMpi *checkMpi;
447
MaterialLibrary *materialLibrary;
448
449
#ifdef EG_OCC
450
CadView *cadView;
451
#endif
452
453
TwodView *twodView;
454
455
#ifdef EG_VTK
456
VtkPost *vtkPost;
457
#endif
458
459
// elmer definitions:
460
QDomDocument *elmerDefs;
461
462
// tetlib:
463
bool tetlibPresent;
464
TetlibAPI *tetlibAPI;
465
tetgenio *in;
466
tetgenio *out;
467
QString tetlibControlString;
468
bool tetlibInputOk;
469
470
// nglib:
471
bool nglibPresent;
472
NglibAPI *nglibAPI;
473
nglib::Ng_Mesh *ngmesh;
474
nglib::Ng_STL_Geometry *nggeom;
475
nglib::Ng_Geometry_2D *nggeom2d;
476
nglib::Ng_Meshing_Parameters mp;
477
int ngDim;
478
QString stlFileName;
479
QString in2dFileName;
480
bool nglibInputOk;
481
482
// occ:
483
bool occInputOk;
484
485
// vtkPost:
486
bool vtkPostMeshUnifierRunning;
487
488
// elmergrid:
489
ElmergridAPI *elmergridAPI;
490
491
// solver, post processor, and other processes:
492
QProcess *solver;
493
QProcess *post;
494
QProcess *paraview;
495
QProcess *compiler;
496
QProcess *meshSplitter;
497
QProcess *meshUnifier;
498
499
// utility functions:
500
void readInputFile(QString);
501
void loadElmerMesh(QString);
502
void saveElmerMesh(QString);
503
void makeElmerMeshFromTetlib();
504
void makeElmerMeshFromNglib();
505
void logMessage(QString);
506
void loadDefinitions();
507
void createBoundaryCheckBoxes(DynamicEditor *);
508
void createBodyCheckBoxes(int, DynamicEditor *);
509
void synchronizeMenuToState();
510
511
// state variables:
512
int activeGenerator;
513
bool bcEditActive;
514
bool bodyEditActive;
515
bool showConvergence;
516
QString saveDirName;
517
QString geometryInputFileName;
518
519
// splash screen:
520
QPixmap pixmap;
521
QSplashScreen splash;
522
void setupSplash();
523
void updateSplash(QString);
524
void finalizeSplash();
525
526
// sys tray icon:
527
QSystemTrayIcon *sysTrayIcon;
528
void setupSysTrayIcon();
529
void updateSysTrayIcon(QString, QString);
530
void finalizeSysTrayIcon();
531
532
// initialization:
533
EgIni *egIni;
534
535
// limits:
536
void setDynamicLimits();
537
Limit *limit;
538
539
// operations:
540
int operations;
541
operation_t operation;
542
543
// progress bar:
544
QProgressBar *progressBar;
545
QLabel *progressLabel;
546
547
// screen shot:
548
QTimeLine *grabTimeLine;
549
QString pictureFileName;
550
551
// #ifdef __APPLE__
552
// This is only needed for Mac OS X, but it's easier to include in all
553
// architectures and it's small so there's no marked adverse effects
554
QString homePath;
555
// #endif
556
557
// variables and functions for "Recent projects..." menu
558
QStringList recentProject;
559
void addRecentProject(QString, bool);
560
561
// String to store current project dir for "generate, save and run" button
562
QString currentProjectDirName;
563
564
565
ObjectBrowser *objectBrowser;
566
567
public:
568
/*
569
rebuildGLLists() is assumed to be called from ObjectBrowser to avoid a problem of 3D surface
570
mesh not shown correctly when project loading (typically, TemperatureGeneric sample)
571
*/
572
void rebuildGLLists();
573
};
574
575
#endif // MAINWINDOW_H
576
577