_numBoxes=0;
_idManager=idManager;
_baseView=baseView;
- _idLastController=0;
_startDragging=false;
if( _baseView!=NULL )
connectorModel->setManualContourModel(manContourModel);
connectorView->setManualContourView(manContourView);
connectorView->setModel(connectorModel);
+ connectorView->setBaseView(_baseView);
connectorcontroller->setModelAndView(connectorModel,connectorView);
int newId = _controllers.size();
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)
{
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];
if(clickOnObject==false)
{
- _parent->editDiagramParameters(this);
+ //_parent->editDiagramParameters(this);
}
return true;
for(int i=0;i<_selectedObjects.size();i++)
{
int id = _selectedObjects[i];
- removeObject(id);
+ deleteObject(id);
}
_selectedObjects.clear();
}
//=========================================================================
- void wxVtkSceneManager::removeObject(int id)
+ void wxVtkSceneManager::deleteObject(int id)
{
GObjectController *control = _controllers[id];
std::vector<int> controllersToRemove;
GBlackBoxModel *bbmod = (GBlackBoxModel*)control->getModel();
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());
+ controllersToRemove.push_back(inputs[i]->getObjectId());
+ if(inputs[i]->isConnected())
+ {
+ boxConnected = true;
+ }
}
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;
+ }
}
+ // 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());
}
//=========================================================================
+ 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