Salome HOME
853b2683e0b981508af983481c8abc864d54f06c
[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 \r
135 virtual bool clickOnApply();\r
136 private slots:\r
137 virtual void clickOnHelp();\r
138 virtual void clickOnOk();\r
139 protected :\r
140 \r
141   SMESHGUI_MgAdaptArguments* myArgs;\r
142   MgAdaptAdvWidget* myAdvOpt;\r
143   bool readParamsFromHypo( ) const ;\r
144   bool readParamsFromWidgets( ) ;\r
145   bool storeParamsToHypo( const SMESH::MgAdaptHypothesisData & ) const;\r
146 \r
147 private:\r
148 \r
149   SalomeApp_Module*              mySMESHGUI;              /* Current SMESHGUI object */\r
150   QTabWidget*           myTabWidget;\r
151 \r
152 \r
153   SMESH::MgAdaptHypothesisData* myData;\r
154   SMESH::MG_ADAPT_ptr model;\r
155 \r
156 };\r
157 \r
158 class  SMESHGUI_MgAdaptArguments : public QWidget\r
159 {\r
160   Q_OBJECT;\r
161 public:\r
162   //! Property type\r
163   enum Mode { Mesh, Browser};\r
164   enum SIZEMAP { Local, Background, Constant};\r
165   SMESHGUI_MgAdaptArguments( QWidget* parent);\r
166   ~SMESHGUI_MgAdaptArguments();\r
167   void setMode( const Mode, const SIZEMAP );\r
168   med_int getMeshDim() const;\r
169 \r
170   QString* myFileInDir;\r
171   QString* myFileOutDir;\r
172   QString* myFileSizeMapDir;\r
173   QGroupBox*    aMeshIn ;\r
174   QRadioButton* aMedfile;\r
175   QRadioButton* aBrowser ;\r
176   QLineEdit* aBrowserObject;\r
177   QPushButton* selectMedFilebutton ;\r
178   QSpacerItem* hspacer;\r
179   QLineEdit* selectMedFileLineEdit ;\r
180   QButtonGroup* meshInGroup ;\r
181   QGridLayout* meshIn ;\r
182 \r
183   QGroupBox*    aMeshOut ;\r
184   QLabel* meshName;\r
185   QLineEdit* meshNameLineEdit;\r
186   QSpacerItem* secondHspacer;\r
187   QCheckBox* medFileCheckBox;\r
188   QPushButton* selectOutMedFilebutton;\r
189   QLineEdit* selectOutMedFileLineEdit;\r
190   QSpacerItem* thirdHspacer;\r
191   QCheckBox* publishOut;\r
192   QGridLayout* meshOut ;\r
193 \r
194   QGroupBox*    sizeMapDefinition ;\r
195   QRadioButton* localButton;\r
196   QRadioButton* backgroundButton ;\r
197   QRadioButton* constantButton ;\r
198   QLabel* medFileBackground;\r
199   QPushButton* selectMedFileBackgroundbutton;\r
200   QLineEdit* selectMedFileBackgroundLineEdit;\r
201   QLabel* valueLabel;\r
202   QDoubleSpinBox* dvalue;\r
203   QButtonGroup* sizeMapDefGroup ;\r
204   QGridLayout* sizeMapDefGroupLayout;\r
205 \r
206 \r
207   QGroupBox* sizeMapField;\r
208   QLabel* fieldName;\r
209   QComboBox* fieldNameCmb;\r
210   QRadioButton* noTimeStep;\r
211   QRadioButton* lastTimeStep ;\r
212   QRadioButton* chosenTimeStep;\r
213   QLabel* timeStepLabel;\r
214   QSpinBox* timeStep;\r
215   QLabel* rankLabel;\r
216   QSpinBox* rankSpinBox;\r
217   QButtonGroup* timeStepGroup;\r
218   QGridLayout* sizeMapFieldGroupLayout;\r
219 \r
220 signals:\r
221   void updateSelection();\r
222   void toExportMED(const char *);\r
223   void meshDimSignal(ADAPTATION_MODE aMode);\r
224 public slots:\r
225 \r
226 protected slots:\r
227 \r
228 private slots:\r
229   void modeChanged( int);\r
230   void sizeMapDefChanged(int);\r
231   void timeStepGroupChanged(int timeStepType, bool disableOther = false, int vmax = 0);\r
232   void onSelectMedFilebuttonClicked();\r
233   void clear();\r
234   void onMedFileCheckBox(int);\r
235   void onPublishOut(int);\r
236   void onSelectOutMedFilebutton();\r
237   void onSelectMedFileBackgroundbutton();\r
238   void onLocalSelected(QString);\r
239   void onNoTimeStep(bool disableOther = false);\r
240   void onLastTimeStep(bool disableOther = false);\r
241   void onChosenTimeStep(bool disableOther = false, int vmax = 0);\r
242   void visibleTimeStepRankLabel(bool visible);\r
243 \r
244 private:\r
245 \r
246   QString getMedFileName(bool avertir);\r
247   LightApp_SelectionMgr* selMgr ;\r
248   med_int meshDim;\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