Salome HOME
d87061fe7e8d021be6cedcc01f5b1ce8654df403
[modules/homard.git] / src / HOMARDGUI / HOMARDGUI.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 //  File   : HOMARDGUI.cxx
21 //  Author : Paul RASCLE, EDF
22 //  Module : HOMARD
23
24 using namespace std;
25 #include "HOMARDGUI.h"
26
27 // SALOME Includes
28 #include "Utils_ORB_INIT.hxx"
29 #include "Utils_SINGLETON.hxx"
30 #include "SALOME_LifeCycleCORBA.hxx"
31
32 #include "SUIT_ResourceMgr.h"
33 #include "SUIT_MessageBox.h"
34 #include "SUIT_Session.h"
35 #include "SUIT_ViewWindow.h"
36 #include "SUIT_ViewManager.h"
37 #include <SUIT_Desktop.h>
38
39 #include "CAM_Module.h"
40 #include "OB_Browser.h"
41
42 #include "SALOME_ListIO.hxx"
43 #include "SALOME_ListIteratorOfListIO.hxx"
44
45 #include "SalomeApp_Application.h"
46 #include "SalomeApp_DataModel.h"
47 #include "SalomeApp_Study.h"
48 #include "LightApp_SelectionMgr.h"
49 #include "LightApp_Selection.h"
50 #include <LightApp_Preferences.h>
51 #include "SalomeApp_Module.h"
52 #include "SALOMEconfig.h"
53 #include <SALOME_LifeCycleCORBA.hxx>
54
55 #include <utilities.h>
56
57
58 // QT Includes
59 #include <QMenu>
60 #include "MonCreateCase.h"
61 #include "MonCreateIteration.h"
62 #include "MonPursueIteration.h"
63 #include "MonEditFile.h"
64 #include "MonEditCase.h"
65 #include "MonEditIteration.h"
66 #include "MonEditHypothesis.h"
67 #include "MonEditZone.h"
68 #include "MonEditBoundaryAn.h"
69 #include "MonEditBoundaryDi.h"
70 #include "MonMeshInfo.h"
71 #include "MonIterInfo.h"
72 #include "HomardQtCommun.h"
73
74 // BOOST Includes
75 #include <boost/shared_ptr.hpp>
76
77 //Pour le _CAST
78 #include "SALOMEDS_Study.hxx"
79 #include "HOMARDGUI_Utils.h"
80
81 static CORBA::ORB_var _orb;
82
83 //=======================================================================
84 // function : HOMARDGUI()
85 // purpose  : Constructor
86 //=======================================================================
87 HOMARDGUI::HOMARDGUI(const QString&) :
88            SalomeApp_Module( "HOMARD" ) // default name
89 {
90 }
91
92
93 //=======================================================================
94 // function : ~HOMARDGUI()
95 // purpose  : Destructor
96 //=======================================================================
97 HOMARDGUI::~HOMARDGUI()
98 {
99 }
100
101 //=======================================================================
102 // function : InitHOMARDGen
103 // launch HOMARD component and return a handle
104 //=======================================================================
105 HOMARD::HOMARD_Gen_var HOMARDGUI::InitHOMARDGen(SalomeApp_Application* app)
106 {
107   Engines::EngineComponent_var comp = app->lcc()->FindOrLoad_Component( "FactoryServer","HOMARD" );
108   HOMARD::HOMARD_Gen_var clr = HOMARD::HOMARD_Gen::_narrow(comp);
109   ASSERT(!CORBA::is_nil(clr));
110   return clr;
111 }
112
113 //=======================================================================
114 // Module's initialization
115 void HOMARDGUI::initialize( CAM_Application* app )
116 //=======================================================================
117 {
118   SalomeApp_Module::initialize( app );
119   InitHOMARDGen(dynamic_cast<SalomeApp_Application*>( app ));
120   anId = 0;
121   createActions();
122   createMenus();
123 }
124
125 //================================================
126 // function : createHOMARDAction
127 // create an item in status bar and Homard menu
128 //================================================
129 void HOMARDGUI::createHOMARDAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle  )
130 {
131 //   MESSAGE("createHOMARDAction");
132   QIcon icon;
133   QWidget* parent = application()->desktop();
134   SUIT_ResourceMgr* resMgr = application()->resourceMgr();
135   QPixmap pix;
136   if ( icon_id.length() )
137      pix = resMgr->loadPixmap( "HOMARD", tr( icon_id .toLatin1().data()) );
138   else
139      pix = resMgr->loadPixmap( "HOMARD", tr( QString( "ICO_%1" ).arg( po_id ).toLatin1().data()), false );
140   if ( !pix.isNull() )
141       icon = QIcon( pix );
142
143   QString tooltip    = tr(QString( "HOM_TOP_%1" ).arg( po_id ).toLatin1().data()),
144           menu       = tr(QString( "HOM_MEN_%1" ).arg( po_id ).toLatin1().data()),
145           status_bar = tr(QString( "HOM_STB_%1" ).arg( po_id ).toLatin1().data());
146
147   createAction( id, tooltip, icon, menu, status_bar, key, parent, toggle, this, SLOT( OnGUIEvent() )  );
148 }
149
150 //================================================
151 // function : createAction
152 // constructs Homard menu
153 // calls createHOMARDAction for each item
154 //================================================
155 void HOMARDGUI::createActions(){
156 //
157   createHOMARDAction( 1101, "NEW_CASE",         "cas_calcule.png"        );
158   createHOMARDAction( 1102, "PURSUE_ITERATION", "iter_poursuite.png"     );
159   createHOMARDAction( 1103, "NEW_ITERATION",    "iter_next.png"          );
160   createHOMARDAction( 1111, "COMPUTE",          "mesh_compute.png"       );
161   createHOMARDAction( 1121, "MESH_INFO",        "advanced_mesh_info.png" );
162 //
163   createHOMARDAction( 1201, "EDIT",             "whatis.png"       );
164   createHOMARDAction( 1211, "DELETE",           "delete.png"       );
165 //
166   createHOMARDAction( 1301, "MESH_INFO",        "advanced_mesh_info.png" );
167   createHOMARDAction( 1302, "EDIT_MESS_FILE",   "texte.png"              );
168 //
169 }
170
171 //================================================
172 // function : createPreferences
173 // No preferences for Homard
174 // Just a test
175 //================================================
176 void HOMARDGUI::createPreferences(){
177    QString toto = tr( "PREF_GROUP_GENERAL" );
178    int tabId  = addPreference( tr( "PREF_GROUP_GENERAL" ) );
179    int genGroup = addPreference( tr( "PREF_TAB_SETTINGS" ), tabId );
180    addPreference( tr( "PREF_TEST" ), genGroup, LightApp_Preferences::Color, "Homard", "shading_color" );
181 }
182
183
184 //================================================
185 // function : createMenus
186 //                Verifier l'avant dernier nombre passe en parametre
187 //================================================
188 void HOMARDGUI::createMenus(){
189   MESSAGE("createMenus")
190 //
191   int HOMARD_Id  = createMenu( tr( "HOM_MEN_HOMARD" ),  -1,  5, 10 );
192   createMenu( 1101, HOMARD_Id, -1 ); //Create_Case
193   createMenu( 1102, HOMARD_Id, -1 ); //Pursue_Iteration
194   createMenu( 1103, HOMARD_Id, -1 ); //Create_Iteration
195   createMenu( 1111, HOMARD_Id, -1 ); //COMPUTE
196 //
197   HOMARD_Id  = createMenu( tr( "HOM_MEN_MODIFICATION" ),  -1,  5, 10 );
198   createMenu( 1201, HOMARD_Id, -1 ); //Edit
199   createMenu( 1211, HOMARD_Id, -1 ); //Delete
200 //
201   HOMARD_Id  = createMenu( tr( "HOM_MEN_INFORMATION" ),  -1,  5, 10 );
202   createMenu( 1301, HOMARD_Id, -1 ); //Information sur un maillage
203   createMenu( separator(), HOMARD_Id,-1);
204   createMenu( 1302, HOMARD_Id, -1 ); //EditAsciiFile pour le fichier listeStd ou bilan
205   createMenu( separator(), HOMARD_Id,-1);
206   createMenu( 1201, HOMARD_Id, -1 ); //Edit
207   createMenu( separator(), HOMARD_Id,-1);
208 //   createMenu( 1201, HOMARD_Id, -1 ); //Edit
209 // La langue des preferences
210   SUIT_ResourceMgr* resMgr = getApp()->resourceMgr();
211   QString lang = resMgr->stringValue("language", "language", "en");
212   MESSAGE("lang " << lang.toStdString().c_str() );
213 }
214
215 //================================================
216 void HOMARDGUI::OnGUIEvent()
217 //================================================
218 {
219   MESSAGE("OnGUIEvent()")
220   setOrb();
221   const QObject* obj = sender();
222   if ( !obj || !obj->inherits( "QAction" ) )
223        return;
224   int id = actionId((QAction*)obj);
225   bool ret;
226   if ( id != -1 )
227       ret = OnGUIEvent( id );
228   MESSAGE("************** End of OnGUIEvent()");
229 }
230
231 //=======================================================================
232 // Method OnGUIEvent pour Homard
233 //=======================================================================
234 bool HOMARDGUI::OnGUIEvent (int theCommandID)
235 {
236   MESSAGE("OnGUIEvent(int)");
237   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( application() );
238   if ( !app ) return false;
239
240   SalomeApp_Study* stud = dynamic_cast<SalomeApp_Study*> ( app->activeStudy() );
241   if ( !stud ) {
242     MESSAGE ( "FAILED to cast active study to SalomeApp_Study" );
243     return false;
244   }
245
246   SUIT_Desktop* parent = application()->desktop();
247   HOMARD::HOMARD_Gen_var homardGen = HOMARDGUI::InitHOMARDGen(app);
248
249   if (!CORBA::is_nil(homardGen))
250   {
251     // Set current study
252     SalomeApp_Study* aSAStudy =dynamic_cast<SalomeApp_Study*>(app->activeStudy());
253     _PTR(Study) aStudy = aSAStudy->studyDS();
254     SALOMEDS::Study_ptr aStudyDS;
255     if (aStudy)
256       aStudyDS = _CAST(Study,aStudy)->GetStudy();
257       homardGen->SetCurrentStudy(aStudyDS);
258    }
259   getApp()->updateObjectBrowser();
260
261
262   SCRUTE(theCommandID);
263   switch (theCommandID)
264   {
265     case 1101: // Creation d un Cas
266     {
267       MESSAGE("command " << theCommandID << " activated");
268       MonCreateCase *aDlg = new MonCreateCase( parent, true,
269                             HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
270       aDlg->show();
271       break;
272     }
273
274     case 1102: // Poursuite d une iteration
275     {
276       MESSAGE("command " << theCommandID << " activated");
277       MonPursueIteration *aDlg = new MonPursueIteration( parent, true,
278                                 HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
279       aDlg->show();
280       break;
281     }
282
283     case 1103: // Creation d une Iteration
284     {
285       MESSAGE("command " << theCommandID << " activated");
286       QString IterParentName=HOMARD_QT_COMMUN::SelectionArbreEtude(QString("IterationHomard"), 0);
287       MESSAGE("IterParentName " << IterParentName.toStdString().c_str() << " choisi dans arbre");
288       MonCreateIteration *IterDlg = new MonCreateIteration( parent, true,
289                                      HOMARD::HOMARD_Gen::_duplicate(homardGen), IterParentName ) ;
290       IterDlg->show();
291       break;
292     }
293
294     case 1111: // Compute une Iteration
295     {
296       MESSAGE("command " << theCommandID << " activated");
297       QString monIter=HOMARD_QT_COMMUN::SelectionArbreEtude(QString("IterationHomard"), 1);
298       if (monIter == QString("")) break;
299       try
300       {
301         homardGen->Compute(monIter.toStdString().c_str(), 0, 1, -1, 2);
302       }
303       catch( SALOME::SALOME_Exception& S_ex )
304       {
305         QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
306                                   QObject::tr(CORBA::string_dup(S_ex.details.text)) );
307         getApp()->updateObjectBrowser();
308         return false;
309       }
310       break;
311     }
312
313     case 1121: // Information sur le maillage de l'iteration
314     {
315       MESSAGE("command " << theCommandID << " activated");
316       QString IterName=HOMARD_QT_COMMUN::SelectionArbreEtude(QString("IterationHomard"), 0);
317       MESSAGE("IterName " << IterName.toStdString().c_str() << " choisi dans arbre");
318       MonIterInfo *IterDlg = new MonIterInfo( parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), IterName ) ;
319       IterDlg->show();
320       break;
321     }
322
323     case 1201: // Edition d'un objet
324     {
325       MESSAGE("command " << theCommandID << " activated");
326       QString nomObjet = HOMARD_QT_COMMUN::SelectionArbreEtude(QString(""), 1);
327       if (nomObjet == QString("")) break;
328       _PTR(SObject) obj = chercheMonObjet();
329       if (obj)
330       {
331         // Edition d'un cas
332         if (HOMARD_UTILS::isCase(obj))
333         {
334           MonEditCase *aDlg = new MonEditCase(parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
335           aDlg->show();
336         }
337         // Edition d'une iteration
338         else if (HOMARD_UTILS::isIter(obj))
339         {
340           MonEditIteration *aDlg = new MonEditIteration(parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
341           aDlg->show();
342         }
343         // Edition d'une hypothese
344         else if (HOMARD_UTILS::isHypo(obj))
345         {
346           MonEditHypothesis *aDlg = new MonEditHypothesis(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen),  _ObjectName, QString(""), QString("")) ;
347           aDlg->show();
348         }
349         // Edition d'une zone
350         else if (HOMARD_UTILS::isZone(obj))
351         {
352           MonEditZone *aDlg = new MonEditZone(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
353           aDlg->show();
354         }
355         // Edition d'une frontiere discrete
356         else if (HOMARD_UTILS::isBoundaryDi(obj))
357         {
358             MESSAGE(".. Lancement de MonEditBoundaryDi" );
359             MonEditBoundaryDi *aDlg = new MonEditBoundaryDi(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
360             aDlg->show();
361         }
362         // Edition d'une frontiere analytique
363         else if (HOMARD_UTILS::isBoundaryAn(obj))
364         {
365             MESSAGE(".. Lancement de MonEditBoundaryAn" );
366             MonEditBoundaryAn *aDlg = new MonEditBoundaryAn(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
367             aDlg->show();
368         }
369       }
370       break;
371     }
372
373     case 1211: // Suppression d'un objet
374     {
375       MESSAGE("command " << theCommandID << " activated");
376       QString nomObjet = HOMARD_QT_COMMUN::SelectionArbreEtude(QString(""), 1);
377       if (nomObjet == QString("")) break;
378       _PTR(SObject) obj = chercheMonObjet();
379       if (obj)
380       {
381         // Suppression d'un cas
382         if (HOMARD_UTILS::isCase(obj))
383         {
384           try
385           { homardGen->DeleteCase(_ObjectName.toStdString().c_str(), 1); }
386           catch( SALOME::SALOME_Exception& S_ex )
387           {
388             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
389                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
390             getApp()->updateObjectBrowser();
391             return false;
392           }
393         }
394         // Suppression d'une iteration
395         else if (HOMARD_UTILS::isIter(obj))
396         {
397           try
398           { homardGen->DeleteIteration(_ObjectName.toStdString().c_str(), 1); }
399           catch( SALOME::SALOME_Exception& S_ex )
400           {
401             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
402                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
403             getApp()->updateObjectBrowser();
404             return false;
405           }
406         }
407         // Suppression d'une hypothese
408         else if (HOMARD_UTILS::isHypo(obj))
409         {
410           try
411           { homardGen->DeleteHypo(_ObjectName.toStdString().c_str()); }
412           catch( SALOME::SALOME_Exception& S_ex )
413           {
414             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
415                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
416             getApp()->updateObjectBrowser();
417             return false;
418           }
419         }
420         // Suppression d'une zone
421         else if (HOMARD_UTILS::isZone(obj))
422         {
423           try
424           { homardGen->DeleteZone(_ObjectName.toStdString().c_str()); }
425           catch( SALOME::SALOME_Exception& S_ex )
426           {
427             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
428                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
429             getApp()->updateObjectBrowser();
430             return false;
431           }
432         }
433         // Suppression d'une frontiere
434         else if ( HOMARD_UTILS::isBoundaryDi(obj) or HOMARD_UTILS::isBoundaryAn(obj) )
435         {
436           try
437           { homardGen->DeleteBoundary(_ObjectName.toStdString().c_str()); }
438           catch( SALOME::SALOME_Exception& S_ex )
439           {
440             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
441                                       QObject::tr(CORBA::string_dup(S_ex.details.text)) );
442             getApp()->updateObjectBrowser();
443             return false;
444           }
445         }
446       }
447       break;
448     }
449
450     case 1301: // Information sur un maillage
451     {
452       MESSAGE("etape 1301")
453       MESSAGE("command " << theCommandID << " activated");
454       MonMeshInfo *aDlg = new MonMeshInfo( parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
455       aDlg->show();
456       break;
457     }
458
459     case 1302: // Affichage du fichier mess
460     {
461       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
462       _PTR(SObject) obj = chercheMonObjet();
463       if ((obj) and ((HOMARD_UTILS::isFilelog(obj) or HOMARD_UTILS::isFileSummary(obj))))
464       {
465           MonEditFile *aDlg = new MonEditFile( 0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
466           if ( aDlg->_codret == 0 ) { aDlg->show(); }
467       }
468       break;
469      }
470
471   }
472   getApp()->updateObjectBrowser();
473   return true;
474 }
475
476 //=============================================================================
477 /*!
478  *
479  */
480 //=============================================================================
481
482 // Module's engine IOR
483 //=============================================================================
484 QString HOMARDGUI::engineIOR() const
485 //=============================================================================
486 {
487   CORBA::String_var anIOR = getApp()->orb()->object_to_string( InitHOMARDGen(getApp()) );
488   return QString( anIOR.in() );
489 }
490
491 // Module's activation
492 //=============================================================================
493 bool HOMARDGUI::activateModule( SUIT_Study* theStudy )
494 //=============================================================================
495 {
496   bool bOk = SalomeApp_Module::activateModule( theStudy );
497
498   setMenuShown( true );
499   setToolShown( true );
500
501   return bOk;
502 }
503
504 // Module's deactivation
505 //=============================================================================
506 bool HOMARDGUI::deactivateModule( SUIT_Study* theStudy )
507 //=============================================================================
508 {
509   setMenuShown( false );
510   setToolShown( false );
511
512   return SalomeApp_Module::deactivateModule( theStudy );
513 }
514
515 // Default windows
516 //=============================================================================
517 void HOMARDGUI::windows( QMap<int, int>& theMap ) const
518 //=============================================================================
519 {
520   theMap.clear();
521   theMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
522   theMap.insert( SalomeApp_Application::WT_PyConsole,     Qt::BottomDockWidgetArea );
523 }
524
525 //=============================================================================
526 void HOMARDGUI::setOrb()
527 //=============================================================================
528 {
529   try
530   {
531      ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
532      ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
533      _orb = init( 0 , 0 );
534   }
535   catch (...)
536   {
537      INFOS("internal error : orb not found");
538      _orb = 0;
539   }
540             ASSERT(! CORBA::is_nil(_orb));
541 }
542 //========================================
543 _PTR(SObject) HOMARDGUI::chercheMonObjet()
544 //========================================
545 {
546
547     SALOMEDSClient_SObject* aSO = NULL;
548     _PTR(SObject) obj;
549     SALOME_ListIO lst;
550     getApp()->selectionMgr()->selectedObjects( lst );
551     if (  lst.Extent() == 1 )
552     {
553         Handle(SALOME_InteractiveObject) io = lst.First();
554         SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
555         _PTR(Study) study = appStudy->studyDS();
556         _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
557         _ObjectName = QString( obj->GetName().c_str() );
558         return obj;
559      }
560      else
561          return _PTR(SObject)(aSO);
562 }
563 //=============================================================================
564 void HOMARDGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
565 //=============================================================================
566 {
567   MESSAGE("Debut de contextMenuPopup");
568   _PTR(SObject) obj = chercheMonObjet();
569   if ( obj )
570   {
571     title = QString( obj->GetName().c_str() );
572     _ObjectName = title;
573     SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
574 //
575     QPixmap pix ;
576     bool DeleteObject = false ;
577     bool EditObject = false ;
578 //
579     if ( HOMARD_UTILS::isBoundaryAn(obj) )
580     {
581       EditObject = true ;
582       DeleteObject = true ;
583     }
584     else if ( HOMARD_UTILS::isBoundaryDi(obj) )
585     {
586       EditObject = true ;
587       DeleteObject = true ;
588     }
589     else if ( HOMARD_UTILS::isZone(obj) )
590     {
591       EditObject = true ;
592       DeleteObject = true ;
593     }
594     else if ( HOMARD_UTILS::isHypo(obj) )
595     {
596       EditObject = true ;
597       DeleteObject = true ;
598     }
599     else if ( HOMARD_UTILS::isIter(obj) )
600     {
601       pix = resMgr->loadPixmap( "HOMARD", "iter_next.png" );
602       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_NEW_ITERATION").toLatin1().data()), this,SLOT(NextIter()));
603       QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "mesh_compute.png" );
604       menu->addAction(QIcon(pix2), tr(QString("HOM_MEN_COMPUTE").toLatin1().data()), this, SLOT(LanceCalcul()));
605       pix2 = resMgr->loadPixmap( "HOMARD", "advanced_mesh_info.png" );
606       menu->addAction(QIcon(pix2), tr(QString("HOM_MEN_MESH_INFO").toLatin1().data()), this, SLOT(IterInfo()));
607       EditObject = true ;
608       DeleteObject = true ;
609     }
610     else if ( HOMARD_UTILS::isCase(obj) )
611     {
612       EditObject = true ;
613       DeleteObject = true ;
614     }
615     else if ( HOMARD_UTILS::isFilelog(obj) or HOMARD_UTILS::isFileSummary(obj) )
616     {
617       pix = resMgr->loadPixmap( "HOMARD", "texte.png" );
618       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_MESS_FILE").toLatin1().data()), this,SLOT(EditAsciiFile()));
619     }
620 //  Ajout d'un menu d'edition pour les objets qui le proposent
621     if ( EditObject )
622     {
623       pix = resMgr->loadPixmap( "HOMARD", "whatis.png" );
624       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT").toLatin1().data()), this,SLOT(Edit()));
625     }
626 //  Ajout d'un menu de destruction pour les objets qui le proposent
627     if ( DeleteObject )
628     {
629       pix = resMgr->loadPixmap( "HOMARD", "delete.png" );
630       menu->addAction(QIcon(pix), tr(QString("HOM_MEN_DELETE").toLatin1().data()), this,SLOT(Delete()));
631     }
632   }
633 }
634
635 void HOMARDGUI::NextIter()
636 {
637   this->OnGUIEvent(1103);
638 }
639
640 void HOMARDGUI::LanceCalcul()
641 {
642   this->OnGUIEvent(1111);
643 }
644
645 void HOMARDGUI::IterInfo()
646 {
647   this->OnGUIEvent(1121);
648 }
649
650 void HOMARDGUI::Edit()
651 {
652   this->OnGUIEvent(1201);
653 }
654
655 void HOMARDGUI::Delete()
656 {
657   this->OnGUIEvent(1211);
658 }
659
660 // void HOMARDGUI::EditAsciiFile()
661 // {
662 //   this->OnGUIEvent(1301);
663 // }
664
665 void HOMARDGUI::EditAsciiFile()
666 {
667   this->OnGUIEvent(1302);
668 }
669
670 //
671 //=============================================================================
672 // Export the module
673 //=============================================================================
674 extern "C" {
675   Standard_EXPORT CAM_Module* createModule()
676   {
677     return new HOMARDGUI("");
678   }
679 }
680