// Author : Francis KLOSS
// Module : SUPERV
-using namespace std;
#include "SUPERVGUI_Service.h"
#include "SUPERVGUI_Main.h"
#include "SUPERVGUI_Library.h"
SALOME_ModuleCatalog::Service* Service = &(Interface->interfaceservicelist[k]);
QListViewItem* myServiceItem = new QListViewItem(myInterfaceItem, (char*)Service->ServiceName);
myServiceItem->setSelectable(true);
- components->ensureItemVisible(myServiceItem);
+ //components->ensureItemVisible(myServiceItem);
long nbPortsOut = Service->ServiceoutParameter.length();
for (int m=0; m<nbPortsOut; m++) {
if (item->isSelected()) {
const char* service = item->text(0).latin1();
const char* interface = item->parent()->text(0).latin1();
- const char* component = anApp->moduleName(item->parent()->parent()->text(0).latin1());
- SALOME_ModuleCatalog::Acomponent_ptr myComponent = (*aModuleCatalog)->GetComponent(component);
- if (myComponent==NULL) {
- QMessageBox::warning(aDesktop, tr("ERROR"), tr("MSG_CANT_CHOOSE_SERVICE"));
- }
- else {
- const SALOME_ModuleCatalog::Service* myService = myComponent->GetService(interface, service);
- SUPERV_CNode aNode;
- if ( myService->TypeOfNode == 0 ) { // ComputeNode
- aNode = aMain->getDataflow()->CNode(*myService);
- if (CORBA::is_nil( aNode ) ) {
- QMessageBox::warning(aDesktop, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
- return;
- }
+ //const char* component = anApp->moduleName(item->parent()->parent()->text(0).latin1());
+ if ( aSupMod->getInterfaceNameMap().contains(item->parent()->text(0)) ) {
+ const char* component = aSupMod->getInterfaceNameMap().find(item->parent()->text(0)).data();
+
+ SALOME_ModuleCatalog::Acomponent_ptr myComponent = (*aModuleCatalog)->GetComponent(component);
+ if (myComponent==NULL) {
+ QMessageBox::warning(aDesktop, tr("ERROR"), tr("MSG_CANT_CHOOSE_SERVICE"));
}
- else { // Factory Node
- aNode = aMain->getDataflow()->FNode(component, interface, *myService);
- if ( CORBA::is_nil( aNode ) ) {
- QMessageBox::warning(aDesktop, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
- return;
+ else {
+ const SALOME_ModuleCatalog::Service* myService = myComponent->GetService(interface, service);
+ SUPERV_CNode aNode;
+ if ( myService->TypeOfNode == 0 ) { // ComputeNode
+ aNode = aMain->getDataflow()->CNode(*myService);
+ if (CORBA::is_nil( aNode ) ) {
+ QMessageBox::warning(aDesktop, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
+ return;
+ }
+ }
+ else { // Factory Node
+ aNode = aMain->getDataflow()->FNode(component, interface, *myService, myComponent->implementation_type()); // mkr : PAL11273
+ if ( CORBA::is_nil( aNode ) ) {
+ QMessageBox::warning(aDesktop, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
+ return;
+ }
}
+ SUPERV::INode_var aDummyEndNode;
+ addNode( aNode, aDummyEndNode, myX, myY );
+ b = true;
}
- SUPERV::INode_var aDummyEndNode;
- addNode( aNode, aDummyEndNode, myX, myY );
- b = true;
- }
+ }
}
}
if ( !b ) {
switch (aSel) {
case 0: // Computation
{
- SUPERV_CNode aNode = aMain->getDataflow()->INode(myScriptPane->getFuncName().latin1(),
- (myScriptPane->getFunction()).in());
+ SUPERV_CNode aNode =
+ aMain->getDataflow()->INode(myScriptPane->getFuncName().isEmpty() ? "" : myScriptPane->getFuncName().latin1(),
+ (myScriptPane->getFunction()).in());
if (CORBA::is_nil(aNode)) {
QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
return;
}
SUPERV::INode_var aDummyEndNode;
+ // here we have to
+ // 1) parse nodes' python function to find ports names
+ // 2) create ports for engine node with found names and "undefined" types
+ // ( aNode->InPort(name,type), aNode->OutPort(name,type) )
+ // P.S. CanvasNode->createPort(...) for create presentation of port
+ // will be called from addNode(...) (inside CanvasNode constructor)
addNode( aNode, aDummyEndNode, myX, myY );
}
break;
case 1: // Switch
{
SUPERV_INode aEndNode;
- SUPERV_CNode aStartNode = aMain->getDataflow()->SNode(myScriptPane->getFuncName().latin1(),
- (myScriptPane->getFunction()).in(),
- aEndNode);
+ SUPERV_CNode aStartNode =
+ aMain->getDataflow()->SNode(myScriptPane->getFuncName().isEmpty() ? "" : myScriptPane->getFuncName().latin1(),
+ (myScriptPane->getFunction()).in(),
+ aEndNode);
if (CORBA::is_nil(aStartNode) || CORBA::is_nil(aEndNode)) {
QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
return;
case 2: // Loop
{
SUPERV_INode aEndNode;
- SUPERV_CNode aStartNode = aMain->getDataflow()->LNode(myInitPane->getFuncName().latin1(), (myInitPane->getFunction()).in(),
- myMorePane->getFuncName().latin1(), (myMorePane->getFunction()).in(),
- myNextPane->getFuncName().latin1(), (myNextPane->getFunction()).in(),
- aEndNode);
+ SUPERV_CNode aStartNode =
+ aMain->getDataflow()->LNode(myInitPane->getFuncName().isEmpty() ? "" : myInitPane->getFuncName().latin1(),
+ (myInitPane->getFunction()).in(),
+ myMorePane->getFuncName().isEmpty() ? "" : myMorePane->getFuncName().latin1(),
+ (myMorePane->getFunction()).in(),
+ myNextPane->getFuncName().isEmpty() ? "" : myNextPane->getFuncName().latin1(),
+ (myNextPane->getFunction()).in(),
+ aEndNode);
if (CORBA::is_nil(aStartNode) || CORBA::is_nil(aEndNode)) {
QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
return;
// get current cursor position and previous line (the one to be analized)
int pos, para, i;
+ QString spacesStr;
myText->getCursorPosition( ¶, &pos ); // pos==0, beginning of line
- QString line = myText->text( para-1 ); // previous paragraph line
+ if ( myText->paragraphLength(para-1) > 0 ) { // mkr : IPAL9817
+ QString line = myText->text( para-1 ); // previous paragraph line
- // construct a string containing all leading space characters of previous line (tabs, etc.)
- QString spacesStr;
- i = -1;
- while ( line[++i].isSpace() ) // append all isSpace() characters at beginning of line to spacesStr
- spacesStr += line[i];
-
- // if ':' was found -- add more spaces to spacesStr
- line = line.stripWhiteSpace();
- if ( line[ line.length()-1 ] == ':' ) {
- i = 0;
- while ( i++ < N )
- spacesStr += ' ';
+ // construct a string containing all leading space characters of previous line (tabs, etc.)
+ i = -1;
+ while ( line[++i].isSpace() ) // append all isSpace() characters at beginning of line to spacesStr
+ spacesStr += line[i];
+
+ // if ':' was found -- add more spaces to spacesStr
+ line = line.stripWhiteSpace();
+ if ( line[ line.length()-1 ] == ':' ) {
+ i = 0;
+ while ( i++ < N )
+ spacesStr += ' ';
+ }
}
// ok, append spacesStr at the beginning of the current line = make indentation
resize( 500, 250 );
QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 4);
int a,b; // dummies for PythonEditPane, not used, since library = false and myX, myY are not used in PythonEditPane
+ myIsLoop = isLoop; // mkr : PAL12236
if (isLoop) {
QTabWidget* aLoopTabPane = new QTabWidget(this);
myInitPane = new SUPERVGUI_PythonEditPane( this, false, a, b ); // library == false, since no creation of a node is needed here
aBtnLayout->setSpacing( 6 ); aBtnLayout->setMargin( 11 );
QPushButton* aOKBtn = new QPushButton( tr( "BUT_OK" ), aBtnBox );
- connect( aOKBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ connect( aOKBtn, SIGNAL( clicked() ), this, SLOT( clickOnOk() ) );
aBtnLayout->addWidget( aOKBtn );
aBtnLayout->addStretch();
aMainLayout->addWidget(aBtnBox);
}
+// mkr : IPAL9817 : to avoid a SIGSEGV when INode_Impl::SetPyFunction(...)
+// will call with null python function name
+void SUPERVGUI_EditPythonDlg::clickOnOk()
+{
+ // mkr : PAL12236
+ bool hasEmptyName = myIsLoop ?
+ ( getInitFuncName().isEmpty() || getMoreFuncName().isEmpty() || getNextFuncName().isEmpty() ) :
+ getFuncName().isEmpty();
+
+ if ( hasEmptyName )
+ QMessageBox::warning( SUIT_Session::session()->activeApplication()->desktop(), tr( "ERROR" ), tr( "MSG_INCORRECT_INDENT" ) );
+ else
+ accept();
+}
+
/**
* Do the following actions for newly created Engine's CNode:
* 1. Create a presentation for it (CanvasNode)
SUPERVGUI_Main* aMain = aSupMod->getMain();
if ( !CORBA::is_nil( theNode ) && aMain ) {
-
+
aMain->Editing(); // PAL6170: GUI->Engine: setting "Editing" flag, why here? -> PAL7960
int cx, cy; //to appear a new node in the top-left corner of the current viewport
aMain->addMacroNode( theNode );
else if ( theNode->IsLoop() || theNode->IsSwitch() )
aMain->addControlNode( theNode, SUPERV::CNode::_narrow( theEndNode ), true );
- else
+ else
aMain->addComputeNode( theNode );
- }
+ aSupMod->nullifyInitialVF();
+ }
}