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