Salome HOME
Bug fix: don't set "Loading" state for MacroNodes in InitialState() function (called...
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI_CanvasControlNode.cxx
index 374f14426cdbc6fa636f705182284888a57014cc..9a81a1802e0faeca62ebf5554089cc69505db545 100644 (file)
@@ -9,14 +9,16 @@
 using namespace std;
 #include "SUPERVGUI_CanvasControlNode.h"
 #include "SUPERVGUI_CanvasControlNodePrs.h"
+#include "SUPERVGUI_CanvasCellNodePrs.h"
 #include "SUPERVGUI_Main.h"
 #include "SUPERVGUI.h"
 #include "SUPERVGUI_Canvas.h"
-#include "SUPERVGUI_ControlNode.h" // access to SelectInlineDlg
 
 #include "QAD_FileDlg.h"
 #include "QAD_Application.h"
 
+#include <qlayout.h>
+
 //=====================================================================
 // Compute node
 //=====================================================================
@@ -260,3 +262,159 @@ void SUPERVGUI_CanvasMacroNode::exportDataflow()
     }
   }
 }
+
+//=====================================================================
+// Cell node: node for table view
+//=====================================================================
+SUPERVGUI_CanvasCellNode::SUPERVGUI_CanvasCellNode(QObject* theParent, 
+                                                  SUPERVGUI_Main* theMain, 
+                                                  SUPERV_CNode theNode):
+  SUPERVGUI_CanvasNode(theParent, theMain, theNode, true)
+{
+  Trace("SUPERVGUI_CanvasCellNode::SUPERVGUI_CanvasCellNode");
+  
+  myIsControl = false;
+  myIsStart = false;
+
+  //check for control nodes
+  if (getEngine()->IsLoop() || getEngine()->IsSwitch()) {
+    myIsControl = true;  
+    myIsStart = true;
+  }
+  if (getEngine()->IsEndLoop() || getEngine()->IsEndSwitch())
+    myIsControl = true;
+}
+
+QPopupMenu* SUPERVGUI_CanvasCellNode::getPopupMenu(QWidget* theParent)
+{
+  QPopupMenu* popup = SUPERVGUI_CanvasNode::getPopupMenu(theParent);
+  popup->setItemEnabled(myDeleteItem, false);
+  return popup;
+}
+
+void SUPERVGUI_CanvasCellNode::setPairCell(SUPERVGUI_CanvasCellNode* thePairCell) {
+  if (myIsControl) { //only for ControlNode
+    myPairCell = thePairCell;
+  }
+  else 
+    myPairCell = 0;
+}
+
+SUPERVGUI_CanvasCellNode* SUPERVGUI_CanvasCellNode::getPairCell() {
+  return myPairCell;
+}
+
+void SUPERVGUI_CanvasCellNode::sync() {
+  MESSAGE("===> SUPERVGUI_CanvasCellNode::sync() " << getEngine()->Name() << ", state " << getEngine()->State());
+
+  const bool isExecuting = getMain()->getDataflow()->IsExecuting();
+  //if getEngine() is a MacroNode then set it state to state of its subgraph
+  if ( getEngine()->IsMacro() && isExecuting ) {
+    // get SubGraph from MacroNode
+    SUPERV_Graph aMacro = SUPERV::Graph::_narrow(getEngine());
+    if (!SUPERV_isNull(aMacro)) {
+      SUPERV_Graph aGraph;
+      if (aMacro->IsStreamMacro())
+       aGraph = aMacro->StreamObjRef();
+      else
+       aGraph = aMacro->FlowObjRef();
+      if (!SUPERV_isNull(aGraph)) {
+       if (aGraph->State() != SUPERV::UndefinedState && aGraph->State() != SUPERV::NoState)
+         getPrs()->setState(aGraph->State());
+       else 
+         getPrs()->setState(getEngine()->State());
+      }
+    }
+  }
+  else {
+    getPrs()->setState(getEngine()->State());
+  }
+}
+
+/*bool SUPERVGUI_CanvasCellNode::setNodeName(QString aName)
+{
+  bool result = SUPERVGUI_CanvasNode::setNodeName(aName);
+  if (result && myPairCell) {
+    result = myPairCell->getEngine()->SetName((QString(tr("ENDNODE_PREFIX"))+aName).latin1());
+    if (result) {
+      setName(myPairCell->getEngine()->Name());
+      myPairCell->getPrs()->updateInfo();
+    } 
+    else {
+      QMessageBox::warning( QAD_Application::getDesktop(), tr( "ERROR" ), tr( "MSG_CANT_RENAMENODE" ) );
+    }
+    }
+  return result;
+}*/
+
+SUPERVGUI_CanvasNodePrs* SUPERVGUI_CanvasCellNode::createPrs() const
+{
+  MESSAGE(" -> SUPERVGUI_CanvasCellNode::createPrs()");
+  SUPERVGUI_CanvasNodePrs* aPrs = 
+    new SUPERVGUI_CanvasCellNodePrs(getMain()->getCanvasArray(), 
+                                   (SUPERVGUI_CanvasCellNode*)this);
+  MESSAGE(" -> SUPERVGUI_CanvasCellNode::createPrs() 11");
+  return aPrs;
+}
+
+SUPERVGUI_CanvasCellEndNode::SUPERVGUI_CanvasCellEndNode( QObject* theParent, 
+                                                         SUPERVGUI_Main* theMain, 
+                                                         SUPERV_CNode theNode, 
+                                                         SUPERVGUI_CanvasCellNode* theStart):
+  SUPERVGUI_CanvasCellNode(theParent, theMain, theNode)
+{
+  //set start cell for end cell as pair 
+  myPairCell = theStart; 
+  //set end cell for start cell as pair
+  myPairCell->setPairCell(dynamic_cast<SUPERVGUI_CanvasCellNode*>(this));
+}
+
+//-----------------------------------------------------------
+//*************** Select Inline node dialog******************
+// Taken from SUPERVGUI_ControlNode.cxx without change
+//-----------------------------------------------------------
+
+SUPERVGUI_SelectInlineDlg::SUPERVGUI_SelectInlineDlg(SUPERVGUI_Main* theMain)  
+  :QDialog(theMain, 0, true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+  setSizeGripEnabled( true );
+  setCaption(tr("TIT_FUNC_PYTHON"));
+  QGridLayout* aMainLayout = new QGridLayout(this, 2, 2, 7, 4);
+
+  QLabel* aLabel = new QLabel("Connect to", this );
+  aMainLayout->addWidget(aLabel, 0, 0);
+
+  myCombo = new QComboBox(this);
+  myCombo->clear(); //for the additional check from GUI side for bug PAL7007
+  SUPERV_Nodes aNodesList = theMain->getDataflow()->Nodes();  
+  int i;
+  for (i = 0; i < aNodesList->INodes.length(); i++) {
+    myCombo->insertItem(QString(aNodesList->INodes[i]->Name()));
+  }
+  for (i = 0; i < aNodesList->LNodes.length(); i++) {
+    myCombo->insertItem(QString(aNodesList->LNodes[i]->Name()));
+  }
+  for (i = 0; i < aNodesList->SNodes.length(); i++) {
+    myCombo->insertItem(QString(aNodesList->SNodes[i]->Name()));
+  }
+  aMainLayout->addWidget(myCombo, 0, 1);
+
+  QGroupBox* aBtnBox = new QGroupBox( this );
+  aBtnBox->setColumnLayout( 0, Qt::Vertical );
+  aBtnBox->layout()->setSpacing( 0 ); aBtnBox->layout()->setMargin( 0 );
+  QHBoxLayout* aBtnLayout = new QHBoxLayout( aBtnBox->layout() );
+  aBtnLayout->setAlignment( Qt::AlignTop );
+  aBtnLayout->setSpacing( 6 ); aBtnLayout->setMargin( 11 );
+  
+  QPushButton* aOKBtn = new QPushButton( tr( "BUT_OK" ), aBtnBox );
+  connect( aOKBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+  aBtnLayout->addWidget( aOKBtn );
+
+  aBtnLayout->addStretch();
+
+  QPushButton* aCancelBtn = new QPushButton( tr("BUT_CANCEL"), aBtnBox );
+  connect( aCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+  aBtnLayout->addWidget( aCancelBtn );
+
+  aMainLayout->addMultiCellWidget(aBtnBox, 1, 1, 0, 1);
+}