X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSUPERVGUI%2FSUPERVGUI_Main.cxx;fp=src%2FSUPERVGUI%2FSUPERVGUI_Main.cxx;h=e9160aa1dea2daba56b67fc2eb1d6e807b045127;hb=63d7200cb5b3da42a26d4e62bd48999477419c39;hp=49c4b88b015ebfed807232726cb5355c68aadbac;hpb=dd5b0242e226381d951591abda54e65b9394b760;p=modules%2Fsuperv.git diff --git a/src/SUPERVGUI/SUPERVGUI_Main.cxx b/src/SUPERVGUI/SUPERVGUI_Main.cxx index 49c4b88..e9160aa 100644 --- a/src/SUPERVGUI/SUPERVGUI_Main.cxx +++ b/src/SUPERVGUI/SUPERVGUI_Main.cxx @@ -65,6 +65,20 @@ #include using namespace boost; +// mkr : PAL8150 +#define SYNCPUTINSTUDY(NodesName) \ + for ( int n = 0; n < nodes->NodesName.length(); n++ ) { \ + SUPERV_CNode aCNode = SUPERV::CNode::_narrow(nodes->NodesName[n]); \ + SUPERV_Ports aPortList = aCNode->Ports(); \ + for (int p = 0; p < aPortList->length(); p++) { \ + SUPERV::Port_ptr aPort = aPortList[p].in(); \ + if ( !aPort->IsInput() && !aPort->IsGate() ) { \ + bool aInStudy = dynamic_cast( aMain->getCanvas()->getPort(aPort) )->isInStudy(); \ + dynamic_cast( getCanvas()->getPort( getDataflow()->Node(aCNode->Name())->Port(aPort->Name()) ) )->setStudyState(aInStudy); \ + } \ + } \ + } + SUPERVGUI_Main::SUPERVGUI_Main( SUPERVGraph_ViewFrame* theParent, SUIT_Desktop* theDesktop, SUPERV_Graph theDataFlow ) : SUPERVGraph_View(theParent), @@ -88,6 +102,9 @@ SUPERVGUI_Main::SUPERVGUI_Main( SUPERVGraph_ViewFrame* theParent, } else { init(theDesktop); } + + syncPutInStudy(); // mkr : PAL8150 + // mkr : IPAL11362 connect(this, SIGNAL(EventToSync()), this, SLOT(onObjectCreatedDeleted())); } @@ -168,7 +185,7 @@ void SUPERVGUI_Main::init(SUIT_Desktop* theDesktop) { sync(); show(); - if ( myLogged && !myLogFileName.isEmpty() && QFile::exists( myLogFileName ) ) { + if ( myLogged && !myLogFileName.isEmpty() /*&& QFile::exists( myLogFileName )*/ ) { // mkr : PAL7037 myLogFile = fopen( myLogFileName.latin1(), "a" ); if ( myLogFile == NULL ) myLogged = false; @@ -194,7 +211,7 @@ SUPERVGUI_Main::~SUPERVGUI_Main() { SUIT_ViewManager* aVM = it.data()->getViewManager(); STD_Application* anApp = dynamic_cast( SUIT_Session::session()->activeApplication() ); if ( anApp ) anApp->removeViewManager(aVM); - if ( aVM ) delete aVM; + //if ( aVM ) delete aVM; // mkr : IPAL11547 } mySubGraphs.clear(); @@ -246,7 +263,7 @@ void SUPERVGUI_Main::filterNotification() { fclose( myLogFile ); } myLogFile = NULL; - if ( myLogged && !myLogFileName.isEmpty() && QFile::exists( myLogFileName ) ) { + if ( myLogged && !myLogFileName.isEmpty() /*&& QFile::exists( myLogFileName )*/ ) { // mkr : PAL7037 myLogFile = fopen( myLogFileName.latin1(), "a" ); if ( myLogFile == NULL ) { myLogged = false; @@ -489,9 +506,9 @@ void SUPERVGUI_Main::openSubGraph(SUPERV_CNode theNode, bool correct) if ( aStudyFrame ) { SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast( aStudyFrame ); if( aViewFrame ) { - /*SUPERVGUI_Main* m = */new SUPERVGUI_Main(aViewFrame, - aSupMod->application()->desktop(),//getDesktop(), - aGraph); + new SUPERVGUI_Main(aViewFrame, + aSupMod->application()->desktop(),//getDesktop(), + aGraph); // connect(aStudyFrame, SIGNAL(sfStudyFrameClosing(QAD_StudyFrame*)), // this, SLOT(onSubGraphClosed(QAD_StudyFrame*))); connect(aSupMod->application()->desktop(), SIGNAL(windowActivated( SUIT_ViewWindow* )), @@ -510,6 +527,18 @@ void SUPERVGUI_Main::openSubGraph(SUPERV_CNode theNode, bool correct) } } +// mkr : IPAL11549 +void SUPERVGUI_Main::destroySubGraph(QString theSubGraphName) +{ + if ( mySubGraphs.contains(theSubGraphName) ) { + SUIT_ViewWindow* aStudyFrame = mySubGraphs[theSubGraphName]; + onSubGraphClosed(aStudyFrame); + SUIT_ViewManager* aVM = aStudyFrame->getViewManager(); + STD_Application* anApp = dynamic_cast( SUIT_Session::session()->activeApplication() ); + if ( anApp ) anApp->removeViewManager(aVM); + } +} + bool SUPERVGUI_Main::eventFilter( QObject* o, QEvent* e) { // workaround to get close event @@ -580,7 +609,9 @@ void SUPERVGUI_Main::onObjectCreatedDeleted() if ( aMainList->count() == 1 ) { SUPERVGUI_Main* aMain = dynamic_cast( aMainList->first() ); if ( aMain ) - if ( !QString(aMain->getDataflow()->getIOR()).compare(getDataflow()->getIOR()) // equal dataflows + if ( !CORBA::is_nil( aMain->getDataflow() ) + && + !QString(aMain->getDataflow()->getIOR()).compare(getDataflow()->getIOR()) // equal dataflows && aMain != this ) // not equal mains aMain->getCanvas()->merge(); @@ -591,6 +622,84 @@ void SUPERVGUI_Main::onObjectCreatedDeleted() } } +// mkr : PAL8150 : synchronize many views of the same dataflow ("Put In Study"/"Not In Study" operation) +void SUPERVGUI_Main::onPutInStudy( QString* theNodePortName ) +{ + 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 + QString aNodeName = theNodePortName->left( theNodePortName->find('_') ); + QString aPortName = theNodePortName->right( theNodePortName->length() - theNodePortName->find('_') - 1 ); + bool anIsInStudy = dynamic_cast( getCanvas()->getPort( getDataflow()->Node( aNodeName )->GetOutPort( aPortName ) ) )->isInStudy(); + dynamic_cast( aMain->getCanvas()->getPort( aMain->getDataflow()->Node( aNodeName )->GetOutPort( aPortName ) ) )->setStudyState( anIsInStudy ); + } + } + } + } + } + } +} + +// mkr : PAL8150 : synchronize many views of the same dataflow ("Display" operation for dataflow) +void SUPERVGUI_Main::syncPutInStudy() +{ + 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 ( !CORBA::is_nil( aMain->getDataflow() ) + && + !QString(aMain->getDataflow()->getIOR()).compare(getDataflow()->getIOR()) // equal dataflows + && + aMain != this ) { // not equal mains + + // check "myInStudy" field of output ports of original main (i.e. this main) + // and synchronize this property for nodes' output ports of dublicate main (i.e. of aMain) + SUPERV_Nodes nodes = aMain->getDataflow()->Nodes(); + + SYNCPUTINSTUDY(CNodes); + SYNCPUTINSTUDY(FNodes); + SYNCPUTINSTUDY(INodes); + SYNCPUTINSTUDY(GNodes); + SYNCPUTINSTUDY(LNodes); + SYNCPUTINSTUDY(ELNodes); + SYNCPUTINSTUDY(SNodes); + SYNCPUTINSTUDY(ESNodes); + SYNCPUTINSTUDY(Graphs); + + setRunTime( aMain->getRunTime() ); + + break; + } + } + } + } + } + } +} + void SUPERVGUI_Main::run( const bool andSuspend ) { Trace("SUPERVGUI_Main::run"); if ( SUPERV_isNull(dataflow) ) @@ -654,6 +763,7 @@ void SUPERVGUI_Main::kill() { void SUPERVGUI_Main::suspendResume() { Trace("SUPERVGUI_Main::suspendResume"); + if ((SUPERV_isNull(dataflow))) return; if (dataflow->IsEditing()) { @@ -913,7 +1023,7 @@ _PTR(SObject) SearchOrCreateSOWithName( _PTR(Study) const theStudy, _PTR(ChildIterator) anIterator ( theStudy->NewChildIterator(theSO) ); for (; anIterator->More(); anIterator->Next()) { if (anIterator->Value()->FindAttribute(anAttr, "AttributeName")) { - aName = anAttr; + aName = _PTR(AttributeName) ( anAttr ); if (strcmp(aName->Value().c_str(), theName) == 0) { aResult = anIterator->Value(); break; @@ -929,7 +1039,7 @@ _PTR(SObject) SearchOrCreateSOWithName( _PTR(Study) const theStudy, // add new SObject aResult = theBuilder->NewObject( theSO ); anAttr = theBuilder->FindOrCreateAttribute(aResult, "AttributeName"); - aName = anAttr; + aName = _PTR(AttributeName) ( anAttr ); aName->SetValue(theName); return aResult; } @@ -963,7 +1073,7 @@ _PTR(SObject) createDataflowSObj( SUIT_Study* study, if ( !aComponent ) { // is supervision component not found, then create it aComponent = aBuilder->NewComponent(STUDY_SUPERVISION); anAttr = aBuilder->FindOrCreateAttribute(aComponent, "AttributeName"); - aName = anAttr; + aName = _PTR(AttributeName) ( anAttr ); aName->SetValue( (( CAM_Application* )(study->application()))->moduleTitle( "SUPERV" ).latin1() ); anAttr = aBuilder->FindOrCreateAttribute(aComponent, "AttributePixMap"); @@ -980,7 +1090,7 @@ _PTR(SObject) createDataflowSObj( SUIT_Study* study, // create dataflow SObject ("aNewDataflow_1") aSO = aBuilder->NewObject(aComponent); anAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeName"); - aName = anAttr; + aName = _PTR(AttributeName) ( anAttr ); aName->SetValue(dataflow->Name()); anAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeIOR"); _PTR(AttributeIOR) anIORAttr ( anAttr ); @@ -1194,16 +1304,16 @@ void SUPERVGUI_Main::syncNotification() { long counter; char* date; long stamp; - + while (notification->Receive(&graph, &node, &type, &message, &sender, &counter, &date, &stamp)) { -// if (isFiltered(graph, node, type, message, sender, counter, date, stamp)) { + if (isFiltered(graph, node, type, message, sender, counter, date, stamp)) { // mkr : PAL7037 QString mess(""); mess += "NOTIF: "; mess += graph; mess += " / " ; mess += node; mess += " / " ; mess += type; mess += " / " ; mess += message; getMessage()->putMessage(mess.latin1()); -// }; + }; }; } @@ -1213,7 +1323,13 @@ bool SUPERVGUI_Main::isFiltered(char* graph, char* node, char* type, char* me bool b = false; if (strcmp(getDataflow()->Name(), graph) == 0) { SUPERVGUI_CanvasNode* n; - QObjectList* nodes = queryList("SUPERVGUI_CanvasNode"); + QObjectList* nodes; + // mkr : PAL7037 --> + if (myCurrentView == CANVASTABLE) + nodes = myArray->queryList("SUPERVGUI_CanvasNode"); + else + nodes = myCanvas->queryList("SUPERVGUI_CanvasNode"); + // mkr : PAL7037 <-- QObjectListIt i(*nodes); while ((n=(SUPERVGUI_CanvasNode*)i.current()) != 0) { ++i; @@ -1503,10 +1619,10 @@ void SUPERVGUI_Thread::run() SUPERV_CNode aNode = NULL; SUPERV::GraphEvent aEvent = SUPERV::UndefinedEvent ; SUPERV::GraphState aState = SUPERV::UndefinedState ; - + // blocking function of Engine. Return from there only after anEvent happens on node aNode myMain->getDataflow()->Event(aNode, aEvent, aState); - + ProcessVoidEvent( new TMainRunEvent( this, &SUPERVGUI_Thread::main_thread_run,aNode, aEvent, aState ) ); } // end of while( myIsActive )