Salome HOME
#23999 EDF 22760 - integration of dev in SMESH (from branch 'gni/adaptation')
[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 \r
103 std::string remove_extension(const std::string& filename);\r
104 \r
105 enum ADAPTATION_MODE{\r
106   SURFACE,\r
107   VOLUME,\r
108   BOTH\r
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   virtual bool PushOnApply();\r
133 \r
134 private slots:\r
135   virtual void PushOnHelp();\r
136   virtual void PushOnOK();\r
137 \r
138 protected :\r
139 \r
140   SMESHGUI_MgAdaptArguments* myArgs;\r
141   MgAdaptAdvWidget* myAdvOpt;\r
142   bool readParamsFromHypo( ) const ;\r
143   bool readParamsFromWidgets( ) ;\r
144   bool storeParamsToHypo( const SMESH::MgAdaptHypothesisData & ) const;\r
145 \r
146 private:\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 \r
168   QString* myFileInDir;\r
169   QString* myFileOutDir;\r
170   QString* myFileSizeMapDir;\r
171   QGroupBox*    aMeshIn ;\r
172   QRadioButton* aMedfile;\r
173   QRadioButton* aBrowser ;\r
174   QLineEdit* aBrowserObject;\r
175   QPushButton* selectMedFilebutton ;\r
176   QSpacerItem* hspacer;\r
177   QLineEdit* selectMedFileLineEdit ;\r
178   QButtonGroup* meshInGroup ;\r
179   QGridLayout* meshIn ;\r
180 \r
181   QGroupBox*    aMeshOut ;\r
182   QLabel* meshName;\r
183   QLineEdit* meshNameLineEdit;\r
184   QSpacerItem* secondHspacer;\r
185   QCheckBox* medFileCheckBox;\r
186   QPushButton* selectOutMedFilebutton;\r
187   QLineEdit* selectOutMedFileLineEdit;\r
188   QSpacerItem* thirdHspacer;\r
189   QCheckBox* publishOut;\r
190   QGridLayout* meshOut ;\r
191 \r
192   QGroupBox*    sizeMapDefinition ;\r
193   QRadioButton* localButton;\r
194   QRadioButton* backgroundButton ;\r
195   QRadioButton* constantButton ;\r
196   QLabel* medFileBackground;\r
197   QPushButton* selectMedFileBackgroundbutton;\r
198   QLineEdit* selectMedFileBackgroundLineEdit;\r
199   QLabel* valueLabel;\r
200   QDoubleSpinBox* dvalue;\r
201   QButtonGroup* sizeMapDefGroup ;\r
202   QGridLayout* sizeMapDefGroupLayout;\r
203 \r
204 \r
205   QGroupBox* sizeMapField;\r
206   QLabel* fieldName;\r
207   QComboBox* fieldNameCmb;\r
208   QRadioButton* noTimeStep;\r
209   QRadioButton* lastTimeStep ;\r
210   QRadioButton* chosenTimeStep;\r
211   QLabel* timeStepLabel;\r
212   QSpinBox* timeStep;\r
213   QLabel* rankLabel;\r
214   QSpinBox* rankSpinBox;\r
215   QButtonGroup* timeStepGroup;\r
216   QGridLayout* sizeMapFieldGroupLayout;\r
217 \r
218 signals:\r
219   void updateSelection();\r
220   void toExportMED(const char *);\r
221   void meshDimSignal(ADAPTATION_MODE aMode);\r
222 public slots:\r
223 \r
224 protected slots:\r
225 \r
226 private slots:\r
227   void modeChanged( int);\r
228   void sizeMapDefChanged(int);\r
229   void timeStepGroupChanged(int timeStepType, bool disableOther = false, int vmax = 0);\r
230   void onSelectMedFilebuttonClicked();\r
231   void clear();\r
232   void onMedFileCheckBox(int);\r
233   void onPublishOut(int);\r
234   void onSelectOutMedFilebutton();\r
235   void onSelectMedFileBackgroundbutton();\r
236   void onLocalSelected(QString);\r
237   void onNoTimeStep(bool disableOther = false);\r
238   void onLastTimeStep(bool disableOther = false);\r
239   void onChosenTimeStep(bool disableOther = false, int vmax = 0);\r
240   void visibleTimeStepRankLabel(bool visible);\r
241   void valueAdaptation ();\r
242 \r
243 private:\r
244 \r
245   QString getMedFileName(bool avertir);\r
246   LightApp_SelectionMgr* selMgr ;\r
247   med_int meshDim;\r
248   med_int meshDimBG;\r
249   std::map<QString, int> myFieldList;\r
250 \r
251 };\r
252 enum {\r
253   OPTION_ID_COLUMN = 0,\r
254   OPTION_TYPE_COLUMN,\r
255   OPTION_NAME_COLUMN = 0,\r
256   OPTION_VALUE_COLUMN,\r
257   NB_COLUMNS,\r
258 };\r
259 \r
260 //////////////////////////////////////////\r
261 // MgAdaptAdvWidget\r
262 //////////////////////////////////////////\r
263 class  MgAdaptAdvWidget : public QWidget\r
264 {\r
265   Q_OBJECT\r
266 \r
267 public:\r
268   MgAdaptAdvWidget( QWidget* = 0, std::vector <std::string> * = nullptr, Qt::WindowFlags = 0 );\r
269   ~MgAdaptAdvWidget();\r
270   std::vector < std::string > * myOptions;\r
271   QGridLayout *gridLayout_4;\r
272   MgAdaptAdvWidgetTreeWidget *myOptionTable;\r
273   QPushButton *addBtn;\r
274   QSpacerItem *horizontalSpacer;\r
275   QGroupBox *logGroupBox;\r
276   QGridLayout *gridLayout_2;\r
277   QGridLayout *gridLayout;\r
278   QLabel *workingDirectoryLabel;\r
279   QLineEdit *workingDirectoryLineEdit;\r
280   QPushButton *workingDirectoryPushButton;\r
281   QLabel *verboseLevelLabel;\r
282   QSpinBox *verboseLevelSpin;\r
283   QHBoxLayout *horizontalLayout;\r
284   QCheckBox *logInFileCheck;\r
285   QCheckBox *removeLogOnSuccessCheck;\r
286   QCheckBox *keepWorkingFilesCheck;\r
287 \r
288   void AddOption( const char* name_value_type, bool isCustom = false );\r
289   void GetOptionAndValue( QTreeWidgetItem * tblRow, QString& option, QString& value, bool& dflt );\r
290   void setupWidget();\r
291 \r
292 public slots:\r
293   void                onAddOption();\r
294   void itemChanged(QTreeWidgetItem * tblRow, int column);\r
295   void onMeshDimChanged(ADAPTATION_MODE aMode);\r
296 private slots:\r
297   void _onWorkingDirectoryPushButton();\r
298 private:\r
299   void setOptionValue(QString& option, QString& value);\r
300   std::map<QString, QTreeWidgetItem *> optionTreeWidgetItem;\r
301 \r
302   QTreeWidgetItem* getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom);\r
303 \r
304 };\r
305 \r
306 enum { EDITABLE_ROLE = Qt::UserRole + 1, PARAM_NAME,\r
307        NAME_COL = 0, VALUE_COL\r
308      };\r
309 \r
310 class  ItemDelegate: public QItemDelegate\r
311 {\r
312 public:\r
313 \r
314   ItemDelegate(QObject* parent=0): QItemDelegate(parent) {}\r
315   QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const;\r
316 };\r
317 \r
318 class  MgAdaptAdvWidgetTreeWidget : public QTreeWidget\r
319 {\r
320   Q_OBJECT\r
321 public:\r
322   MgAdaptAdvWidgetTreeWidget( QWidget* );\r
323 \r
324 protected:\r
325   QModelIndex moveCursor( CursorAction, Qt::KeyboardModifiers );\r
326   void keyPressEvent( QKeyEvent* );\r
327 };\r
328 \r
329 #endif // MG_ADAPTGUI_HXX\r