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