Salome HOME
7b50a32a502575ce50598386793a55f1d7a05953
[modules/smesh.git] / src / SMESHGUI / MG_ADAPTGUI.hxx
1 // Copyright (C) 2011-2020  CEA/DEN, EDF R&D\r
2 //\r
3 // This library is free software; you can redistribute it and/or\r
4 // modify it under the terms of the GNU Lesser General Public\r
5 // License as published by the Free Software Foundation; either\r
6 // version 2.1 of the License, or (at your option) any later version.\r
7 //\r
8 // This library is distributed in the hope that it will be useful,\r
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
11 // Lesser General Public License for more details.\r
12 //\r
13 // You should have received a copy of the GNU Lesser General Public\r
14 // License along with this library; if not, write to the Free Software\r
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
16 //\r
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com\r
18 //\r
19 \r
20 // SMESH SMESHGUI : GUI for the adaptation in the SMESH component\r
21 // File   : MG_ADAPTGUI.hxx\r
22 //\r
23 #ifndef MG_ADAPTGUI_HXX\r
24 #define MG_ADAPTGUI_HXX\r
25 \r
26 #include <set>\r
27 // SMESH includes\r
28 \r
29 // Qt includes\r
30 #include <QDialog>\r
31 #include <QTreeWidget>\r
32 #include<QItemDelegate>\r
33 \r
34 #include "LightApp_DataOwner.h"\r
35 #include "SalomeApp_Application.h"\r
36 #include <SALOMEconfig.h>\r
37 #include <SALOME_ListIO.hxx>\r
38 #include "SalomeApp_Module.h"\r
39 #include "SalomeApp_Study.h"\r
40 #include <med.h>\r
41 #include <map>\r
42 \r
43 \r
44 // model\r
45 \r
46 \r
47 //~#include "MG_ADAPT.hxx"\r
48 \r
49 #include CORBA_SERVER_HEADER(MG_ADAPT)\r
50 \r
51 class SUIT_ViewWindow;\r
52 class SUIT_Desktop;\r
53 class SUIT_Study;\r
54 class SUIT_ResourceMgr;\r
55 \r
56 class CAM_Module;\r
57 \r
58 class SALOMEDSClient_Study;\r
59 class SALOMEDSClient_SObject;\r
60 \r
61 class SalomeApp_Study;\r
62 class SalomeApp_Module;\r
63 class LightApp_SelectionMgr;\r
64 \r
65 \r
66 class QButtonGroup;\r
67 class QLineEdit;\r
68 class QGroupBox;\r
69 class QRadioButton;\r
70 class QLabel;\r
71 class QCheckBox;\r
72 class QGridLayout;\r
73 class QTabWidget;\r
74 class QDoubleSpinBox;\r
75 class QSpinBox;\r
76 class QTreeWidget;\r
77 class QTreeWidgetItem;\r
78 class QSpacerItem;\r
79 class QHBoxLayout;\r
80 class QItemDelegate;\r
81 class QComboBox;\r
82 \r
83 // IDL includes\r
84 #include <SALOMEconfig.h>\r
85 \r
86 class SVTK_ViewWindow;\r
87 class SVTK_Selector;\r
88 class SMESHGUI_MgAdaptDlg;\r
89 class SMESHGUI_MgAdaptArguments;\r
90 class SMESHGUI_SpinBox;\r
91 class MgAdaptAdvWidgetTreeWidget;\r
92 class MgAdaptAdvWidget;\r
93 //~class MgAdapt;\r
94 class QHeaderView;\r
95 class QFileDialog;\r
96 \r
97 \r
98 std::map<QString, int> GetListeChamps(QString aFile, bool errorMessage = true);\r
99 QString lireNomMaillage(QString aFile, med_int& meshDim);\r
100 QString lireNomMaillage2(med_idt medIdt,int meshId, med_int& meshDim);\r
101 med_idt OuvrirFichier(QString aFile);\r
102 std::string remove_extension(const std::string& filename);\r
103 \r
104 \r
105 enum ADAPTATION_MODE{
106         SURFACE, // surface adaption when meshDim == 2\r
107         VOLUME, //  \r
108         BOTH   
109 };\r
110 //=================================================================================\r
111 // class    : SMESHGUI_MgAdaptDlg\r
112 // purpose  :\r
113 //=================================================================================\r
114 class  SMESHGUI_MgAdaptDlg : public QDialog\r
115 {\r
116     Q_OBJECT;\r
117 public:\r
118     //! Property type\r
119     enum Mode { Arguments, AdvancedOptions};\r
120     SMESHGUI_MgAdaptDlg( SalomeApp_Module*, SMESH::MG_ADAPT_ptr, QWidget* parent= 0,bool isCreation = true );\r
121     ~SMESHGUI_MgAdaptDlg();\r
122 \r
123     void  buildDlg();\r
124     void reject();\r
125     bool checkParams(QString& msg) ;\r
126     //~void setModel(MgAdapt*);\r
127     SMESH::MG_ADAPT_ptr getModel() const;\r
128 \r
129 public slots:\r
130 \r
131 protected slots:\r
132 \r
133     virtual bool clickOnApply();\r
134 private slots:\r
135     virtual void clickOnHelp();\r
136     virtual void clickOnOk();\r
137 protected :\r
138 \r
139     SMESHGUI_MgAdaptArguments* myArgs;\r
140     MgAdaptAdvWidget* myAdvOpt;\r
141     bool                readParamsFromHypo( ) const ;\r
142     bool                readParamsFromWidgets( ) ;\r
143     bool                storeParamsToHypo( const SMESH::MgAdaptHypothesisData & ) const;\r
144 \r
145 private:\r
146 \r
147 \r
148     SalomeApp_Module*              mySMESHGUI;              /* Current SMESHGUI object */\r
149     QTabWidget*           myTabWidget;\r
150 \r
151 \r
152     SMESH::MgAdaptHypothesisData* myData;\r
153     SMESH::MG_ADAPT_ptr model;\r
154 \r
155 };\r
156 \r
157 class  SMESHGUI_MgAdaptArguments : public QWidget\r
158 {\r
159     Q_OBJECT;\r
160 public:\r
161     //! Property type\r
162     enum Mode { Mesh, Browser};\r
163     enum SIZEMAP { Local, Background, Constant};\r
164     SMESHGUI_MgAdaptArguments( QWidget* parent);\r
165     ~SMESHGUI_MgAdaptArguments();\r
166     void setMode( const Mode, const SIZEMAP );\r
167     med_int getMeshDim() const;\r
168 \r
169     QString* myFileInDir;\r
170     QString* myFileOutDir;\r
171     QString* myFileSizeMapDir;\r
172     QGroupBox*    aMeshIn ;\r
173     QRadioButton* aMedfile;\r
174     QRadioButton* aBrowser ;\r
175     QLineEdit* aBrowserObject;\r
176     QPushButton* selectMedFilebutton ;\r
177     QSpacerItem* hspacer;\r
178     QLineEdit* selectMedFileLineEdit ;\r
179     QButtonGroup* meshInGroup ;\r
180     QGridLayout* meshIn ;\r
181 \r
182     QGroupBox*    aMeshOut ;\r
183     QLabel* meshName;\r
184     QLineEdit* meshNameLineEdit;\r
185     QSpacerItem* secondHspacer;\r
186     QCheckBox* medFileCheckBox;\r
187     QPushButton* selectOutMedFilebutton;\r
188     QLineEdit* selectOutMedFileLineEdit;\r
189     QSpacerItem* thirdHspacer;\r
190     QCheckBox* publishOut;\r
191     QGridLayout* meshOut ;\r
192 \r
193     QGroupBox*    sizeMapDefinition ;\r
194     QRadioButton* localButton;\r
195     QRadioButton* backgroundButton ;\r
196     QRadioButton* constantButton ;\r
197     QLabel* medFileBackground;\r
198     QPushButton* selectMedFileBackgroundbutton;\r
199     QLineEdit* selectMedFileBackgroundLineEdit;\r
200     QLabel* valueLabel;\r
201     QDoubleSpinBox* dvalue;\r
202     QButtonGroup* sizeMapDefGroup ;\r
203     QGridLayout* sizeMapDefGroupLayout;\r
204 \r
205 \r
206     QGroupBox* sizeMapField;\r
207     QLabel* fieldName;\r
208     QComboBox* fieldNameCmb;\r
209     QRadioButton* noTimeStep;\r
210     QRadioButton* lastTimeStep ;\r
211     QRadioButton* chosenTimeStep;\r
212     QLabel* timeStepLabel;\r
213     QSpinBox* timeStep;\r
214     QLabel* rankLabel;\r
215     QSpinBox* rankSpinBox;\r
216     QButtonGroup* timeStepGroup;\r
217     QGridLayout* sizeMapFieldGroupLayout;\r
218 \r
219 signals:\r
220     void updateSelection();\r
221     void toExportMED(const char *);\r
222     void meshDimSignal(ADAPTATION_MODE aMode);\r
223 public slots:\r
224 \r
225 protected slots:\r
226 \r
227 private slots:\r
228     void modeChanged( int);\r
229     void sizeMapDefChanged(int);\r
230     void timeStepGroupChanged(int timeStepType, bool disableOther = false, int max = 0);\r
231     void onSelectMedFilebuttonClicked();\r
232     void clear();\r
233     void onMedFileCheckBox(int);\r
234     void onPublishOut(int);\r
235     void onSelectOutMedFilebutton();\r
236     void onSelectMedFileBackgroundbutton();\r
237     void onLocalSelected(QString);\r
238     void onNoTimeStep(bool disableOther = false);\r
239     void onLastTimeStep(bool disableOther = false);\r
240     void onChosenTimeStep(bool disableOther = false, int max = 0);\r
241 \r
242 private:\r
243 \r
244     QString getMedFileName(bool avertir);\r
245     LightApp_SelectionMgr* selMgr ;\r
246         med_int meshDim;\r
247     std::map<QString, int> myFieldList;\r
248 \r
249 \r
250 };\r
251 enum {\r
252     OPTION_ID_COLUMN = 0,\r
253     OPTION_TYPE_COLUMN,\r
254     OPTION_NAME_COLUMN = 0,\r
255     OPTION_VALUE_COLUMN,\r
256     NB_COLUMNS,\r
257 };\r
258 \r
259 //////////////////////////////////////////\r
260 // MgAdaptAdvWidget\r
261 //////////////////////////////////////////\r
262 class  MgAdaptAdvWidget : public QWidget\r
263 {\r
264     Q_OBJECT\r
265 \r
266 public:\r
267     MgAdaptAdvWidget( QWidget* = 0, std::vector <std::string> * = nullptr, Qt::WindowFlags = 0 );\r
268     ~MgAdaptAdvWidget();\r
269     std::vector < std::string > * myOptions;\r
270     QGridLayout *gridLayout_4;\r
271     MgAdaptAdvWidgetTreeWidget *myOptionTable;\r
272     QPushButton *addBtn;\r
273     QSpacerItem *horizontalSpacer;\r
274     QGroupBox *logGroupBox;\r
275     QGridLayout *gridLayout_2;\r
276     QGridLayout *gridLayout;\r
277     QLabel *workingDirectoryLabel;\r
278     QLineEdit *workingDirectoryLineEdit;\r
279     QPushButton *workingDirectoryPushButton;\r
280     QLabel *verboseLevelLabel;\r
281     QSpinBox *verboseLevelSpin;\r
282     QHBoxLayout *horizontalLayout;\r
283     QCheckBox *logInFileCheck;\r
284     QCheckBox *removeLogOnSuccessCheck;\r
285     QCheckBox *keepWorkingFilesCheck;\r
286 \r
287     void AddOption( const char* name_value_type, bool isCustom = false );\r
288     void GetOptionAndValue( QTreeWidgetItem * tblRow, QString& option, QString& value, bool& dflt );\r
289     void setupWidget();\r
290 public slots:\r
291 \r
292     void                onAddOption();\r
293     void itemChanged(QTreeWidgetItem * tblRow, int column);\r
294     void onMeshDimChanged(ADAPTATION_MODE aMode);\r
295 private slots:\r
296     void _onWorkingDirectoryPushButton();\r
297 private:\r
298     void setOptionValue(QString& option, QString& value);\r
299     std::map<QString, QTreeWidgetItem *> optionTreeWidgetItem;\r
300     \r
301     QTreeWidgetItem* getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom);\r
302 \r
303 };\r
304 \r
305 enum { EDITABLE_ROLE = Qt::UserRole + 1, PARAM_NAME,\r
306        NAME_COL = 0, VALUE_COL\r
307      };\r
308 \r
309 \r
310 \r
311 class  ItemDelegate: public QItemDelegate\r
312 {\r
313 public:\r
314 \r
315     ItemDelegate(QObject* parent=0): QItemDelegate(parent) {}\r
316     QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const;\r
317 };\r
318 \r
319 class  MgAdaptAdvWidgetTreeWidget : public QTreeWidget\r
320 {\r
321     Q_OBJECT\r
322 public:\r
323     MgAdaptAdvWidgetTreeWidget( QWidget* );\r
324 \r
325 protected:\r
326     QModelIndex moveCursor( CursorAction, Qt::KeyboardModifiers );\r
327     void keyPressEvent( QKeyEvent* );\r
328 };\r
329 \r
330 \r
331 #endif // MG_ADAPTGUI_HXX\r