Salome HOME
mise a jour pour la poursuite d'iterations
[modules/homard.git] / src / HOMARDGUI / MonEditIteration.cxx
1 // Copyright (C) 2011-2013  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 using namespace std;
21
22 #include "MonEditIteration.h"
23
24 #include "SalomeApp_Tools.h"
25 #include "HOMARDGUI_Utils.h"
26 #include "HomardQtCommun.h"
27 #include <utilities.h>
28
29
30 // -------------------------------------------------------------------------------------------------------------------------------------
31 MonEditIteration::MonEditIteration ( QWidget* parent, bool modal,
32                                      HOMARD::HOMARD_Gen_var myHomardGen,
33                                      QString IterParentName, QString IterName ):
34 // -------------------------------------------------------------------------------------------------------------------------------------
35 /* Constructs a MonEditIteration
36     herite de MonCreateIteration
37 */
38    MonCreateIteration(parent, modal, myHomardGen, IterParentName),
39    _rank(-1), _step(-1), _IterationName(""), _FieldFile(""),_aTypeAdap()
40 {
41     MESSAGE("Debut de  MonEditIteration" << IterName.toStdString().c_str());
42     setWindowTitle(QObject::tr("HOM_ITER_EDIT_WINDOW_TITLE"));
43     _IterationName = IterName;
44     aIter = _myHomardGen->GetIteration(_IterationName.toStdString().c_str());
45
46 //  Attention au cas ou c'est une iteration initiale : il faut inhiber l'essentiel
47     int etat = aIter->GetState() ;
48     if ( etat <= 0 ) { InitValEdit0(etat); }
49     else             { InitValEdit(); }
50 }
51 // ------------------------------
52 MonEditIteration::~MonEditIteration()
53 // ------------------------------
54 {
55 }
56
57 // ------------------------------
58 void MonEditIteration::InitValEdit0(int etat)
59 // ------------------------------
60 //    Cas d'une iteration initiale d'un cas (initial ou poursuite)
61 {
62 //
63       LEIterationName->setText(_IterationName);
64       LEIterationName->setReadOnly(true);
65
66 //    Invisibilite de l'iteration parent
67       Iter_Parent->setVisible(0);
68       PBIterParent->setVisible(0);
69       LEIterationParentName->setVisible(0);
70
71 //    Affichage bloque du nom du maillage de l'iteration courante
72       QString MeshName = aIter->GetMeshName();
73       Mesh_n->setText(QObject::tr("HOM_ITER_STARTING_POINT_0"));
74       LEMeshName_n->setText(MeshName);
75       LEMeshName_n->setReadOnly(1);
76
77 //    Message general
78       if ( etat == 0 ) { Mesh_np1->setText(QObject::tr("HOM_ITER_STARTING_POINT_1")) ; }
79       else             { Mesh_np1->setText(QObject::tr("HOM_ITER_STARTING_POINT_2")) ; }
80       LEMeshName_np1->setVisible(0);
81 //
82 //    Invisibilite des hypotheses et des champs
83       Hypothese->setVisible(0);
84       GBField->setVisible(0);
85       adjustSize();
86 //
87 }
88 // ------------------------------
89 void MonEditIteration::InitValEdit()
90 // ------------------------------
91 //    Cas d'une iteration courante
92 {
93 //    Affichage bloque du nom de l'iteration
94   LEIterationName->setText(_IterationName);
95   LEIterationName->setReadOnly(true);
96
97 //    Affichage bloque du nom de l'iteration parent
98   _IterParentName = aIter->GetIterParentName();
99   LEIterationParentName->setText(_IterParentName);
100   LEIterationParentName->setReadOnly(true);
101   PBIterParent->setEnabled(false);
102   PBIterParent->setVisible(0);
103
104 //    Affichage bloque du nom du maillage de l'iteration parent
105   aIterParent = _myHomardGen->GetIteration(_IterParentName.toStdString().c_str());
106   QString MeshNameParent = aIterParent->GetMeshName();
107   LEMeshName_n->setText(MeshNameParent);
108   LEMeshName_n->setReadOnly(1);
109
110 //    Affichage bloque du nom du maillage de l'iteration courante
111   QString MeshName = aIter->GetMeshName();
112   LEMeshName_np1->setText(MeshName);
113   LEMeshName_np1->setReadOnly(1);
114
115 //    Affichage de la bonne hypothese
116   QString HypoName = aIter->GetHypoName();
117   CBHypothese->insertItem(0,HypoName);
118   CBHypothese->setCurrentIndex(0);
119   CBHypothese->setEnabled(false);
120   PBHypoNew->setVisible(0);
121
122 //    Pour une adaptation selon un champ
123   HOMARD::HOMARD_Hypothesis_var myHypo = _myHomardGen->GetHypothesis(HypoName.toStdString().c_str()) ;
124   _aTypeAdap = myHypo->GetAdapType() ;
125   if ( _aTypeAdap == 1 )
126   {
127     _FieldFile = aIter->GetFieldFile();
128     LEFieldFile->setText(_FieldFile);
129     _step = aIter->GetTimeStep() ;
130     SpinBox_TimeStep->setValue(_step);
131     _rank = aIter->GetRank() ;
132     SpinBox_Rank->setValue(_rank);
133
134 // Cas ou on prend le dernier pas de temps ou sans pas de temps
135     if ( _step <= -1 )
136     {
137       Rank->setVisible(0);
138       SpinBox_Rank->setVisible(0);
139       TimeStep->setVisible(0);
140       SpinBox_TimeStep->setVisible(0);
141
142       if ( _step == -2 ) { RBLast->setChecked(true); }
143       else               { RBNo->setChecked(true); }
144     }
145
146 // Cas avec pas de temps
147     else
148     {
149       Rank->setVisible(1);
150       SpinBox_Rank->setVisible(1);
151       TimeStep->setVisible(1);
152       SpinBox_TimeStep->setVisible(1);
153       RBChosen->setChecked(true);
154     }
155   }
156   else
157   {
158     GBField->setVisible(0);
159   }
160   adjustSize();
161 //
162 }
163
164 // -------------------------------------
165 bool MonEditIteration::PushOnApply()
166 // -------------------------------------
167 {
168   if ( _aTypeAdap ==  1)
169   {
170 // Pour du raffinement selon un champ, les instants ont-ils change ?
171     if ( (_FieldFile != LEFieldFile->text().trimmed()) or
172        (  _rank != SpinBox_Rank->value())  or
173        (  _step != SpinBox_TimeStep->value()))
174     {
175       _FieldFile = LEFieldFile->text().trimmed();
176       aIter->SetFieldFile(CORBA::string_dup(_FieldFile.toStdString().c_str()));
177       _rank = SpinBox_Rank->value();
178       _step = SpinBox_TimeStep->value();
179       if ( _step == -2 ) { aIter->SetTimeStepRankLast(); }
180       else               { aIter->SetTimeStepRank(_step, _rank); }
181       _myHomardGen->InvalideIter(_IterationName.toStdString().c_str());
182       HOMARD_UTILS::updateObjBrowser();
183     }
184   }
185   return true;
186
187 };