From 1b83279b34162d2f44993c811560b993f6d843d5 Mon Sep 17 00:00:00 2001 From: mkr Date: Tue, 24 Jan 2006 14:20:17 +0000 Subject: [PATCH] Fix for bug PAL8237 : Crash after trying to activate dataflow window. --- src/SUPERVGUI/SUPERVGUI.cxx | 4 ++++ src/SUPERVGUI/SUPERVGUI_CanvasLink.cxx | 14 +++++++++++-- src/SUPERVGUI/SUPERVGUI_CanvasLink.h | 3 +++ src/SUPERVGUI/SUPERVGUI_CanvasNode.cxx | 9 +++++++++ src/SUPERVGUI/SUPERVGUI_CanvasNode.h | 5 ++++- src/SUPERVGUI/SUPERVGUI_CanvasPort.cxx | 6 ++++++ src/SUPERVGUI/SUPERVGUI_CanvasPort.h | 3 +++ src/SUPERVGUI/SUPERVGUI_CanvasView.cxx | 5 +++++ src/SUPERVGUI/SUPERVGUI_CanvasView.h | 3 +++ src/SUPERVGUI/SUPERVGUI_Main.cxx | 28 ++++++++++++++++++++++++++ src/SUPERVGUI/SUPERVGUI_Main.h | 2 ++ 11 files changed, 79 insertions(+), 3 deletions(-) diff --git a/src/SUPERVGUI/SUPERVGUI.cxx b/src/SUPERVGUI/SUPERVGUI.cxx index ab180c7..4f75dfb 100644 --- a/src/SUPERVGUI/SUPERVGUI.cxx +++ b/src/SUPERVGUI/SUPERVGUI.cxx @@ -487,6 +487,8 @@ void SUPERVGUI::displayDataflow() { else { // second case : get empty initial view frame as new ViewFrame object aViewFrame = myInitialViewFrame; + // mkr : PAL8237 : remove first "gag" Main from children + aViewFrame->removeChild( aViewFrame->queryList("SUPERVGUI_Main")->first() ); } if( aViewFrame ) { @@ -676,6 +678,8 @@ bool SUPERVGUI::createDataflow( const NEW_DF_MODE mode, bool theInitialDF ) { else { // 2. get empty initial view frame as new ViewFrame object aViewFrame = myInitialViewFrame; + // mkr : PAL8237 : remove first "gag" Main from children + aViewFrame->removeChild( aViewFrame->queryList("SUPERVGUI_Main")->first() ); } if ( aViewFrame ) { diff --git a/src/SUPERVGUI/SUPERVGUI_CanvasLink.cxx b/src/SUPERVGUI/SUPERVGUI_CanvasLink.cxx index ef49cd8..a58cbb5 100644 --- a/src/SUPERVGUI/SUPERVGUI_CanvasLink.cxx +++ b/src/SUPERVGUI/SUPERVGUI_CanvasLink.cxx @@ -51,6 +51,9 @@ SUPERVGUI_CanvasLink::SUPERVGUI_CanvasLink(QObject* theParent, SUPERVGUI_Main* t else myColor = DRAW_COLOR; } + + // mkr : PAL8237 + connect(this, SIGNAL(objectCreatedDeleted()), myMain, SLOT(onObjectCreatedDeleted())); } SUPERVGUI_CanvasLink::~SUPERVGUI_CanvasLink() @@ -230,7 +233,10 @@ void SUPERVGUI_CanvasLink::remove() { } } myLink->destroy(); + + emit objectCreatedDeleted(); // mkr : PAL8237 } + delete this; if (aPort && !aValue.isEmpty() && myMain->getDataflow()->GraphLevel() == 0) { aPort->setValue(aValue); @@ -253,8 +259,10 @@ void SUPERVGUI_CanvasLink::addPoint() { anIndex = aPoint->getIndex()+1; if (anIndex < 1) anIndex = 1; } - if (myLink && !SUPERV_isNull(myLink)) + if (myLink && !SUPERV_isNull(myLink)) { myLink->AddCoord(anIndex, mySelectedPoint.x(), mySelectedPoint.y()); + emit objectCreatedDeleted(); // mkr : PAL8237 + } merge(); myMain->getCanvas()->update(); } @@ -263,8 +271,10 @@ void SUPERVGUI_CanvasLink::addPoint() { void SUPERVGUI_CanvasLink::removePoint() { if (mySelectedItem && mySelectedItem->rtti() == SUPERVGUI_Canvas::Rtti_LinkPoint) { SUPERVGUI_CanvasPointPrs* aPoint = (SUPERVGUI_CanvasPointPrs*) mySelectedItem; - if (myLink && !SUPERV_isNull(myLink)) + if (myLink && !SUPERV_isNull(myLink)) { myLink->RemoveCoord(aPoint->getIndex()); + emit objectCreatedDeleted(); // mkr : PAL8237 + } merge(); myMain->getCanvas()->update(); } diff --git a/src/SUPERVGUI/SUPERVGUI_CanvasLink.h b/src/SUPERVGUI/SUPERVGUI_CanvasLink.h index 4f620fb..f9592af 100644 --- a/src/SUPERVGUI/SUPERVGUI_CanvasLink.h +++ b/src/SUPERVGUI/SUPERVGUI_CanvasLink.h @@ -43,6 +43,9 @@ class SUPERVGUI_CanvasLink : public QObject { QString getToolTipText() const; + signals: + void objectCreatedDeleted(); // mkr : PAL8237 + public slots: virtual void remove(); void addPoint(); diff --git a/src/SUPERVGUI/SUPERVGUI_CanvasNode.cxx b/src/SUPERVGUI/SUPERVGUI_CanvasNode.cxx index 81183a0..cd3a955 100644 --- a/src/SUPERVGUI/SUPERVGUI_CanvasNode.cxx +++ b/src/SUPERVGUI/SUPERVGUI_CanvasNode.cxx @@ -76,6 +76,10 @@ SUPERVGUI_CanvasNode::SUPERVGUI_CanvasNode( SUIT_ResourceMgr* mgr, QObject* theP } isIgnore = false; + + // mkr : PAL8237 + connect(this, SIGNAL(objectCreatedDeleted()), myMain, SLOT(onObjectCreatedDeleted())); + emit objectCreatedDeleted(); } SUPERVGUI_CanvasNode::~SUPERVGUI_CanvasNode() @@ -126,6 +130,8 @@ void SUPERVGUI_CanvasNode::createPort(SUPERV::Port_ptr thePort) if (aPort) { connect(aPort, SIGNAL(destroyed(QObject*)), this, SLOT(onDestroyed(QObject*))); if (!isIgnore) getPrs()->updatePorts(); + + emit objectCreatedDeleted(); // mkr : PAL8237 } } @@ -393,6 +399,9 @@ void SUPERVGUI_CanvasNode::remove() { SUPERVGUI_Canvas* aCanvas = myMain->getCanvas(); setDestroyed(); myNode->destroy(); + + emit objectCreatedDeleted(); // mkr : PAL8237 + delete this; aCanvas->update(); } diff --git a/src/SUPERVGUI/SUPERVGUI_CanvasNode.h b/src/SUPERVGUI/SUPERVGUI_CanvasNode.h index 3150466..d34a654 100644 --- a/src/SUPERVGUI/SUPERVGUI_CanvasNode.h +++ b/src/SUPERVGUI/SUPERVGUI_CanvasNode.h @@ -73,6 +73,9 @@ class SUPERVGUI_CanvasNode : public QObject { virtual QString getToolTipText() const; + signals: + void objectCreatedDeleted(); // mkr : PAL8237 + public slots: void suspendResume(); void kill(); @@ -102,7 +105,7 @@ class SUPERVGUI_CanvasNode : public QObject { virtual void pastePort(); void managePorts(); void exportToLib(); - + protected: // redefined by most of CanvasNode successors virtual SUPERVGUI_CanvasNodePrs* createPrs() const; diff --git a/src/SUPERVGUI/SUPERVGUI_CanvasPort.cxx b/src/SUPERVGUI/SUPERVGUI_CanvasPort.cxx index 45adafe..2b8b0f5 100644 --- a/src/SUPERVGUI/SUPERVGUI_CanvasPort.cxx +++ b/src/SUPERVGUI/SUPERVGUI_CanvasPort.cxx @@ -28,6 +28,9 @@ SUPERVGUI_CanvasPort::SUPERVGUI_CanvasPort(QObject* theParent, SUPERVGUI_Main* t // setName(myPort->Name()); setName(myMain->getCanvas()->getPortName(thePort)); + + // mkr : PAL8237 + connect(this, SIGNAL(objectDeleted()), myMain, SLOT(onObjectCreatedDeleted())); } SUPERVGUI_CanvasPort::~SUPERVGUI_CanvasPort() @@ -137,6 +140,9 @@ void SUPERVGUI_CanvasPort::remove() { Trace("SUPERVGUI_CanvasPort::remove"); myPort->destroy(); + + emit objectDeleted(); // mkr : PAL8237 + delete this; } diff --git a/src/SUPERVGUI/SUPERVGUI_CanvasPort.h b/src/SUPERVGUI/SUPERVGUI_CanvasPort.h index fd52813..6ed5f5d 100644 --- a/src/SUPERVGUI/SUPERVGUI_CanvasPort.h +++ b/src/SUPERVGUI/SUPERVGUI_CanvasPort.h @@ -41,6 +41,9 @@ class SUPERVGUI_CanvasPort : public QObject { void removeLink(SUPERVGUI_CanvasLink* theLink); void updateLinks(); + signals: + void objectDeleted(); // mkr : PAL8237 + public slots: void sketchLink(); virtual void remove(); diff --git a/src/SUPERVGUI/SUPERVGUI_CanvasView.cxx b/src/SUPERVGUI/SUPERVGUI_CanvasView.cxx index 94f77c2..f2b54a7 100644 --- a/src/SUPERVGUI/SUPERVGUI_CanvasView.cxx +++ b/src/SUPERVGUI/SUPERVGUI_CanvasView.cxx @@ -160,6 +160,9 @@ SUPERVGUI_CanvasView::SUPERVGUI_CanvasView(SUPERVGUI_Canvas* theCanvas, SUPERVGU myPopup->insertSeparator(); myShowToolBarItem = myPopup->insertItem( tr( "MEN_SHOW_TOOLBAR" ), myMain, SLOT( onShowToolbar() ) ); } + + // mkr : PAL8237 + connect(this, SIGNAL(objectCreated()), myMain, SLOT(onObjectCreatedDeleted())); } @@ -681,6 +684,8 @@ void SUPERVGUI_CanvasView::endSketch(SUPERVGUI_CanvasPort* thePort) SUPERVGUI_CanvasLink* aLink = new SUPERVGUI_CanvasLink(canvas(), myMain, aLinkEngine); aLink->show(); + emit objectCreated(); // mkr : PAL8237 + canvas()->update(); myIsLinkCreating = false; diff --git a/src/SUPERVGUI/SUPERVGUI_CanvasView.h b/src/SUPERVGUI/SUPERVGUI_CanvasView.h index feda501..082a6c7 100644 --- a/src/SUPERVGUI/SUPERVGUI_CanvasView.h +++ b/src/SUPERVGUI/SUPERVGUI_CanvasView.h @@ -37,6 +37,9 @@ class SUPERVGUI_CanvasView: public QCanvasView { bool isAnyLinkCreating() const { return myIsLinkCreating; } void startSketch(SUPERVGUI_CanvasPort* thePort); + signals: + void objectCreated(); // mkr : PAL8237 + public slots: void addToStudy(); void onTimeout(); diff --git a/src/SUPERVGUI/SUPERVGUI_Main.cxx b/src/SUPERVGUI/SUPERVGUI_Main.cxx index 13a8e69..b48d726 100644 --- a/src/SUPERVGUI/SUPERVGUI_Main.cxx +++ b/src/SUPERVGUI/SUPERVGUI_Main.cxx @@ -32,6 +32,7 @@ #include "NOTIFICATION.hxx" #include "SALOME_Event.hxx" #include "SUPERVGraph_ViewFrame.h" +#include "SUPERVGraph_ViewModel.h" #include "LogWindow.h" #include "OB_Browser.h" @@ -556,6 +557,33 @@ void SUPERVGUI_Main::onShowToolbar() aVF->getToolBar()->show(); } +// mkr : PAL8237 : synchronize many views of the same dataflow +void SUPERVGUI_Main::onObjectCreatedDeleted() +{ + if ( study ) { + if ( STD_Application* app = dynamic_cast( study->application() ) ) { + ViewManagerList aVMList; + app->viewManagers( SUPERVGraph_Viewer::Type(), aVMList ); + SUIT_ViewManager* aVM; + for ( aVM = aVMList.first(); aVM; aVM = aVMList.next() ) { + QPtrVector aVWList = aVM->getViews(); + for ( int i = 0; i < aVWList.count(); i++ ) { + SUPERVGraph_ViewFrame* aVW = dynamic_cast( aVWList[i] ); + QObjectList* aMainList = aVW->queryList("SUPERVGUI_Main"); + if ( aMainList->count() == 1 ) { + SUPERVGUI_Main* aMain = dynamic_cast( aMainList->first() ); + if ( aMain ) + if ( !QString(aMain->getDataflow()->getIOR()).compare(getDataflow()->getIOR()) // equal dataflows + && + aMain != this ) // not equal mains + aMain->getCanvas()->merge(); + } + } + } + } + } +} + void SUPERVGUI_Main::run( const bool andSuspend ) { Trace("SUPERVGUI_Main::run"); if ( SUPERV_isNull(dataflow) ) diff --git a/src/SUPERVGUI/SUPERVGUI_Main.h b/src/SUPERVGUI/SUPERVGUI_Main.h index 45fb8e0..bb06476 100644 --- a/src/SUPERVGUI/SUPERVGUI_Main.h +++ b/src/SUPERVGUI/SUPERVGUI_Main.h @@ -158,6 +158,8 @@ class SUPERVGUI_Main: public SUPERVGraph_View { void onSubGraphActivated( SUIT_ViewWindow* ); void onShowToolbar(); + + void onObjectCreatedDeleted(); // mkr : PAL8237 private slots: void chooseData(QListViewItem* item); -- 2.39.2