]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx
Added the possibility to delete all the boxes in the scene
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsKernelEditorGraphic / wxVtkSceneManager.cxx
index 7419d39cdb0bd93c334ab3c3297d0242e703ffc2..1e325329ed126f41586323d971cd538c3ca15307 100644 (file)
@@ -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<int, GObjectController*>::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<int, GObjectController*>::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<int> controllersToRemove;
@@ -652,29 +707,62 @@ namespace bbtk
                if(control->getGObjectType()==GBLACKBOX)
                {
                        GBlackBoxModel *bbmod = (GBlackBoxModel*)control->getModel();
-                       std::vector<GPortModel*>inputs = bbmod->getInputPorts();
+                       std::vector<GPortModel*> inputs = bbmod->getInputPorts();
                        
+                       bool boxConnected = false;
+
+                       // Add box input controllers to be removed
                        for(int i = 0;i<inputs.size();i++)
                        {
                                controllersToRemove.push_back(inputs[i]->getObjectId());
+                               if(inputs[i]->isConnected())
+                               {
+                                       boxConnected = true;
+                               }
                        }
 
-                       std::vector<GPortModel*>outputs = bbmod->getOutputPorts();
+                       std::vector<GPortModel*> outputs = bbmod->getOutputPorts();
 
+                       // Add box output controllers to be removed
                        for(int i = 0;i<outputs.size();i++)
                        {
                                controllersToRemove.push_back(outputs[i]->getObjectId());
+                               if(outputs[i]->isConnected())
+                               {
+                                       boxConnected = true;
+                               }
                        }
 
-                       controllersToRemove.push_back(control->getId());
+                       // Add connection controllers to be removed
+                       std::map<int, GObjectController*>::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;i<controllersToRemove.size();i++)
                {
                        int id = controllersToRemove[i];
-                       GObjectController *cont = _controllers[id];
+                       GObjectController *cont = _controllers[id];                     
                        cont->removeFromScene();
-                       unregisterController((InteractorStyleMaracas*)cont);
+                       unregisterController((InteractorStyleMaracas*)cont);                    
                        _controllers.erase(id);
                }
 
@@ -753,12 +841,12 @@ namespace bbtk
                        int i;
                        for(i = 0; i<packages.size();i++)
                        {
-                               script+="load ";
+                               script+="include ";
                                script+=packages[i];
                                script+="\n";
                        }
 
-                       script+="load std\n";
+                       script+="include std\n";
 
                        for(i = 0; i<boxes.size();i++)
                        {
@@ -832,6 +920,29 @@ namespace bbtk
 
        //=========================================================================
 
+       void wxVtkSceneManager::deleteAllBoxes()
+       {
+               std::map<int, GObjectController*>::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