Salome HOME
Add SSL mode
[modules/homard.git] / src / HOMARDGUI / HOMARDGUI.cxx
1 // Copyright (C) 2011-2021  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, or (at your option) any later version.
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 //  File   : HOMARDGUI.cxx
21 //  Author : Gerald NICOLAS, EDF
22 //  Module : HOMARD
23
24 #include "HOMARDGUI.h"
25
26 // SALOME Includes
27 #include "OpUtil.hxx"
28 #include "SALOME_LifeCycleCORBA.hxx"
29
30 #include "SUIT_ResourceMgr.h"
31 #include "SUIT_MessageBox.h"
32 #include "SUIT_Session.h"
33 #include "SUIT_ViewWindow.h"
34 #include "SUIT_ViewManager.h"
35 #include <SUIT_Desktop.h>
36
37 #include "CAM_Module.h"
38 #include "OB_Browser.h"
39
40 #include "SALOME_ListIO.hxx"
41
42 #include "SalomeApp_Application.h"
43 #include "SalomeApp_DataModel.h"
44 #include "SalomeApp_Study.h"
45 #include "LightApp_SelectionMgr.h"
46 #include "LightApp_Selection.h"
47 #include <LightApp_Preferences.h>
48 #include "SalomeApp_Module.h"
49 #include "SALOMEconfig.h"
50 #include <SALOME_LifeCycleCORBA.hxx>
51 #include <SALOME_NamingService_Abstract.hxx>
52 #include <SALOME_KernelServices.hxx>
53
54 #include <utilities.h>
55
56
57 // QT Includes
58 #include <QMenu>
59 #include "MonCreateCase.h"
60 #include "MonCreateIteration.h"
61 #include "MonPursueIteration.h"
62 #include "MonCreateYACS.h"
63 #include "MonEditBoundaryCAO.h"
64 #include "MonEditBoundaryAn.h"
65 #include "MonEditBoundaryDi.h"
66 #include "MonEditCase.h"
67 #include "MonEditHypothesis.h"
68 #include "MonEditIteration.h"
69 #include "MonEditYACS.h"
70 #include "MonEditZone.h"
71 #include "MonMeshInfo.h"
72 #include "MonIterInfo.h"
73 #include "MonEditFile.h"
74 #include "HomardQtCommun.h"
75
76 // BOOST Includes
77 #include <boost/shared_ptr.hpp>
78
79 //Pour le _CAST
80 #include "SALOMEDS_Study.hxx"
81 #include "HOMARDGUI_Utils.h"
82 #include "HOMARD_Component_Generator.hxx"
83
84 using namespace std;
85
86 static CORBA::ORB_var _orb;
87
88 //=======================================================================
89 // function : HOMARDGUI()
90 // purpose  : Constructor
91 //=======================================================================
92 HOMARDGUI::HOMARDGUI(const QString&) :
93            SalomeApp_Module( "HOMARD" ) // default name
94 {
95 }
96 //=======================================================================
97 // function : ~HOMARDGUI()
98 // purpose  : Destructor
99 //=======================================================================
100 HOMARDGUI::~HOMARDGUI()
101 {
102 }
103
104 //=======================================================================
105 // function : InitHOMARDGen
106 // launch HOMARD component and return a handle
107 //=======================================================================
108 HOMARD::HOMARD_Gen_var HOMARDGUI::InitHOMARDGen(SalomeApp_Application* app)
109 {
110   SALOME_NamingService_Abstract *ns = SalomeApp_Application::namingService();
111   Engines::EngineComponent_var comp;
112   if (ns->IsTrueNS())
113   {
114     comp = app->lcc()->FindOrLoad_Component( "FactoryServer","HOMARD" );
115   }
116   else
117   {
118     comp = RetrieveHOMARDInstance();
119     CORBA::Object_var comp2 = CORBA::Object::_narrow(comp);
120     KERNEL::RegisterCompo("HOMARD",comp2);
121   }
122   HOMARD::HOMARD_Gen_var clr = HOMARD::HOMARD_Gen::_narrow(comp);
123   ASSERT(!CORBA::is_nil(clr));
124   return clr;
125 }
126
127 //=======================================================================
128 // Module's initialization
129 void HOMARDGUI::initialize( CAM_Application* app )
130 //=======================================================================
131 {
132   SalomeApp_Module::initialize( app );
133   InitHOMARDGen(dynamic_cast<SalomeApp_Application*>( app ));
134   anId = 0;
135   createActions();
136   createMenus();
137   recupPreferences();
138 }
139
140 //================================================
141 // function : createHOMARDAction
142 // create an item in status bar and Homard menu
143 //================================================
144 void HOMARDGUI::createHOMARDAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle  )
145 {
146 //   MESSAGE("createHOMARDAction");
147   QIcon icon;
148   QWidget* parent = application()->desktop();
149   SUIT_ResourceMgr* resMgr = application()->resourceMgr();
150   QPixmap pix;
151   if ( icon_id.length() )
152      pix = resMgr->loadPixmap( "HOMARD", tr( icon_id .toLatin1().data()) );
153   else
154      pix = resMgr->loadPixmap( "HOMARD", tr( QString( "ICO_%1" ).arg( po_id ).toLatin1().data()), false );
155   if ( !pix.isNull() )
156       icon = QIcon( pix );
157
158   QString tooltip    = tr(QString( "HOM_TOP_%1" ).arg( po_id ).toLatin1().data()),
159           menu       = tr(QString( "HOM_MEN_%1" ).arg( po_id ).toLatin1().data()),
160           status_bar = tr(QString( "HOM_STB_%1" ).arg( po_id ).toLatin1().data());
161
162   createAction( id, tooltip, icon, menu, status_bar, key, parent, toggle, this, SLOT( OnGUIEvent() )  );
163 }
164
165 //================================================
166 // function : createAction
167 // constructs Homard menu
168 // calls createHOMARDAction for each item
169 //================================================
170 void HOMARDGUI::createActions(){
171 //
172   createHOMARDAction( 1101, "NEW_CASE",         "cas_calcule.png"        );
173   createHOMARDAction( 1102, "PURSUE_ITERATION", "iter_poursuite.png"     );
174   createHOMARDAction( 1103, "NEW_ITERATION",    "iter_next.png"          );
175   createHOMARDAction( 1111, "COMPUTE",          "mesh_compute.png"       );
176   createHOMARDAction( 1112, "COMPUTE_PUBLISH",  "mesh_compute.png"       );
177   createHOMARDAction( 1121, "MESH_INFO",        "advanced_mesh_info.png" );
178   createHOMARDAction( 1131, "MESH_PUBLICATION", "mesh_tree_mesh.png"     );
179 //
180   createHOMARDAction( 1201, "EDIT",             "loop.png"         );
181   createHOMARDAction( 1211, "DELETE",           "delete.png"       );
182 //
183   createHOMARDAction( 1301, "MESH_INFO",        "advanced_mesh_info.png" );
184   createHOMARDAction( 1302, "EDIT_MESS_FILE",   "texte.png"              );
185 //
186   createHOMARDAction( 1401, "YACS",             "table_view.png" );
187 //
188 }
189
190 //================================================
191 // function : createPreferences
192 //================================================
193 void HOMARDGUI::createPreferences()
194 {
195   MESSAGE("createPreferences")
196
197   int Onglet, Bloc, Pref ;
198   // 1. Generalites
199   Onglet = addPreference( tr( "PREF_TAB_GENERAL" ) );
200 //   Onglet = addPreference( tr( "PREF_TAB_SETTINGS" ) ) ;
201
202   Bloc = addPreference( tr( "PREF_PUBLICATION" ), Onglet );
203   setPreferenceProperty( Bloc, "columns", 1 );
204
205   Pref = addPreference( tr( "PREF_PUBLICATION_MAILLAGE_IN" ), Bloc, LightApp_Preferences::Bool, "HOMARD", "publish_mesh_in" );
206
207   Pref = addPreference( tr( "PREF_PUBLICATION_MAILLAGE_OUT" ), Bloc, LightApp_Preferences::Bool, "HOMARD", "publish_mesh_out" );
208
209   // 2. YACS
210   Onglet = addPreference( tr( "PREF_YACS" ) ) ;
211
212   Bloc = addPreference( tr( "PREF_YACS_MAX" ), Onglet );
213   setPreferenceProperty( Bloc, "columns", 1 );
214
215   Pref = addPreference( tr( "PREF_YACS_MAX_ITER" ), Bloc, LightApp_Preferences::IntSpin, "HOMARD", "yacs_max_iter" );
216   setPreferenceProperty( Pref, "min",  0 );
217   setPreferenceProperty( Pref, "max",  100000000 );
218   setPreferenceProperty( Pref, "step", 1 );
219
220   Pref = addPreference( tr( "PREF_YACS_MAX_NODE" ), Bloc, LightApp_Preferences::IntSpin, "HOMARD", "yacs_max_node" );
221   setPreferenceProperty( Pref, "min",  0 );
222   setPreferenceProperty( Pref, "max",  100000000 );
223   setPreferenceProperty( Pref, "step", 1000 );
224
225   Pref = addPreference( tr( "PREF_YACS_MAX_ELEM" ), Bloc, LightApp_Preferences::IntSpin, "HOMARD", "yacs_max_elem" );
226   setPreferenceProperty( Pref, "min",  0 );
227   setPreferenceProperty( Pref, "max",  100000000 );
228   setPreferenceProperty( Pref, "step", 1000 );
229
230   Bloc = addPreference( tr( "PREF_YACS_CONVERGENCE" ), Onglet );
231   setPreferenceProperty( Bloc, "columns", 1 );
232
233   Pref = addPreference( tr( "PREF_YACS_TYPE_TEST" ), Bloc, LightApp_Preferences::Selector, "HOMARD", "yacs_type_test" );
234   QStringList aListOfTypeTest;
235   aListOfTypeTest << "None";
236   aListOfTypeTest << "VTest > VRef";
237   aListOfTypeTest << "VTest < VRef";
238   setPreferenceProperty( Pref, "strings", aListOfTypeTest );
239 }
240
241
242 //================================================
243 // function : createMenus
244 //================================================
245 void HOMARDGUI::createMenus()
246 {
247   MESSAGE("createMenus")
248 //
249   int HOMARD_Id  = createMenu( tr( "HOM_MEN_HOMARD" ),  -1,  5, 10 );
250   createMenu( 1101, HOMARD_Id, -1 ); //Create_Case
251   createMenu( 1102, HOMARD_Id, -1 ); //Pursue_Iteration
252   createMenu( separator(), HOMARD_Id,-1);
253   createMenu( 1103, HOMARD_Id, -1 ); //Create_Iteration
254   createMenu( 1111, HOMARD_Id, -1 ); //Compute
255   createMenu( 1112, HOMARD_Id, -1 ); //Compute and publish
256 //
257   HOMARD_Id  = createMenu( tr( "HOM_MEN_MODIFICATION" ),  -1,  5, 10 );
258   createMenu( 1201, HOMARD_Id, -1 ); //Edit
259   createMenu( 1211, HOMARD_Id, -1 ); //Delete
260 //
261   HOMARD_Id  = createMenu( tr( "HOM_MEN_INFORMATION" ),  -1,  5, 10 );
262   createMenu( 1301, HOMARD_Id, -1 ); //Information sur un maillage
263   createMenu( 1131, HOMARD_Id, -1 ); //Mesh publication
264   createMenu( separator(), HOMARD_Id,-1);
265   createMenu( 1302, HOMARD_Id, -1 ); //EditAsciiFile pour le fichier listeStd ou bilan
266   createMenu( separator(), HOMARD_Id,-1);
267   createMenu( 1201, HOMARD_Id, -1 ); //Edit
268   createMenu( separator(), HOMARD_Id,-1);
269 //
270   HOMARD_Id  = createMenu( tr( "HOM_MEN_YACS" ),  -1,  5, 10 );
271   createMenu( 1401, HOMARD_Id, -1 ); // Création d'un schéma YACS
272   createMenu( separator(), HOMARD_Id,-1);
273 }
274
275 //================================================
276 // function : recupPreferences
277 // Pour chaque valeur, le defaut est la valeur definie dans HOMARD_Gen
278 // . Si la recuperation dans config/salome s'est bien passee a la creation de HOMARD_Gen,
279 //   ces valeurs sont les valeurs definies.
280 // . Si cela ne s'est pas bien passe, ce sont les valeurs par defaut de HOMARD_Gen
281 //================================================
282 void HOMARDGUI::recupPreferences()
283 {
284   INFOS("recupPreferences")
285 //
286 // A. Declarations
287 //
288   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( application() );
289   HOMARD::HOMARD_Gen_var homardGen = HOMARDGUI::InitHOMARDGen(app);
290   int defaut_i ;
291   std::string defaut_s ;
292   QString QString_v ;
293 //
294 // B. Les valeurs
295 // B.1. La langue
296 //
297   SUIT_ResourceMgr* resMgr0 = getApp()->resourceMgr();
298   QString lang = resMgr0->stringValue( resMgr0->langSection(), "language", "en" );
299   INFOS ("Récupération de lang = " << lang.toStdString().c_str() );
300   defaut_s = homardGen->GetLanguageShort();
301   INFOS ("Récupération de defaut_s = " << defaut_s.c_str() );
302   SUIT_ResourceMgr* resMgr = getApp()->resourceMgr();
303   _LanguageShort = resMgr->stringValue("language", "language", QString(defaut_s.c_str()) );
304   INFOS ("Récupération de LanguageShort = " << _LanguageShort.toStdString().c_str() );
305 //
306 // B.2. Les publications
307   bool publish_mesh ;
308 //
309   _PublisMeshIN = homardGen->GetPublisMeshIN();
310   if ( _PublisMeshIN == 1 ) { publish_mesh = true ;  }
311   else                      { publish_mesh = false ; }
312   publish_mesh = resMgr->booleanValue("HOMARD", "publish_mesh_in", publish_mesh );
313   if ( publish_mesh ) { _PublisMeshIN = 1 ; }
314   else                { _PublisMeshIN = 0 ; }
315 //
316   _PublisMeshOUT = homardGen->GetPublisMeshOUT();
317   if ( _PublisMeshOUT == 1 ) { publish_mesh = true ;  }
318   else                       { publish_mesh = false ; }
319   publish_mesh = resMgr->booleanValue("HOMARD", "publish_mesh_out", publish_mesh );
320   if ( publish_mesh ) { _PublisMeshOUT = 1 ; }
321   else                { _PublisMeshOUT = 0 ; }
322 //
323 // B.3. Les maximum pour YACS
324 //
325   defaut_i = homardGen->GetYACSMaxIter();
326   _YACSMaxIter = resMgr->integerValue("HOMARD", "yacs_max_iter", defaut_i );
327 //
328   defaut_i = homardGen->GetYACSMaxNode();
329   _YACSMaxNode = resMgr->integerValue("HOMARD", "yacs_max_node", defaut_i );
330 //
331   defaut_i = homardGen->GetYACSMaxElem();
332   _YACSMaxElem = resMgr->integerValue("HOMARD", "yacs_max_elem", defaut_i );
333 //
334 // B.4. La convergence pour YACS
335 //
336   defaut_i = homardGen->GetYACSConvergenceType();
337   if ( defaut_i == 1 )      { QString_v = tr("VTest > VRef") ; }
338   else if ( defaut_i == 2 ) { QString_v = tr("VTest < VRef") ; }
339   else                      { QString_v = tr("None") ; }
340   QString_v = resMgr->stringValue ( "HOMARD", "yacs_type_test", QString_v );
341   if ( ( QString_v == "VTest > VRef" ) || ( QString_v == "VTest &gt; VRef" ) )      { _YACSTypeTest = 1 ; }
342   else if ( ( QString_v == "VTest < VRef" ) || ( QString_v == "VTest &lt; VRef" ) ) { _YACSTypeTest = 2 ; }
343   else                                                                              { _YACSTypeTest = 0 ; }
344 //
345 // C. Enregistrement dans l'objet general
346 //
347   INFOS ("Enregistrement de LanguageShort = " << _LanguageShort.toStdString().c_str() );
348   INFOS ("Enregistrement de PublisMeshIN = " << _PublisMeshIN<<", PublisMeshOUT = "<< _PublisMeshOUT);
349   INFOS ("Enregistrement de YACSMaxIter = " << _YACSMaxIter<<", YACSMaxNode = "<< _YACSMaxNode<<", YACSMaxElem = "<< _YACSMaxElem);
350   INFOS ("Enregistrement de YACSTypeTest = " << _YACSTypeTest);
351 //
352   homardGen->SetLanguageShort(_LanguageShort.toStdString().c_str());
353   homardGen->SetPublisMesh(_PublisMeshIN, _PublisMeshOUT);
354   homardGen->SetYACSMaximum(_YACSMaxIter, _YACSMaxNode, _YACSMaxElem);
355 //
356   homardGen->SetYACSConvergenceType(_YACSTypeTest);
357 }
358
359 //================================================
360 void HOMARDGUI::OnGUIEvent()
361 //================================================
362 {
363   MESSAGE("OnGUIEvent()")
364   setOrb();
365   const QObject* obj = sender();
366   if ( !obj || !obj->inherits( "QAction" ) ) { return; }
367   int id = actionId((QAction*)obj);
368   if ( id != -1 ) { bool ret = OnGUIEvent( id ); }
369   MESSAGE("Fin de OnGUIEvent()");
370 }
371
372 //=======================================================================
373 // Method OnGUIEvent pour Homard
374 //=======================================================================
375 bool HOMARDGUI::OnGUIEvent (int theCommandID)
376 {
377   MESSAGE("OnGUIEvent avec theCommandID = "<<theCommandID);
378 // A. Controles
379   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( application() );
380   if ( !app ) return false;
381
382   SalomeApp_Study* stud = dynamic_cast<SalomeApp_Study*> ( app->activeStudy() );
383   if ( !stud )
384   {
385     MESSAGE ( "FAILED to cast active study to SalomeApp_Study" );
386     return false;
387   }
388
389   SUIT_Desktop* parent = application()->desktop();
390
391   HOMARD::HOMARD_Gen_var homardGen = HOMARDGUI::InitHOMARDGen(app);
392
393   if (!CORBA::is_nil(homardGen))
394     homardGen->UpdateStudy();
395
396   getApp()->updateObjectBrowser();
397
398 // B. Choix selon les commandes
399   SCRUTE(theCommandID);
400   switch (theCommandID)
401   {
402     case 1101: // Creation d un Cas
403     {
404       MESSAGE("command " << theCommandID << " activated");
405       MonCreateCase *aDlg = new MonCreateCase( true,
406                             HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
407       aDlg->show();
408       break;
409     }
410
411     case 1102: // Poursuite d une iteration
412     {
413       MESSAGE("command " << theCommandID << " activated");
414       MonPursueIteration *aDlg = new MonPursueIteration( true,
415                                 HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
416       aDlg->show();
417       break;
418     }
419
420     case 1103: // Creation d une Iteration
421     {
422       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
423       MonCreateIteration *IterDlg = new MonCreateIteration( parent, true,
424                                      HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
425       IterDlg->show();
426       break;
427     }
428
429     case 1111: // Compute une iteration
430     {
431       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
432       try { homardGen->Compute(_ObjectName.toStdString().c_str(), 0, 1, -1, 1); }
433       catch( SALOME::SALOME_Exception& S_ex )
434       {
435         QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
436                                   QObject::tr(CORBA::string_dup(S_ex.details.text)) );
437         getApp()->updateObjectBrowser();
438         return false;
439       }
440       break;
441     }
442
443     case 1112: // Compute une iteration et publication
444     {
445       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
446       try { homardGen->Compute(_ObjectName.toStdString().c_str(), 0, 1, -1, 2); }
447       catch( SALOME::SALOME_Exception& S_ex )
448       {
449         QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
450                                   QObject::tr(CORBA::string_dup(S_ex.details.text)) );
451         getApp()->updateObjectBrowser();
452         return false;
453       }
454       break;
455     }
456
457     case 1121: // Information sur le maillage de l'iteration
458     {
459       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
460       MonIterInfo *IterDlg = new MonIterInfo( parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
461       IterDlg->show();
462       break;
463     }
464
465     case 1131: // Publication du maillage de l'iteration
466     {
467       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
468       homardGen->PublishMeshIterInSmesh(_ObjectName.toStdString().c_str());
469       break;
470     }
471
472     case 1132: // Publication du maillage de l'iteration a partir du fichier
473     {
474       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
475       homardGen->PublishResultInSmesh(_ObjectName.toStdString().c_str(), 1);
476       break;
477     }
478
479     case 1201: // Edition d'un objet
480     {
481       MESSAGE("command " << theCommandID << " activated");
482       QString nomObjet = HOMARD_QT_COMMUN::SelectionArbreEtude(QString(""), 1);
483       if (nomObjet == QString("")) break;
484       _PTR(SObject) obj = chercheMonObjet();
485       if (obj)
486       {
487         // Edition d'une frontiere CAO
488         if (HOMARD_UTILS::isBoundaryCAO(obj))
489         {
490           MonEditBoundaryCAO *aDlg = new MonEditBoundaryCAO(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
491           aDlg->show();
492         }
493         // Edition d'une frontiere discrete
494         else if (HOMARD_UTILS::isBoundaryDi(obj))
495         {
496           MonEditBoundaryDi *aDlg = new MonEditBoundaryDi(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
497           aDlg->show();
498         }
499         // Edition d'une frontiere analytique
500         else if (HOMARD_UTILS::isBoundaryAn(obj))
501         {
502           MonEditBoundaryAn *aDlg = new MonEditBoundaryAn(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
503           aDlg->show();
504         }
505         // Edition d'un cas
506         else if (HOMARD_UTILS::isCase(obj))
507         {
508           MonEditCase *aDlg = new MonEditCase(true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
509           aDlg->show();
510         }
511         // Edition d'une hypothese
512         else if (HOMARD_UTILS::isHypo(obj))
513         {
514           MonEditHypothesis *aDlg = new MonEditHypothesis(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen),  _ObjectName, QString(""), QString("")) ;
515           aDlg->show();
516         }
517         // Edition d'une iteration
518         else if (HOMARD_UTILS::isIter(obj))
519         {
520           MonEditIteration *aDlg = new MonEditIteration(parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
521           aDlg->show();
522         }
523         // Edition d'un schema YACS
524         else if (HOMARD_UTILS::isYACS(obj))
525         {
526           MESSAGE("appel de MonEditYACS");
527           MonEditYACS *aDlg = new MonEditYACS(true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName) ;
528           aDlg->show();
529         }
530         // Edition d'une zone
531         else if (HOMARD_UTILS::isZone(obj))
532         {
533           MonEditZone *aDlg = new MonEditZone(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
534           aDlg->show();
535         }
536       }
537       break;
538     }
539
540     case 1211: // Suppression d'un objet
541     {
542       MESSAGE("command " << theCommandID << " activated");
543       QString nomObjet = HOMARD_QT_COMMUN::SelectionArbreEtude(QString(""), 1);
544       if (nomObjet == QString("")) break;
545       _PTR(SObject) obj = chercheMonObjet();
546       if (obj)
547       {
548         // Suppression d'une frontiere
549         if ( HOMARD_UTILS::isBoundaryCAO(obj) || HOMARD_UTILS::isBoundaryDi(obj) || HOMARD_UTILS::isBoundaryAn(obj) )
550         {
551           try
552           { homardGen->DeleteBoundary(_ObjectName.toStdString().c_str()); }
553           catch( SALOME::SALOME_Exception& S_ex )
554           {
555             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
556                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
557             getApp()->updateObjectBrowser();
558             return false;
559           }
560         }
561         // Suppression d'un cas
562         else if (HOMARD_UTILS::isCase(obj))
563         {
564           try
565           { homardGen->DeleteCase(_ObjectName.toStdString().c_str(), 1); }
566           catch( SALOME::SALOME_Exception& S_ex )
567           {
568             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
569                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
570             getApp()->updateObjectBrowser();
571             return false;
572           }
573         }
574         // Suppression d'une hypothese
575         else if (HOMARD_UTILS::isHypo(obj))
576         {
577           try
578           { homardGen->DeleteHypo(_ObjectName.toStdString().c_str()); }
579           catch( SALOME::SALOME_Exception& S_ex )
580           {
581             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
582                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
583             getApp()->updateObjectBrowser();
584             return false;
585           }
586         }
587         // Suppression d'une iteration
588         else if (HOMARD_UTILS::isIter(obj))
589         {
590           try
591           { homardGen->DeleteIteration(_ObjectName.toStdString().c_str(), 1); }
592           catch( SALOME::SALOME_Exception& S_ex )
593           {
594             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
595                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
596             getApp()->updateObjectBrowser();
597             return false;
598           }
599         }
600         // Suppression d'un schema YACS
601         else if (HOMARD_UTILS::isYACS(obj))
602         {
603           try
604           { homardGen->DeleteYACS(_ObjectName.toStdString().c_str(), 1); }
605           catch( SALOME::SALOME_Exception& S_ex )
606           {
607             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
608                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
609             getApp()->updateObjectBrowser();
610             return false;
611           }
612         }
613         // Suppression d'une zone
614         else if (HOMARD_UTILS::isZone(obj))
615         {
616           try
617           { homardGen->DeleteZone(_ObjectName.toStdString().c_str()); }
618           catch( SALOME::SALOME_Exception& S_ex )
619           {
620             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
621                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
622             getApp()->updateObjectBrowser();
623             return false;
624           }
625         }
626       }
627       break;
628     }
629
630     case 1301: // Information sur un maillage
631     {
632       MESSAGE("etape 1301")
633       MESSAGE("command " << theCommandID << " activated");
634       MonMeshInfo *aDlg = new MonMeshInfo( parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
635       aDlg->show();
636       break;
637     }
638
639     case 1302: // Affichage de fichier texte
640     {
641       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
642       _PTR(SObject) obj = chercheMonObjet();
643       if ( (obj) && ( HOMARD_UTILS::isFileType(obj,QString("log")) || HOMARD_UTILS::isFileType(obj,QString("Summary")) || HOMARD_UTILS::isFileType(obj,QString("xml")) ) )
644       {
645           MonEditFile *aDlg = new MonEditFile( 0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName, 0 ) ;
646           if ( aDlg->_codret == 0 ) { aDlg->show(); }
647       }
648       break;
649     }
650
651     case 1401: // Création d'un schema YACS
652     {
653       MESSAGE("etape 1401")
654       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
655       MonCreateYACS *aDlg = new MonCreateYACS( true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
656       aDlg->show();
657       break;
658     }
659
660     case 1402: // Ecriture d'un schéma YACS
661     {
662       MESSAGE("etape 1402")
663       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
664       try { homardGen->YACSWrite(_ObjectName.toStdString().c_str()); }
665       catch( SALOME::SALOME_Exception& S_ex )
666       {
667         QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
668                                   QObject::tr(CORBA::string_dup(S_ex.details.text)) );
669         getApp()->updateObjectBrowser();
670         return false;
671       }
672       break;
673     }
674
675   }
676   getApp()->updateObjectBrowser();
677   return true;
678 }
679
680 //=============================================================================
681 /*!
682  *
683  */
684 //=============================================================================
685
686 // Module's engine IOR
687 //=============================================================================
688 QString HOMARDGUI::engineIOR() const
689 //=============================================================================
690 {
691   CORBA::String_var anIOR = getApp()->orb()->object_to_string( InitHOMARDGen(getApp()) );
692   return QString( anIOR.in() );
693 }
694
695 // Module's activation
696 //=============================================================================
697 bool HOMARDGUI::activateModule( SUIT_Study* theStudy )
698 //=============================================================================
699 {
700   bool bOk = SalomeApp_Module::activateModule( theStudy );
701
702   setMenuShown( true );
703   setToolShown( true );
704
705   return bOk;
706 }
707
708 // Module's deactivation
709 //=============================================================================
710 bool HOMARDGUI::deactivateModule( SUIT_Study* theStudy )
711 //=============================================================================
712 {
713   setMenuShown( false );
714   setToolShown( false );
715
716   return SalomeApp_Module::deactivateModule( theStudy );
717 }
718
719 // Default windows
720 //=============================================================================
721 void HOMARDGUI::windows( QMap<int, int>& theMap ) const
722 //=============================================================================
723 {
724   theMap.clear();
725   theMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
726 #ifndef DISABLE_PYCONSOLE
727   theMap.insert( SalomeApp_Application::WT_PyConsole,     Qt::BottomDockWidgetArea );
728 #endif
729 }
730
731 //=============================================================================
732 void HOMARDGUI::setOrb()
733 //=============================================================================
734 {
735   try
736   {
737      _orb = KERNEL::GetRefToORB();
738   }
739   catch (...)
740   {
741      INFOS("internal error : orb not found");
742      _orb = 0;
743   }
744             ASSERT(! CORBA::is_nil(_orb));
745 }
746 //========================================
747 _PTR(SObject) HOMARDGUI::chercheMonObjet()
748 //========================================
749 {
750   SALOMEDSClient_SObject* aSO = NULL;
751   _PTR(SObject) obj;
752   SALOME_ListIO lst;
753   getApp()->selectionMgr()->selectedObjects( lst );
754   if (  lst.Extent() == 1 )
755   {
756     Handle(SALOME_InteractiveObject) io = lst.First();
757     SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
758     _PTR(Study) study = appStudy->studyDS();
759     _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
760     _ObjectName = QString( obj->GetName().c_str() );
761     return obj;
762   }
763   else { return _PTR(SObject)(aSO); }
764 }
765 //=============================================================================
766 void HOMARDGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
767 //=============================================================================
768 {
769   MESSAGE("Debut de contextMenuPopup");
770   _PTR(SObject) obj = chercheMonObjet();
771   if ( obj )
772   {
773     title = QString( obj->GetName().c_str() );
774     _ObjectName = title;
775     SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
776 //
777     QPixmap pix ;
778     bool DeleteObject = false ;
779     bool EditObject = false ;
780 //
781     if ( HOMARD_UTILS::isBoundaryCAO(obj) )
782     {
783       EditObject = true ;
784       DeleteObject = true ;
785     }
786     else if ( HOMARD_UTILS::isBoundaryAn(obj) )
787     {
788       EditObject = true ;
789       DeleteObject = true ;
790     }
791     else if ( HOMARD_UTILS::isBoundaryDi(obj) )
792     {
793       EditObject = true ;
794       DeleteObject = true ;
795     }
796     else if ( HOMARD_UTILS::isCase(obj) )
797     {
798       pix = resMgr->loadPixmap( "HOMARD", "table_view.png" );
799       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_YACS").toLatin1().data()), this, SLOT(YACSCreate()));
800       EditObject = true ;
801       DeleteObject = true ;
802     }
803     else if ( HOMARD_UTILS::isHypo(obj) )
804     {
805       EditObject = true ;
806       DeleteObject = true ;
807     }
808     else if ( HOMARD_UTILS::isIter(obj) )
809     {
810       pix = resMgr->loadPixmap( "HOMARD", "iter_next.png" );
811       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_NEW_ITERATION").toLatin1().data()), this, SLOT(NextIter()));
812       pix = resMgr->loadPixmap( "HOMARD", "mesh_compute.png" );
813       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_COMPUTE").toLatin1().data()), this, SLOT(LanceCalcul0()));
814       pix = resMgr->loadPixmap( "HOMARD", "mesh_compute.png" );
815       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_COMPUTE_PUBLISH").toLatin1().data()), this, SLOT(LanceCalcul1()));
816       pix = resMgr->loadPixmap( "HOMARD", "advanced_mesh_info.png" );
817       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_MESH_INFO").toLatin1().data()), this, SLOT(IterInfo()));
818       pix = resMgr->loadPixmap( "HOMARD", "mesh_tree_mesh.png" );
819       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_MESH_PUBLICATION").toLatin1().data()), this, SLOT(MeshPublish0()));
820       EditObject = true ;
821       DeleteObject = true ;
822     }
823     else if ( HOMARD_UTILS::isYACS(obj) )
824     {
825       pix = resMgr->loadPixmap( "HOMARD", "write.png" );
826       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_WRITE").toLatin1().data()), this, SLOT(YACSWrite()));
827       EditObject = true ;
828       DeleteObject = true ;
829     }
830     else if ( HOMARD_UTILS::isZone(obj) )
831     {
832       EditObject = true ;
833       DeleteObject = true ;
834     }
835     else if ( HOMARD_UTILS::isFileType(obj,QString("log")) || HOMARD_UTILS::isFileType(obj,QString("Summary")) || HOMARD_UTILS::isFileType(obj,QString("xml")) )
836     {
837       pix = resMgr->loadPixmap( "HOMARD", "texte.png" );
838       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_MESS_FILE").toLatin1().data()), this, SLOT(EditAsciiFile()));
839     }
840     else if ( HOMARD_UTILS::isFileType(obj,QString("Mesh")) )
841     {
842       pix = resMgr->loadPixmap( "HOMARD", "mesh_tree_mesh.png" );
843       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_MESH_PUBLICATION").toLatin1().data()), this, SLOT(MeshPublish1()));
844     }
845 //  Ajout d'un menu d'edition pour les objets qui le proposent
846     if ( EditObject )
847     {
848       pix = resMgr->loadPixmap( "HOMARD", "loop.png" );
849       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT").toLatin1().data()), this, SLOT(Edit()));
850     }
851 //  Ajout d'un menu de destruction pour les objets qui le proposent
852     if ( DeleteObject )
853     {
854       pix = resMgr->loadPixmap( "HOMARD", "delete.png" );
855       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_DELETE").toLatin1().data()), this, SLOT(Delete()));
856     }
857   }
858 }
859
860 void HOMARDGUI::NextIter()
861 {
862   this->OnGUIEvent(1103);
863 }
864
865 void HOMARDGUI::LanceCalcul0()
866 {
867   this->OnGUIEvent(1111);
868 }
869
870 void HOMARDGUI::LanceCalcul1()
871 {
872   this->OnGUIEvent(1112);
873 }
874
875 void HOMARDGUI::IterInfo()
876 {
877   this->OnGUIEvent(1121);
878 }
879
880 void HOMARDGUI::MeshPublish0()
881 {
882   this->OnGUIEvent(1131);
883 }
884
885 void HOMARDGUI::MeshPublish1()
886 {
887   this->OnGUIEvent(1132);
888 }
889
890 void HOMARDGUI::Edit()
891 {
892   this->OnGUIEvent(1201);
893 }
894
895 void HOMARDGUI::Delete()
896 {
897   this->OnGUIEvent(1211);
898 }
899
900 void HOMARDGUI::EditAsciiFile()
901 {
902   this->OnGUIEvent(1302);
903 }
904
905 void HOMARDGUI::YACSCreate()
906 {
907   this->OnGUIEvent(1401);
908 }
909 void HOMARDGUI::YACSWrite()
910 {
911   this->OnGUIEvent(1402);
912 }
913
914
915 //
916 //=============================================================================
917 // Export the module
918 //=============================================================================
919 extern "C" {
920   Standard_EXPORT CAM_Module* createModule()
921   {
922     return new HOMARDGUI("");
923   }
924 }
925