_numBoxes=0;
_idManager=idManager;
_baseView=baseView;
- _idLastController=0;
_startDragging=false;
if( _baseView!=NULL )
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];
GObjectController *cont = it->second;
int type = cont->getGObjectType();
- if(cont->getView()->isPointInside(X,Y))
+ if(type==GBLACKBOX)
{
- if(type==GBLACKBOX)
+ if(cont->getView()->isPointInside(X,Y))
{
for (int i=0; i<_selectedObjects.size(); i++)
{
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());
}
for(int i = 0;i<lstInputs.size();i++)
{
GPortModel* port = lstInputs[i];
- wxStaticText *lblName = new wxStaticText(this, -1, std2wx(port->getBBTKName()),wxDefaultPosition,wxSize(100,20));
- wxStaticText *lblType = new wxStaticText(this, -1, std2wx(port->getBBTKType()),wxDefaultPosition,wxSize(230,20));
+ wxStaticText *lblName = new wxStaticText(this, -1, std2wx(port->getBBTKName()),wxDefaultPosition,wxSize(100,25));
+ wxStaticText *lblType = new wxStaticText(this, -1, std2wx(port->getBBTKType()),wxDefaultPosition,wxSize(250,25));
wxTextCtrl *txtValue = new wxTextCtrl(this, -1, _T(""),wxDefaultPosition,wxSize(90,25));
if(port->getValue()!="")
_lstNames.push_back(lblName);
_lstTypes.push_back(lblType);
_lstValues.push_back(txtValue);
-
+
sizer->Add(lblName,1,wxEXPAND,5);
sizer->Add(lblType,1,wxCENTRE|wxEXPAND,5);
sizer->Add(txtValue,1,wxEXPAND,5);
+
}
wxBoxSizer *buts = new wxBoxSizer(wxHORIZONTAL);