Salome HOME
MeshFormatWriter and MeshFormaReader are in MEDCOUPLING namespace
[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 class SUIT_ViewWindow;\r
50 class SUIT_Desktop;\r
51 class SUIT_Study;\r
52 class SUIT_ResourceMgr;\r
53 \r
54 class CAM_Module;\r
55 \r
56 class SALOMEDSClient_Study;\r
57 class SALOMEDSClient_SObject;\r
58 \r
59 class SalomeApp_Study;\r
60 class SalomeApp_Module;\r
61 class LightApp_SelectionMgr;\r
62 \r
63 \r
64 class QButtonGroup;\r
65 class QLineEdit;\r
66 class QGroupBox;\r
67 class QRadioButton;\r
68 class QLabel;\r
69 class QCheckBox;\r
70 class QGridLayout;\r
71 class QTabWidget;\r
72 class QDoubleSpinBox;\r
73 class QSpinBox;\r
74 class QTreeWidget;\r
75 class QTreeWidgetItem;\r
76 class QSpacerItem;\r
77 class QHBoxLayout;\r
78 class QItemDelegate;\r
79 class QComboBox;\r
80 \r
81 // IDL includes\r
82 #include <SALOMEconfig.h>\r
83 \r
84 class SVTK_ViewWindow;\r
85 class SVTK_Selector;\r
86 class SMESHGUI_MgAdaptDlg;\r
87 class SMESHGUI_MgAdaptArguments;\r
88 class SMESHGUI_SpinBox;\r
89 class MgAdaptAdvWidgetTreeWidget;\r
90 class MgAdaptAdvWidget;\r
91 class MgAdapt;\r
92 class QHeaderView;\r
93 class QFileDialog;\r
94 \r
95 \r
96 std::map<QString, int> GetListeChamps(QString aFile, bool errorMessage = true);\r
97 QString lireNomMaillage(QString aFile, med_int& meshDim);\r
98 QString lireNomMaillage2(med_idt medIdt,int meshId, med_int& meshDim);\r
99 med_idt OuvrirFichier(QString aFile);\r
100 std::string remove_extension(const std::string& filename);\r
101 \r
102 \r
103 enum ADAPTATION_MODE{
104         SURFACE, // surface adaption when meshDim == 2\r
105         VOLUME, //  \r
106         BOTH   
107 };\r
108 //=================================================================================\r
109 // class    : SMESHGUI_MgAdaptDlg\r
110 // purpose  :\r
111 //=================================================================================\r
112 class  SMESHGUI_MgAdaptDlg : public QDialog\r
113 {\r
114     Q_OBJECT;\r
115 public:\r
116     //! Property type\r
117     enum Mode { Arguments, AdvancedOptions};\r
118     SMESHGUI_MgAdaptDlg( SalomeApp_Module*, MgAdapt*, QWidget* parent= 0,bool isCreation = true );\r
119     ~SMESHGUI_MgAdaptDlg();\r
120 \r
121     void  buildDlg();\r
122     void reject();\r
123     bool checkParams(QString& msg) ;\r
124     void setModel(MgAdapt*);\r
125     MgAdapt* getModel() const;\r
126 \r
127 public slots:\r
128 \r
129 protected slots:\r
130 \r
131     virtual bool clickOnApply();\r
132 private slots:\r
133     virtual void clickOnHelp();\r
134     virtual void clickOnOk();\r
135 protected :\r
136 \r
137     SMESHGUI_MgAdaptArguments* myArgs;\r
138     MgAdaptAdvWidget* myAdvOpt;\r
139     bool                readParamsFromHypo( ) const ;\r
140     bool                readParamsFromWidgets( ) ;\r
141     bool                storeParamsToHypo( const MgAdaptHypothesisData& ) const;\r
142 \r
143 private:\r
144 \r
145 \r
146     SalomeApp_Module*              mySMESHGUI;              /* Current SMESHGUI object */\r
147     QTabWidget*           myTabWidget;\r
148 \r
149 \r
150     MgAdaptHypothesisData* myData;\r
151     MgAdapt* model;\r
152 \r
153 };\r
154 \r
155 class  SMESHGUI_MgAdaptArguments : public QWidget\r
156 {\r
157     Q_OBJECT;\r
158 public:\r
159     //! Property type\r
160     enum Mode { Mesh, Browser};\r
161     enum SIZEMAP { Local, Background, Constant};\r
162     SMESHGUI_MgAdaptArguments( QWidget* parent);\r
163     ~SMESHGUI_MgAdaptArguments();\r
164     void setMode( const Mode, const SIZEMAP );\r
165     med_int getMeshDim() const;\r
166 \r
167     QString* myFileInDir;\r
168     QString* myFileOutDir;\r
169     QString* myFileSizeMapDir;\r
170     QGroupBox*    aMeshIn ;\r
171     QRadioButton* aMedfile;\r
172     QRadioButton* aBrowser ;\r
173     QLineEdit* aBrowserObject;\r
174     QPushButton* selectMedFilebutton ;\r
175     QSpacerItem* hspacer;\r
176     QLineEdit* selectMedFileLineEdit ;\r
177     QButtonGroup* meshInGroup ;\r
178     QGridLayout* meshIn ;\r
179 \r
180     QGroupBox*    aMeshOut ;\r
181     QLabel* meshName;\r
182     QLineEdit* meshNameLineEdit;\r
183     QSpacerItem* secondHspacer;\r
184     QCheckBox* medFileCheckBox;\r
185     QPushButton* selectOutMedFilebutton;\r
186     QLineEdit* selectOutMedFileLineEdit;\r
187     QSpacerItem* thirdHspacer;\r
188     QCheckBox* publishOut;\r
189     QGridLayout* meshOut ;\r
190 \r
191     QGroupBox*    sizeMapDefinition ;\r
192     QRadioButton* localButton;\r
193     QRadioButton* backgroundButton ;\r
194     QRadioButton* constantButton ;\r
195     QLabel* medFileBackground;\r
196     QPushButton* selectMedFileBackgroundbutton;\r
197     QLineEdit* selectMedFileBackgroundLineEdit;\r
198     QLabel* valueLabel;\r
199     QDoubleSpinBox* dvalue;\r
200     QButtonGroup* sizeMapDefGroup ;\r
201     QGridLayout* sizeMapDefGroupLayout;\r
202 \r
203 \r
204     QGroupBox* sizeMapField;\r
205     QLabel* fieldName;\r
206     QComboBox* fieldNameCmb;\r
207     QRadioButton* noTimeStep;\r
208     QRadioButton* lastTimeStep ;\r
209     QRadioButton* chosenTimeStep;\r
210     QLabel* timeStepLabel;\r
211     QSpinBox* timeStep;\r
212     QLabel* rankLabel;\r
213     QSpinBox* rankSpinBox;\r
214     QButtonGroup* timeStepGroup;\r
215     QGridLayout* sizeMapFieldGroupLayout;\r
216 \r
217 signals:\r
218     void updateSelection();\r
219     void toExportMED(const char *);\r
220     void meshDimSignal(ADAPTATION_MODE aMode);\r
221 public slots:\r
222 \r
223 protected slots:\r
224 \r
225 private slots:\r
226     void modeChanged( int);\r
227     void sizeMapDefChanged(int);\r
228     void timeStepGroupChanged(int timeStepType, bool disableOther = false, int max = 0);\r
229     void onSelectMedFilebuttonClicked();\r
230     void clear();\r
231     void onMedFileCheckBox(int);\r
232     void onPublishOut(int);\r
233     void onSelectOutMedFilebutton();\r
234     void onSelectMedFileBackgroundbutton();\r
235     void onLocalSelected(QString);\r
236     void onNoTimeStep(bool disableOther = false);\r
237     void onLastTimeStep(bool disableOther = false);\r
238     void onChosenTimeStep(bool disableOther = false, int max = 0);\r
239 \r
240 private:\r
241 \r
242     QString getMedFileName(bool avertir);\r
243     LightApp_SelectionMgr* selMgr ;\r
244         med_int meshDim;\r
245     std::map<QString, int> myFieldList;\r
246 \r
247 \r
248 };\r
249 enum {\r
250     OPTION_ID_COLUMN = 0,\r
251     OPTION_TYPE_COLUMN,\r
252     OPTION_NAME_COLUMN = 0,\r
253     OPTION_VALUE_COLUMN,\r
254     NB_COLUMNS,\r
255 };\r
256 \r
257 //////////////////////////////////////////\r
258 // MgAdaptAdvWidget\r
259 //////////////////////////////////////////\r
260 class  MgAdaptAdvWidget : public QWidget\r
261 {\r
262     Q_OBJECT\r
263 \r
264 public:\r
265     MgAdaptAdvWidget( QWidget* = 0, std::vector <std::string> * = nullptr, Qt::WindowFlags = 0 );\r
266     ~MgAdaptAdvWidget();\r
267     std::vector < std::string > * myOptions;\r
268     QGridLayout *gridLayout_4;\r
269     MgAdaptAdvWidgetTreeWidget *myOptionTable;\r
270     QPushButton *addBtn;\r
271     QSpacerItem *horizontalSpacer;\r
272     QGroupBox *logGroupBox;\r
273     QGridLayout *gridLayout_2;\r
274     QGridLayout *gridLayout;\r
275     QLabel *workingDirectoryLabel;\r
276     QLineEdit *workingDirectoryLineEdit;\r
277     QPushButton *workingDirectoryPushButton;\r
278     QLabel *verboseLevelLabel;\r
279     QSpinBox *verboseLevelSpin;\r
280     QHBoxLayout *horizontalLayout;\r
281     QCheckBox *logInFileCheck;\r
282     QCheckBox *removeLogOnSuccessCheck;\r
283     QCheckBox *keepWorkingFilesCheck;\r
284 \r
285     void AddOption( const char* name_value_type, bool isCustom = false );\r
286     void GetOptionAndValue( QTreeWidgetItem * tblRow, QString& option, QString& value, bool& dflt );\r
287     void setupWidget();\r
288 public slots:\r
289 \r
290     void                onAddOption();\r
291     void itemChanged(QTreeWidgetItem * tblRow, int column);\r
292     void onMeshDimChanged(ADAPTATION_MODE aMode);\r
293 private slots:\r
294     void _onWorkingDirectoryPushButton();\r
295 private:\r
296     void setOptionValue(QString& option, QString& value);\r
297     std::map<QString, QTreeWidgetItem *> optionTreeWidgetItem;\r
298     \r
299     QTreeWidgetItem* getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom);\r
300 \r
301 };\r
302 \r
303 enum { EDITABLE_ROLE = Qt::UserRole + 1, PARAM_NAME,\r
304        NAME_COL = 0, VALUE_COL\r
305      };\r
306 \r
307 \r
308 \r
309 class  ItemDelegate: public QItemDelegate\r
310 {\r
311 public:\r
312 \r
313     ItemDelegate(QObject* parent=0): QItemDelegate(parent) {}\r
314     QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const;\r
315 };\r
316 \r
317 class  MgAdaptAdvWidgetTreeWidget : public QTreeWidget\r
318 {\r
319     Q_OBJECT\r
320 public:\r
321     MgAdaptAdvWidgetTreeWidget( QWidget* );\r
322 \r
323 protected:\r
324     QModelIndex moveCursor( CursorAction, Qt::KeyboardModifiers );\r
325     void keyPressEvent( QKeyEvent* );\r
326 };\r
327 \r
328 \r
329 #endif // MG_ADAPTGUI_HXX\r