X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FEditorGraphicBBS%2FbbsKernelEditorGraphic%2FwxVtkSceneManager.cxx;h=1e325329ed126f41586323d971cd538c3ca15307;hb=ee78ea5e5132aa8e24b525dfa92fd0a355e8245a;hp=7419d39cdb0bd93c334ab3c3297d0242e703ffc2;hpb=d43eaee96a8c31023bae53055512ef35fd4e67c9;p=bbtkGEditor.git diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx index 7419d39..1e32532 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx @@ -47,7 +47,6 @@ namespace bbtk _numBoxes=0; _idManager=idManager; _baseView=baseView; - _idLastController=0; _startDragging=false; if( _baseView!=NULL ) @@ -221,7 +220,6 @@ namespace bbtk GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type); model->registerInBox(blackBox,portType, posInBox); - blackBox->addOutputPort(model); model->setBBTKType(bbtkType); model->setBBTKName(bbtkName); @@ -309,6 +307,7 @@ namespace bbtk connectorModel->setManualContourModel(manContourModel); connectorView->setManualContourView(manContourView); connectorView->setModel(connectorModel); + connectorView->setBaseView(_baseView); connectorcontroller->setModelAndView(connectorModel,connectorView); int newId = _controllers.size(); @@ -516,6 +515,42 @@ namespace bbtk bool wxVtkSceneManager::OnLeftButtonDown() { + if(_worldState==INIT_CREATION_CONTOUR) + { + bool isOverPort=false; + std::map::iterator it; + for(it = _controllers.begin(); it != _controllers.end() && isOverPort==false; ++it) + { + GObjectController *desc = it->second; + if(desc->getGObjectType()==GPORT) + { + GPortModel* portmod=(GPortModel*)desc->getModel(); + vtkGObjectView* portView=desc->getView(); + if(portmod->getPortType()==GINPUTPORT && portView->getState()==HIGHLIGHTED) + { + isOverPort=true; + } + } + } + + if(isOverPort==false) + { + _worldState=NOTHING_HAPPENS; + int lastId = _controllers.size()-1; + GConnectorController *connector = (GConnectorController*)_controllers[lastId]; + connector->removeFromScene(); + unregisterController(connector); + _controllers.erase(lastId); + + for(it = _controllers.begin(); it != _controllers.end(); ++it) + { + GObjectController *desc = it->second; + desc->SetActive(true); + desc->getView()->setState(NOTHING_HAPPENS); + desc->getModel()->notifyObservers(_idManager); + } + } + } if(_selectedObjects.size()!=0) { @@ -559,6 +594,26 @@ namespace bbtk bool wxVtkSceneManager::OnRightButtonUp() { + if(_worldState==INIT_CREATION_CONTOUR) + { + _worldState=NOTHING_HAPPENS; + int lastId = _controllers.size()-1; + GConnectorController *connector = (GConnectorController*)_controllers[lastId]; + connector->removeFromScene(); + unregisterController(connector); + _controllers.erase(lastId); + + std::map::iterator it; + for(it = _controllers.begin(); it != _controllers.end(); ++it) + { + GObjectController *desc = it->second; + desc->SetActive(true); + desc->getView()->setState(NOTHING_HAPPENS); + desc->getModel()->notifyObservers(_idManager); + } + } + + for (int i = 0; i < _selectedObjects.size(); i++) { int id = _selectedObjects[i]; @@ -612,7 +667,7 @@ namespace bbtk if(clickOnObject==false) { - _parent->editDiagramParameters(this); + //_parent->editDiagramParameters(this); } return true; @@ -633,7 +688,7 @@ namespace bbtk for(int i=0;i<_selectedObjects.size();i++) { int id = _selectedObjects[i]; - removeObject(id); + deleteObject(id); } _selectedObjects.clear(); } @@ -644,7 +699,7 @@ namespace bbtk //========================================================================= - void wxVtkSceneManager::removeObject(int id) + void wxVtkSceneManager::deleteObject(int id) { GObjectController *control = _controllers[id]; std::vector controllersToRemove; @@ -652,29 +707,62 @@ namespace bbtk if(control->getGObjectType()==GBLACKBOX) { GBlackBoxModel *bbmod = (GBlackBoxModel*)control->getModel(); - std::vectorinputs = bbmod->getInputPorts(); + std::vector inputs = bbmod->getInputPorts(); + bool boxConnected = false; + + // Add box input controllers to be removed for(int i = 0;igetObjectId()); + if(inputs[i]->isConnected()) + { + boxConnected = true; + } } - std::vectoroutputs = bbmod->getOutputPorts(); + std::vector outputs = bbmod->getOutputPorts(); + // Add box output controllers to be removed for(int i = 0;igetObjectId()); + if(outputs[i]->isConnected()) + { + boxConnected = true; + } } - controllersToRemove.push_back(control->getId()); + // Add connection controllers to be removed + std::map::iterator it; + for(it = _controllers.begin(); it != _controllers.end(); ++it) + { + GObjectController *cont = it->second; + int type = cont->getGObjectType(); + if(type==GCONNECTOR) + { + GConnectorModel *conMod = (GConnectorModel*)cont->getModel(); + if(conMod->getStartPort()!=NULL && conMod->getStartPort()->getParentBox()->getObjectId() == bbmod->getObjectId()) + { + controllersToRemove.push_back(conMod->getObjectId()); + } + if(conMod->getEndPort()!=NULL && conMod->getEndPort()->getParentBox()->getObjectId() == bbmod->getObjectId()) + { + controllersToRemove.push_back(conMod->getObjectId()); + } + } + } + + // Add box controller to be removed + controllersToRemove.push_back(bbmod->getObjectId()); } for(int i = 0;iremoveFromScene(); - unregisterController((InteractorStyleMaracas*)cont); + unregisterController((InteractorStyleMaracas*)cont); _controllers.erase(id); } @@ -753,12 +841,12 @@ namespace bbtk int i; for(i = 0; i::iterator it; + for(it = _controllers.begin(); it != _controllers.end(); ++it) + { + GObjectController *cont = it->second; + cont->removeFromScene(); + unregisterController((InteractorStyleMaracas*)cont); + } + _selectedObjects.clear(); + _controllers.clear(); + refreshScene(); + } + + //========================================================================= + + void wxVtkSceneManager::refreshScene() + { + _baseView->RefreshView(); + } + + //========================================================================= + } // EO namespace bbtk // EOF