1 // SUPERV SUPERVGUI : GUI for Supervisor component
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : SUPERVGUI.cxx
25 // Author : Francis KLOSS
29 #include "SUPERVGUI.h"
31 #include "QAD_Resource.h"
32 #include "QAD_FileDlg.h"
33 #include "QAD_Application.h"
34 #include "QAD_StudyFrame.h"
35 #include "QAD_RightFrame.h"
36 #include "QAD_LeftFrame.h"
37 #include "QAD_ViewFrame.h"
38 #include "QAD_ObjectBrowser.h"
39 #include "QAD_ObjectBrowserItem.h"
40 #include "SALOME_Selection.h"
41 #include "SALOMEGUI_NameDlg.h"
42 #include "Utils_ORB_INIT.hxx"
43 #include "SALOME_ListIteratorOfListIO.hxx"
44 #include "SALOME_InteractiveObject.hxx"
45 #include <qapplication.h>
46 #include "SALOMEGUI_ImportOperation.h"
48 #include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
51 int SUPERVGUI::factory = 0;
52 SUPERVGUI Supervision("");
55 SUPERVGUI::SUPERVGUI(const QString& theName, QObject* theParent)
56 : SALOMEGUI( theName, theParent ),
62 Trace("SUPERVGUI::SUPERVGUI")
65 MESSAGE("SUPERVGUI Info : factory build");
67 MESSAGE("SUPERVGUI Error : another call to factory constructor");
71 SUPERVGUI::~SUPERVGUI() {
72 Trace("SUPERVGUI::~SUPERVGUI")
75 //if (!engine->_is_nil()) CORBA::release(engine);
78 if (browser->isVisible())
82 MESSAGE("SUPERVGUI Info : factory destroy");
84 MESSAGE("SUPERVGUI Error : another call to factory destructor");
88 void SUPERVGUI::init(QAD_Desktop* parent) {
89 Trace("SUPERVGUI::init")
92 study = desktop->getActiveStudy();
93 SALOME_NamingService* namingService = desktop->getNameService();
94 loadEngine(namingService);
95 browser = new SUPERVGUI_Service(namingService);
96 //info = new SUPERVGUI_Information();
97 cursor = desktop->cursor();
98 connect(desktop->getMainFrame(), SIGNAL(windowActivated(QWidget*)), this, SLOT(setMain(QWidget*)));
101 parent->menuBar()->changeItem(anId,parent->getComponentUserName("SUPERV"));
107 QAD_StudyFrame* SUPERVGUI::createGraph() {
108 QAD_StudyFrame* aStudyFrame = study->newWindow3d(study->getNextStudyFrameName(),
109 VIEW_GRAPHSUPERV, false);
112 SIGNAL(supervStudyFrameClosing(QAD_ViewFrame*)),
114 SLOT(onGraphClosed(QAD_ViewFrame*)));
121 void SUPERVGUI::loadEngine(SALOME_NamingService* namingService) {
122 Trace("SUPERVGUI::loadEngine")
123 SALOME_LifeCycleCORBA LCC(namingService);
124 Engines::Component_var objComponent = LCC.FindOrLoad_Component("SuperVisionContainer", "SUPERV");
125 if (CORBA::is_nil(objComponent)) {
126 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_LOAD_SUPERV"));
130 SUPERV::SuperG_var aSuperVisionComponent;
131 aSuperVisionComponent = SUPERV::SuperG::_narrow(objComponent);
132 if (CORBA::is_nil(aSuperVisionComponent)) {
133 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_NARROW_SUPERV"));
137 // engine = new SUPERV::SuperG_var;
138 engine = aSuperVisionComponent;
141 bool SUPERVGUI::information(SUPERV_CNode node, bool isReadOnly) {
142 Trace("SUPERVGUI::information")
143 return(info->run(node, isReadOnly));
146 void SUPERVGUI::putInfo(const char* mess) {
147 Trace("SUPERVGUI::putInfo")
148 desktop->putInfo(mess);
151 QAD_Desktop* SUPERVGUI::getDesktop() {
152 Trace("SUPERVGUI::getDesktop")
156 SUPERV_Engine SUPERVGUI::getEngine() {
157 Trace("SUPERVGUI::getEngine")
161 SUPERVGUI_Service* SUPERVGUI::getBrowser() {
162 Trace("SUPERVGUI::getBrowser")
166 QCursor SUPERVGUI::getCursor() {
167 Trace("SUPERVGUI::getCursor")
171 SUPERVGUI_Main* SUPERVGUI::getMain() {
172 Trace("SUPERVGUI::getMain")
177 void SUPERVGUI::registerGraph(QString theName, SUPERVGUI_Main* theGraph){
178 theGraph->setHashCode(theName);
179 myGraphList.append(theGraph);
183 void SUPERVGUI::unregisterGraph(SUPERVGUI_Main* theGraph) {
184 SUPERVGUI_Main* aMain;
185 for (aMain = myGraphList.first(); aMain; aMain = myGraphList.next()) {
186 if (aMain == theGraph)
187 myGraphList.remove(aMain);
192 bool SUPERVGUI::isContains(QAD_Study* theStudy, const QString theKey) {
193 SUPERVGUI_Main* aMain;
194 for (aMain = myGraphList.first(); aMain; aMain = myGraphList.next()) {
195 if ((aMain->getStudy() == theStudy) && (aMain->getHashCode() == theKey))
202 void SUPERVGUI::onGraphClosed(QAD_ViewFrame* theViewFrame) {
203 if(SUPERVGraph_ViewFrame* supervFrame = dynamic_cast<SUPERVGraph_ViewFrame*>(theViewFrame)){
204 disconnect(study, 0 , this, 0);
205 SUPERVGraph_View* view = supervFrame->getViewWidget();
206 SUPERVGUI_Main* aGraph = dynamic_cast<SUPERVGUI_Main*>(view);
208 unregisterGraph(aGraph);
209 SUPERV_Graph aDataFlow = aGraph->getDataflow();
210 if ( !SUPERV_isNull( aDataFlow ) ) {
211 if ( aDataFlow->IsExecuting() ) {
212 const int aMsgResult = QMessageBox::warning(QAD_Application::getDesktop(),
214 tr("MSG_DF_RUNNING"),
215 tr("MSG_DF_EXECUTION"),
217 if ( aMsgResult == 1 ) {
219 if ( aDataFlow->Kill() ) {
220 // Kill() sends KillEvent and KillState to SUPERVGUI_Thread
221 // while sets myIsActive flag to false when it receives such event/state
222 // after myIsActive is false it calls QThread::exit() to terminate.
224 // why while() { qApp->processEvents() } ?
225 // because: SUPERVGUI_Thread::run() receives events, and calls myMain->execute()
226 // method using SALOME_Event paradigm, ProcessVoidEvent() function -
227 // it puts this event to the main application event loop, in which we are being now.
228 // So if we block main GUI application thread (by calling aGraph->getMyThread()->wait() here)
229 // then we will have a deadlock of 2 threads waiting for one another
230 while (aGraph->getMyThread()->running())
231 qApp->processEvents();
234 else { // BACKGROUND EXECUTION
235 emit KillMainThread(true); // set SUPERVGUI_Thread::myIsActive to false
236 while ( aGraph->getMyThread()->running() )
237 qApp->processEvents();
240 else { // EXECUTION IS FINISHED, JUST DESTROY THE SUPERVGUI_Thread object and return.
241 emit KillMainThread(true);
242 while ( aGraph->getMyThread()->running() )
243 qApp->processEvents();
250 void SUPERVGUI::setMain(QWidget* w) {
252 QAD_StudyFrame* aStudyFrame = dynamic_cast<QAD_StudyFrame*>(w);
253 if (!aStudyFrame) return;
255 study = aStudyFrame->getStudy();
258 QAD_ViewFrame* viewFrame = aStudyFrame->getRightFrame()->getViewFrame();
259 if(SUPERVGraph_ViewFrame* supervFrame = dynamic_cast<SUPERVGraph_ViewFrame*>(viewFrame)){
260 SUPERVGraph_View* view = supervFrame->getViewWidget();
262 main = dynamic_cast<SUPERVGUI_Main*>(view);
263 connect(&Supervision, SIGNAL(KillMainThread(bool)), main->getMyThread(), SLOT(KillThread(bool)));
266 Trace("SUPERVGUI::setMain - main: "<<main);
270 void SUPERVGUI::importDataflow() {
271 Trace("SUPERVGUI::importDataflow");
272 QString f = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
279 if (isContains(study, f)) {
280 if (QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"),
281 tr("MSG_GRAPH_DISPLAYED").arg(f),
282 QMessageBox::Yes, QMessageBox::No) == QMessageBox::No)
286 SUPERV_Graph aGraph = engine->StreamGraphE(f);
287 //QFileInfo aFile(f);
288 //aGraph->SetName(aFile.baseName());
289 if (SUPERV_isNull(aGraph)) {
290 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_FILE").arg(f));
294 QAD_StudyFrame* aStudyFrame = createGraph();
295 SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
296 (aStudyFrame->getRightFrame()->getViewFrame());
298 main = new SUPERVGUI_Main(aViewFrame, desktop, aGraph);
299 registerGraph(f, main);
300 study->showFrame(aStudyFrame);
305 void SUPERVGUI::displayDataflow() {
306 Trace("SUPERVGUI::displayDataflow");
307 QAD_ObjectBrowser* aBrowser = ((QAD_StudyFrame*)(desktop->getMainFrame()->activeWindow()))->getLeftFrame()->getObjectBrowser();
308 SUPERV_Graph aDataFlow;
311 QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)(aBrowser->getListView()->currentItem());
312 SALOMEDS::SObject_var aObj = desktop->getActiveStudy()->getStudyDocument()->FindObjectID(item->getEntry().latin1());
313 SALOMEDS::GenericAttribute_var anAttr;
314 if (aObj->FindAttribute(anAttr, "AttributeIOR")) {
315 SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
316 Standard_CString ior = anIOR->Value();
318 if (isContains(study, aIORName)) {
319 if (QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"),
320 tr("MSG_GRAPH_DISPLAYED").arg(""),
321 QMessageBox::Yes, QMessageBox::No) == QMessageBox::No)
324 //aDataFlow = engine->getStreamGraph(ior);
325 aDataFlow = engine->getGraph(ior);
326 if (SUPERV_isNull(aDataFlow)) {
327 QMessageBox::warning(0, tr("ERROR"), tr("MSG_ACCESS_BAD_IOR"));
330 /* ASV: 20.10.04: fix for 6896
331 if (aDataFlow->IsStreamGraph()) {
332 SUPERV_StreamGraph aDataFlowStream = aDataFlow->ToStreamGraph();
333 if (SUPERV_isNull(aDataFlowStream)) {
334 QMessageBox::warning(0, tr("ERROR"), tr("MSG_ACCESS_BAD_IOR"));
337 aDataFlow = aDataFlowStream;
341 QAD_StudyFrame* aStudyFrame = createGraph();
342 SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
343 (aStudyFrame->getRightFrame()->getViewFrame());
345 main = new SUPERVGUI_Main(aViewFrame, desktop, aDataFlow);
346 main->setAsFromStudy(true);
347 registerGraph(aIORName, main);
348 study->showFrame(aStudyFrame);
353 void SUPERVGUI::renameDataflow() {
354 SALOME_Selection* Sel = SALOME_Selection::Selection( study->getSelection() );
355 SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
356 for ( ; It.More(); It.Next() ) {
357 Handle(SALOME_InteractiveObject) IObject = It.Value();
359 SALOMEDS::Study_var aStudy = study->getStudyDocument();
360 SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
361 SALOMEDS::GenericAttribute_var anAttr;
362 SALOMEDS::AttributeName_var aName;
363 if ( !obj->_is_nil() ) {
364 if (obj->FindAttribute(anAttr, "AttributeName")) {
365 aName = SALOMEDS::AttributeName::_narrow(anAttr);
366 QString nm = QString( aName->Value() );
367 nm = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), nm );
368 if ( !nm.isEmpty() ) {
369 // sak : 24.11.04 : fix for PAL6898 : if rename fails (study locked),
370 // a message box is displayed, and cursor is "wait cursor". We think that "wait cursor"
371 // is not neccessary here, because the rename operation is fast.
372 //QApplication::setOverrideCursor( Qt::waitCursor );
373 study->renameIObject( IObject, nm );
374 //QApplication::restoreOverrideCursor();
381 void SUPERVGUI::exportDataflow() {
382 Trace("SUPERVGUI::exportDataflow")
384 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_EXPORT"));
386 else if ( SUPERV_isNull( main->getDataflow() ) ) { // should not normally happen..
387 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_EXPORT"));
390 QString f = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
393 tr("TTL_EXPORT_DATAFLOW"),
395 if ( !f.isEmpty() ) {
397 // asv : bug [VSR Bugs and Improvements in Supervisor] 1.8 : when exporting a file,
398 // a backup copy of an existing file must be created (in case Export fails..)
399 QString aBackupFile = SUPERVGUI::createBackupFile( f );
401 if ( main->getDataflow()->Export(f.latin1()) ) {
402 unregisterGraph(main);
403 registerGraph(f, main);
405 // remove a backup file if export was successfull
406 if ( !aBackupFile.isNull() && !aBackupFile.isEmpty() )
407 QFile::remove( aBackupFile );
410 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_WRITING").arg(aBackupFile));
417 *If a file with theOriginalFileName exists, then the function tries to create
418 * its backup copy of it (the_name + ".bakX", X = 0,1,2,..,99). Returns backup file's name
419 * If a file with theOriginalFileName does not exist, or creation fails - Return empty string.
421 QString SUPERVGUI::createBackupFile( const QString& theOriginalFileName ) {
422 QString theBackupFileName("");
423 if ( QFile::exists( theOriginalFileName ) ) {
424 // 1. construct a backup file name
427 theBackupFileName = theOriginalFileName;
428 theBackupFileName += ".bak";
429 theBackupFileName += QString::number(i++);
431 while ( QFile::exists( theBackupFileName ) && i < 100 ); // max 99 backup files
432 // if *.bak99 exists -- it will be overwritten
434 // 2. copy the original file to theBackupFileName
435 QString cmd( "cp \"");
436 cmd += theOriginalFileName;
438 cmd += theBackupFileName;
440 bool res = system( cmd.latin1() );
442 theBackupFileName = QString("");
444 return theBackupFileName;
447 void SUPERVGUI::newDataflow() {
448 Trace("SUPERVGUI::editDataflow");
450 //asv 20.10.04: removed 2 SUPERVGUI_Main constructors. there is only ONE way
451 //to create a Main object now: with a non-null DataFlow as a 3d parameter
452 //1. create a Graph object
453 SUPERV_Graph aNewDataFlow = engine->StreamGraph( MAIN_NEW );
454 if (SUPERV_isNull( aNewDataFlow )) {
455 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_CREATE_DF"));
458 //2. create a ViewFrame object
459 QAD_StudyFrame* aStudyFrame = createGraph();
460 SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
461 (aStudyFrame->getRightFrame()->getViewFrame());
463 //3. bind Graph and ViewFrame -> create Main
464 main = new SUPERVGUI_Main(aViewFrame, desktop, aNewDataFlow );
466 study->showFrame(aStudyFrame);
470 void SUPERVGUI::modifyDataflow() {
471 Trace("SUPERVGUI::modifyDataflow")
472 QString f = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
475 tr("Modify Dataflow"),
478 if (isContains(study, f)) {
479 if (QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"),
480 tr("MSG_GRAPH_DISPLAYED").arg(f),
481 QMessageBox::Yes, QMessageBox::No) == QMessageBox::No)
485 SUPERV_Graph aGraph = engine->StreamGraph(f);
487 //aGraph->SetName(aFile.name());
488 if (SUPERV_isNull(aGraph)) {
489 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_FILE").arg(f));
493 QAD_StudyFrame* aStudyFrame = createGraph();
494 SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
495 (aStudyFrame->getRightFrame()->getViewFrame());
497 main = new SUPERVGUI_Main(aViewFrame, desktop, aGraph);
498 registerGraph(f, main);
499 study->showFrame(aStudyFrame);
504 void SUPERVGUI::reloadDataflow() {
505 Trace("SUPERVGUI::reloadDataflow")
507 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RELOAD"));
513 void SUPERVGUI::runDataflow() {
514 Trace("SUPERVGUI::runDataflow")
516 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RUN"));
522 void SUPERVGUI::stepByStep() {
523 Trace("SUPERVGUI::stepByStep")
525 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RUN"));
527 main->startExecute();
531 void SUPERVGUI::killDataflow() {
532 Trace("SUPERVGUI::killDataflow")
534 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_KILL"));
540 void SUPERVGUI::suspendResumeDataflow() {
541 Trace("SUPERVGUI::suspendResumeDataflow")
543 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_SUSPEND"));
545 main->suspendResume();
549 void SUPERVGUI::showComponents() {
550 Trace("SUPERVGUI::showComponents");
552 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_ADD"));
554 if (main->isEditable())
557 QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOTEDITABLE"));
562 bool SUPERVGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString& theContext, const QString& theParent, const QString& theObject) {
563 Trace("SUPERVGUI::customPopup");
564 Supervision.init(parent);
565 if(popup->count() > 3) {
566 // Temporary code: is to be deleted soon
567 popup->removeItem(QAD_Display_Popup_ID);
568 popup->removeItem(QAD_DisplayOnly_Popup_ID);
569 popup->removeItem(QAD_Erase_Popup_ID);
570 int id = popup->idAt(popup->count() - 1);
571 if (id < 0 && id != -1) popup->removeItem(id); // separator
572 // Temporary code end
574 SALOME_Selection* Sel = SALOME_Selection::Selection(study->getSelection() );
575 if ((Sel==NULL) || (Sel->IObjectCount() == 0)) return false;
577 if (Sel->IObjectCount() == 1) {
578 Handle(SALOME_InteractiveObject) anIObj = Sel->firstIObject();
580 // insert SUPERV-specific popup items here
582 bool isDataflow, ownObj;
583 whatIsSelected(anIObj, ownObj, isDataflow);
586 popup->insertItem(tr( "MSG_RENAME" ), this, SLOT(renameDataflow()));
587 popup->insertItem("Display", this, SLOT(displayDataflow()));
588 popup->insertSeparator();
591 popup->insertItem(tr("MSG_DELETE"), this, SLOT(deleteObject()));
593 if (Sel->IObjectCount() > 1) {
595 SALOME_ListIteratorOfListIO It_forCheckOwner(Sel->StoredIObjects());
596 for(;It_forCheckOwner.More();It_forCheckOwner.Next()) {
597 Handle(SALOME_InteractiveObject) anIObj = It_forCheckOwner.Value();
598 bool aIsOwner, aIsDataflow;
599 whatIsSelected(anIObj, aIsOwner, aIsDataflow);
601 if (aIsOwner) aIObjCount++;
603 if (aIObjCount == Sel->IObjectCount()) //all selected objects belong to Supervision
604 popup->insertItem(tr("MSG_DELETE"), this, SLOT(deleteObject()));
612 theIsOwner = true if Selected object belongs to Suipervision.
613 theIsDataflow = true if Selected object is Dataflow
615 void SUPERVGUI::whatIsSelected(const Handle(SALOME_InteractiveObject)& theObj, bool& theIsOwner, bool& theIsDataflow) {
617 theIsDataflow = false;
619 if (theObj.IsNull()) return;
621 SALOMEDS::Study_var aStudy = study->getStudyDocument();
622 SALOMEDS::SObject_var obj = aStudy->FindObjectID( theObj->getEntry() );
624 if ( !obj->_is_nil() ) {
625 SALOMEDS::SComponent_var comp = obj->GetFatherComponent();
626 if ( !comp->_is_nil() ) {
627 SALOMEDS::GenericAttribute_var anAttr;
628 SALOMEDS::AttributeName_var aName;
629 if (comp->FindAttribute(anAttr, "AttributeName")) {
630 aName = SALOMEDS::AttributeName::_narrow(anAttr);
631 QString compName(aName->Value());
632 //if (compName.compare(STUDY_SUPERVISION) == 0) {
633 if (compName.compare(QAD_Application::getDesktop()->getComponentUserName("SUPERV")) == 0) {
634 SALOMEDS::GenericAttribute_var anAttr;
635 if (obj->FindAttribute(anAttr, "AttributeIOR")) {
636 SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
637 //SUPERV_Graph aDataFlow = engine->getStreamGraph(anIOR->Value());
638 SUPERV_Graph aDataFlow = engine->getGraph(anIOR->Value());
639 if (!SUPERV_isNull(aDataFlow)) {
640 if (aDataFlow->IsStreamGraph()) {
641 if (!SUPERV_isNull(aDataFlow->ToStreamGraph()))
642 theIsDataflow = true;
645 theIsDataflow = true;
648 CORBA::String_var anObjectID = obj->GetID();
649 CORBA::String_var aComponentID = comp->GetID();
650 if (strcmp(anObjectID, aComponentID)) theIsOwner = true;
657 void SUPERVGUI::deleteObject() {
658 SALOME_Selection* Sel = SALOME_Selection::Selection(study->getSelection() );
659 if ((Sel==NULL) || (Sel->IObjectCount() == 0)) return;
661 // sak : 24.11.04 : fix for PAL6899 : if the study is locked - warn the user and return.
662 SALOMEDS::Study_var aStudy = study->getStudyDocument();
663 if ( aStudy->GetProperties()->IsLocked() ) {
664 QMessageBox::warning(QAD_Application::getDesktop(), tr("WRN_WARNING"), tr("WRN_STUDY_LOCKED"));
668 // sak : 24.11.04 : fix for PAL6901 : Incorrect deletion of the objects : pressing ESC button
669 // emitted "YES" button click, now it is corrected, and treated as "NO" button click.
670 if (QMessageBox::warning(QAD_Application::getDesktop(),
672 tr("MSG_ASK_DELETE"),
673 QMessageBox::No, QMessageBox::Yes) != QMessageBox::Yes)
676 SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
677 for(;It.More();It.Next()) {
678 Handle(SALOME_InteractiveObject) anIObj = It.Value();
679 bool aIsOwner, aIsDataflow;
680 whatIsSelected(anIObj, aIsOwner, aIsDataflow);
682 SALOMEDS::SObject_var aObj = aStudy->FindObjectID( anIObj->getEntry() );
683 if (!aObj->_is_nil()) {
685 SALOMEDS::GenericAttribute_var anAttr;
686 if (aObj->FindAttribute(anAttr, "AttributeIOR")) {
687 SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
688 QString ior = anIOR->Value();
690 SUPERVGUI_Main* aMain;
691 for (aMain = myGraphList.first(); aMain; aMain = myGraphList.next()) {
692 if ((aMain->getStudy() == study) && (aMain->getHashCode() == ior)) {
693 aMain->setAsFromStudy(false);
699 QAD_Operation* op = new SALOMEGUI_ImportOperation( study );
700 SALOMEDS::StudyBuilder_var aBuilder = aStudy->NewBuilder();
702 aBuilder->RemoveObjectWithChildren(aObj);
706 Sel->ClearIObjects() ;
709 bool SUPERVGUI::OnGUIEvent(int command, QAD_Desktop* parent) {
710 Supervision.init(parent);
713 Supervision.importDataflow();
717 Supervision.exportDataflow();
721 Supervision.newDataflow();
725 Supervision.modifyDataflow();
729 Supervision.reloadDataflow();
733 Supervision.runDataflow();
737 Supervision.killDataflow();
741 Supervision.suspendResumeDataflow();
745 Supervision.showComponents();
749 Supervision.stepByStep();
753 QMessageBox::warning(QAD_Application::getDesktop(), "Supervision Error", "Unknown Command From Salome");
758 bool SUPERVGUI::SetSettings(QAD_Desktop* parent) {
759 Trace("SUPERVGUI::SetSettings");
760 Supervision.init(parent);
764 void SUPERVGUI::DefinePopup(QString& theContext, QString& theParent, QString& theObject) {
769 bool SUPERVGUI::ActiveStudyChanged(QAD_Desktop* parent) {
770 Trace("SUPERVGUI::activeStudyChanged");
771 study = desktop->getActiveStudy();
775 void SUPERVGUI::SupportedViewType (int* buffer, int bufferSize)
777 if (!buffer || !bufferSize) return;
778 buffer[0] = (int)VIEW_GRAPHSUPERV;
783 Standard_EXPORT SALOMEGUI* GetComponentGUI() {