From 31dee6ade406b4b04ea61b9e6527b663e9ed6540 Mon Sep 17 00:00:00 2001 From: corredor <> Date: Wed, 26 May 2010 08:38:47 +0000 Subject: [PATCH] The actual version works with complex box automatic generated from selected boxes ... Maybe this is the final version before the presentation .... --- .../bbsKernelEditorGraphic/GBlackBoxModel.cxx | 52 ++ .../bbsKernelEditorGraphic/GBlackBoxModel.h | 6 + .../bbsKernelEditorGraphic/GBoxModel.cxx | 14 + .../bbsKernelEditorGraphic/GBoxModel.h | 3 + .../GComplexBoxPortModel.cxx | 20 +- .../bbsKernelEditorGraphic/GPortModel.cxx | 7 + .../bbsKernelEditorGraphic/GPortModel.h | 1 + .../bbsKernelEditorGraphic/GlobalConstants.h | 1 + .../wxVtkSceneManager.cxx | 520 ++++++++++++++++-- .../wxVtkSceneManager.h | 10 +- .../bbtkwxGUIEditorGraphicBBS.cxx | 38 +- .../bbtkwxGUIEditorGraphicBBS.h | 123 +++-- .../wxGEditorTabPanel.cxx | 21 + .../bbsWxGUIEditorGraphic/wxGEditorTabPanel.h | 3 + .../wxTabPanelsManager.cxx | 18 + .../wxTabPanelsManager.h | 2 + 16 files changed, 729 insertions(+), 110 deletions(-) diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBlackBoxModel.cxx b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBlackBoxModel.cxx index 5351493..4d69b64 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBlackBoxModel.cxx +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBlackBoxModel.cxx @@ -173,6 +173,58 @@ namespace bbtk //========================================================================= + std::string GBlackBoxModel::getValueInputPort(int pos) + { + return _inputs[pos]->getValue(); + } + + //========================================================================= + + std::string GBlackBoxModel::getValueInput(std::string name) + { + for(int i = 0; i<_inputs.size();i++) + { + if(_inputs[i]->getBBTKName()==name) + { + return _inputs[i]->getValue(); + } + } + return NULL; + } + + //========================================================================= + + std::vector GBlackBoxModel::getConnectedInputs() + { + std::vector connected; + for(int i = 0; i<_inputs.size();i++) + { + if(_inputs[i]->isConnected()) + { + connected.push_back(i); + } + } + return connected; + } + + //========================================================================= + + std::vector GBlackBoxModel::getConnectedOutputs() + { + std::vector connected; + for(int i = 0; i<_outputs.size();i++) + { + if(_outputs[i]->isConnected()) + { + connected.push_back(i); + } + } + return connected; + } + + //========================================================================= + + } // EO namespace bbtk // EOF diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBlackBoxModel.h b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBlackBoxModel.h index 74da5f6..a459102 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBlackBoxModel.h +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBlackBoxModel.h @@ -78,6 +78,12 @@ namespace bbtk void setValueToInputPort(int pos,std::string value); void setValueToInput(std::string name,std::string value); + std::string getValueInputPort(int pos); + std::string getValueInput(std::string name); + + std::vector getConnectedInputs(); + std::vector getConnectedOutputs(); + private: //Private Attributes diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBoxModel.cxx b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBoxModel.cxx index 0801e54..7f8f798 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBoxModel.cxx +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBoxModel.cxx @@ -170,6 +170,20 @@ namespace bbtk //========================================================================= + GPortModel* GBoxModel::getInputPort(int pos) + { + return _inputs[pos]; + } + + //========================================================================= + + GPortModel* GBoxModel::getOutputPort(int pos) + { + return _outputs[pos]; + } + + //========================================================================= + void GBoxModel::updatePorts() { for(int i = 0; i<_inputs.size();i++) diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBoxModel.h b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBoxModel.h index b02c7a6..05cb6bc 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBoxModel.h +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GBoxModel.h @@ -85,6 +85,9 @@ namespace bbtk GPortModel* getInputPort(std::string name); GPortModel* getOutputPort(std::string name); + GPortModel* getInputPort(int pos); + GPortModel* getOutputPort(int pos); + void updatePorts(); private: diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GComplexBoxPortModel.cxx b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GComplexBoxPortModel.cxx index 2bdd8cb..e5a604c 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GComplexBoxPortModel.cxx +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GComplexBoxPortModel.cxx @@ -74,10 +74,24 @@ namespace bbtk void GComplexBoxPortModel::save(std::string &content) { - content+="COMPLEX_BOX_PORT\n"; - // COMPLEX_BOX_PORT info + content+="COMPLEX_PORT\n"; + // Box info + content+=_bbtkName; + content+="\n"; - content+="FIN_COMPLEX_BOX_PORT\n"; + //Box Position + char buffer [50]; + sprintf (buffer, "%f", _xInic); + content+=buffer; + content+=":"; + sprintf (buffer, "%f", _yInic); + content+=buffer; + content+=":"; + sprintf (buffer, "%f", _zInic); + content+=buffer; + content+="\n"; + + content+="FIN_COMPLEX_PORT\n"; } diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GPortModel.cxx b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GPortModel.cxx index c6ca8b0..69c41e3 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GPortModel.cxx +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GPortModel.cxx @@ -104,6 +104,13 @@ namespace bbtk return _portType; } + //========================================================================= + + int GPortModel::getPosInBox() + { + return _posInBox; + } + //========================================================================= std::string GPortModel::getStatusText() diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GPortModel.h b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GPortModel.h index 6dcef4d..474ebb3 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GPortModel.h +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GPortModel.h @@ -80,6 +80,7 @@ namespace bbtk void setValue(std::string value); std::string getValue(); virtual void save(std::string &content); + int getPosInBox(); private: diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GlobalConstants.h b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GlobalConstants.h index 8aa7195..ce68e60 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GlobalConstants.h +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/GlobalConstants.h @@ -163,6 +163,7 @@ namespace bbtk const int ID_ADDCOMPLEXBOXOUTPUT = 1008; const int ID_SAVE_AS_BBS = 1009; const int ID_SAVE_AS_COMPLEXBOX = 1010; + const int ID_COPY_TO_COMPLEXDIAGRAM = 1011; const int wxID_NOTEBOOK = 1012; } diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx index 784c3f6..50991d1 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.cxx @@ -182,13 +182,7 @@ namespace bbtk //Resgiter change to the observers of the actual model model->notifyObservers(_idManager); - //Register the controller of the new object - registerController((InteractorStyleMaracas*) controller); - - //Add the object to the objects list - int newId = _controllers.size(); - controller->setId(newId); - _controllers[newId] = controller; + int newId = addObjectController(controller); return newId; } @@ -242,13 +236,7 @@ namespace bbtk //Resgiter change to the observers of the actual model model->notifyObservers(_idManager); - //Register the controller of the new object - registerController((InteractorStyleMaracas*) controller); - - //Add the object to the objects list - int newId = _controllers.size(); - controller->setId(newId); - _controllers[newId] = controller; + int newId = addObjectController(controller); return newId; } @@ -301,13 +289,7 @@ namespace bbtk //Resgiter change to the observers of the actual model model->notifyObservers(_idManager); - //Register the controller of the new object - registerController((InteractorStyleMaracas*) controller); - - //Add the object to the objects list - int newId = _controllers.size(); - controller->setId(newId); - _controllers[newId] = controller; + int newId = addObjectController(controller); return newId; } @@ -359,12 +341,7 @@ namespace bbtk model->notifyObservers(_idManager); - //Register the controller of the new object - registerController((InteractorStyleMaracas*) controller); - - int newId = _controllers.size(); - controller->setId(newId); - _controllers[newId] = controller; + int newId = addObjectController(controller); return (GPortController*)controller; } @@ -423,22 +400,20 @@ namespace bbtk manContourControl->SetMoving( false ); - registerController((InteractorStyleMaracas*) connectorcontroller); + connectorcontroller->setModelAndView(connectorModel,connectorView); + + int newId = addObjectController(connectorcontroller); connectorcontroller->setManualContourController(manContourControl); connectorModel->setManualContourModel(manContourModel); connectorView->setManualContourView(manContourView); connectorView->setModel(connectorModel); connectorView->setBaseView(_baseView); - connectorcontroller->setModelAndView(connectorModel,connectorView); + connectorModel->addObserver(connectorView); connectorModel->addObserver(this); - int newId = _controllers.size(); - connectorcontroller->setId(newId); - _controllers[newId] = connectorcontroller; - return newId; } @@ -631,9 +606,6 @@ namespace bbtk } } - - - return true; } @@ -830,9 +802,9 @@ namespace bbtk GObjectController *control = _controllers[id]; std::vector controllersToRemove; - if(control->getGObjectType()==GBLACKBOX) + if(control->getGObjectType()==GBLACKBOX || control->getGObjectType()==GCOMPLEXINPUTPORT || control->getGObjectType()==GCOMPLEXOUTPUTPORT) { - GBlackBoxModel *bbmod = (GBlackBoxModel*)control->getModel(); + GBoxModel *bbmod = (GBoxModel*)control->getModel(); std::vector inputs = bbmod->getInputPorts(); bool boxConnected = false; @@ -1283,10 +1255,52 @@ namespace bbtk //========================================================================= void wxVtkSceneManager::saveDiagram(std::string &content) - { - //Print boxes + { char buffer [50]; - std::vector boxes = getBoxes(); + + //Print info IF COMPLEX BOX + content+="COMPLEXBOX:"; + if(_isComplexBox) + { + content+="TRUE\n"; + + //Print info complex input ports + std::vector inputs = getComplexInputPorts(); + int insize = inputs.size(); + content+="COMPLEXINPUTS:"; + sprintf (buffer, "%d", insize); + content+=buffer; + content+="\n"; + + for(int i = 0;igetModel()->save(content); + } + + //Print info complex output ports + std::vector outputs = getComplexOutputPorts(); + int outsize = outputs.size(); + content+="COMPLEXOUTPUTS:"; + sprintf (buffer, "%d", outsize); + content+=buffer; + content+="\n"; + + for(int i = 0;igetModel()->save(content); + } + } + else + { + content+="FALSE\n"; + } + + //Print boxes + std::vector boxes = getBlackBoxes(); int bsize = boxes.size(); content+="BOXES:"; sprintf (buffer, "%d", bsize); @@ -1343,6 +1357,119 @@ namespace bbtk if(start) { + + //---------- + getline(inputStream,line);//COMPLEX_BOX:TRUE|FALSE + char complex[15]; + strcpy( complex, line.c_str() ); + result = strtok( complex, delims ); + result = strtok( NULL, delims ); + std::string isComplexBox(result); + + if(isComplexBox=="TRUE") + { + _isComplexBox=true; + + //----------------------- + //- COMPLEX INPUT PORTS + //----------------------- + getline(inputStream,line);//COMPLEXINPUTS:num + char inputs[18]; + strcpy( inputs, line.c_str() ); + result = strtok( inputs, delims ); + result = strtok( NULL, delims ); + + int numInputs; + std::istringstream inps(result); + inps >> numInputs; + + for(int i = 0;i> xIn; + std::istringstream ySt(yInic); + ySt >> yIn; + std::istringstream zSt(zInic); + zSt >> zIn; + + getline(inputStream,line);//FIN_COMPLEX_PORT + + int idInputPort = createGComplexBoxInputPort(inputPortName); + GObjectController *cont = _controllers[idInputPort]; + GBoxModel *cbmod = (GBoxModel*)cont->getModel(); + cbmod->setInicPoint(xIn,yIn,zIn); + cbmod->notifyObservers(_idManager); + } + + + //----------------------- + //- COMPLEX OUTPUT PORTS + //----------------------- + + getline(inputStream,line);//COMPLEXOUTPUTS:num + char outputs[18]; + strcpy( outputs, line.c_str() ); + result = strtok( outputs, delims ); + result = strtok( NULL, delims ); + + int numOutputs; + std::istringstream outps(result); + outps >> numOutputs; + + for(int i = 0;i> xIn; + std::istringstream ySt(yInic); + ySt >> yIn; + std::istringstream zSt(zInic); + zSt >> zIn; + + getline(inputStream,line);//FIN_COMPLEX_PORT + + int idOutputPort = createGComplexBoxOutputPort(outputPortName); + GObjectController *cont = _controllers[idOutputPort]; + GBoxModel *cbmod = (GBoxModel*)cont->getModel(); + cbmod->setInicPoint(xIn,yIn,zIn); + cbmod->notifyObservers(_idManager); + } + + } + //---------- getline(inputStream,line);//BOXES:num char boxes[9]; @@ -1478,7 +1605,7 @@ namespace bbtk result = strtok( NULL, delims ); std::string nameEndPort(result); - std::vector lstB = getBoxes(); + std::vector lstB = getBlackBoxes(); GPortModel *startP=NULL; GPortModel *endP=NULL; @@ -1495,7 +1622,38 @@ namespace bbtk endP = bbMod->getInputPort(nameEndPort); } } - + + if(_isComplexBox) + { + if(startP==NULL) + { + std::vector lstInputs = getComplexInputPorts(); + for(int j = 0;jgetModel(); + if(_controllers[idB]->getModel()->getBBTKName()==nameStartBox) + { + startP = cbMod->getOutputPort(nameStartPort); + } + } + } + + if(endP==NULL) + { + std::vector lstOutputs = getComplexOutputPorts(); + for(int j = 0;jgetModel(); + if(_controllers[idB]->getModel()->getBBTKName()==nameEndBox) + { + endP = cbMod->getInputPort(nameEndPort); + } + } + } + } + int idCon = createGConnector(startP); _worldState = NOTHING_HAPPENS; GConnectorController *tempp = (GConnectorController*)_controllers[idCon]; @@ -1513,7 +1671,7 @@ namespace bbtk //========================================================================= - std::vector wxVtkSceneManager::getBoxes() + std::vector wxVtkSceneManager::getBlackBoxes() { std::vector vect; std::map::iterator it; @@ -1530,6 +1688,40 @@ namespace bbtk //========================================================================= + std::vector wxVtkSceneManager::getComplexInputPorts() + { + std::vector vect; + std::map::iterator it; + for(it = _controllers.begin(); it != _controllers.end(); ++it) + { + GObjectController *cont = it->second; + if(cont->getGObjectType()==GCOMPLEXINPUTPORT) + { + vect.push_back(cont->getId()); + } + } + return vect; + } + + //========================================================================= + + std::vector wxVtkSceneManager::getComplexOutputPorts() + { + std::vector vect; + std::map::iterator it; + for(it = _controllers.begin(); it != _controllers.end(); ++it) + { + GObjectController *cont = it->second; + if(cont->getGObjectType()==GCOMPLEXOUTPUTPORT) + { + vect.push_back(cont->getId()); + } + } + return vect; + } + + //========================================================================= + std::vector wxVtkSceneManager::getConnections() { std::vector vect; @@ -1561,6 +1753,246 @@ namespace bbtk //========================================================================= + int wxVtkSceneManager::addObjectController(GObjectController* objController) + { + //Register the controller of the new object + registerController((InteractorStyleMaracas*) objController); + + //Add the object to the objects list + int newId = _controllers.size(); + objController->setId(newId); + _controllers[newId] = objController; + return newId; + } + + //========================================================================= + + int wxVtkSceneManager::getNumSelectedObjects() + { + return _selectedObjects.size(); + } + + //========================================================================= + + std::map wxVtkSceneManager::getSelectedObjects() + { + std::map mapSelected; + + std::map::iterator it; + for(it = _controllers.begin(); it != _controllers.end(); ++it) + { + GObjectController *cont = it->second; + if(cont->getGObjectType()==GBLACKBOX && cont->getView()->getState()==SELECTED) + { + mapSelected[cont->getId()]=cont; + } + } + + std::map::iterator it2; + for(it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) + { + GObjectController *cont = it2->second; + if(cont->getGObjectType()==GCONNECTOR) + { + GConnectorModel* cmod = (GConnectorModel*)cont->getModel(); + GBoxModel* endPortParentBox = cmod->getEndPort()->getParentBox(); + GBoxModel* startPortParentBox = cmod->getStartPort()->getParentBox(); + + std::map::iterator iterOBJ1 = mapSelected.find(startPortParentBox->getObjectId()); + std::map::iterator iterOBJ2 = mapSelected.find(endPortParentBox->getObjectId()); + + if(iterOBJ1 != mapSelected.end() && iterOBJ2 != mapSelected.end()) + { + int ID = cont->getId(); + mapSelected[ID]=cont; + } + + } + } + return mapSelected; + } + + //========================================================================= + + void wxVtkSceneManager::addObjects(std::map objectsMap) + { + + std::map oldIdNewIdBoxes; + std::vector connections; + + std::map::iterator it; + for(it = objectsMap.begin(); it != objectsMap.end(); ++it) + { + GObjectController *cont = it->second; + int type = cont->getGObjectType(); + + if(type==GBLACKBOX) + { + // Copy black box + double xInic, yInic,zInic; + GBlackBoxModel* copyBox = (GBlackBoxModel*)cont->getModel(); + copyBox->getInicPoint(xInic,yInic,zInic); + int idBox = createGBlackBox(0,0,copyBox->getBBTKPackage(),copyBox->getBBTKType()); + + int idcB = copyBox->getObjectId(); + oldIdNewIdBoxes[idcB]=idBox; + cont = _controllers[idBox]; + GBlackBoxModel* newbox = (GBlackBoxModel*)cont->getModel(); + newbox->setInicPoint(xInic,yInic,zInic); + int num = newbox->getNumInputPorts(); + for(int j=0;jsetValueToInputPort(j,copyBox->getValueInputPort(j)); + } + newbox->notifyObservers(_idManager); + } + else if(type==GCONNECTOR) + { + int idCon = cont->getId(); + connections.push_back(idCon); + } + + } + + for(int i = 0 ;igetModel(); + + GPortModel* startPort = connectModel->getStartPort(); + int startPortIndex = startPort->getPosInBox(); + GPortModel* endPort = connectModel->getEndPort(); + int endPortIndex = endPort->getPosInBox(); + + GBlackBoxModel* startPortParentBox = (GBlackBoxModel*)startPort->getParentBox(); + GBlackBoxModel* endPortParentBox = (GBlackBoxModel*)endPort->getParentBox(); + + int idNewStartBox = oldIdNewIdBoxes[startPortParentBox->getObjectId()]; + int idNewEndBox = oldIdNewIdBoxes[endPortParentBox->getObjectId()]; + + GBlackBoxModel* newStartBox = (GBlackBoxModel*)_controllers[idNewStartBox]->getModel(); + GBlackBoxModel* newEndBox = (GBlackBoxModel*)_controllers[idNewEndBox]->getModel(); + + GPortModel* newStartPort = newStartBox->getOutputPort(startPortIndex); + GPortModel* newEndPort = newEndBox->getInputPort(endPortIndex); + + // Creates connection + int idCon = createGConnector(newStartPort); + GConnectorController *tempp = (GConnectorController*)_controllers[idCon]; + GConnectorModel *conMod = (GConnectorModel*)tempp->getModel(); + vtkGConnectorView *conView = (vtkGConnectorView*)tempp->getView(); + tempp->endContourCreation(); + conMod->setEndPort(newEndPort); + conView->updateStartEndPoints(); + } + + std::map::iterator itIds; + for(itIds = oldIdNewIdBoxes.begin(); itIds != oldIdNewIdBoxes.end(); ++itIds) + { + int idOld = itIds->first; + int idNew = itIds->second; + + GBlackBoxModel* oldBox = (GBlackBoxModel*)objectsMap[idOld]->getModel(); + GBlackBoxModel* newBox = (GBlackBoxModel*)_controllers[idNew]->getModel(); + + std::vector oldInputConnections = oldBox->getConnectedInputs(); + std::vector oldOutputConnections = oldBox->getConnectedOutputs(); + std::vector newInputConnections = newBox->getConnectedInputs(); + std::vector newOutputConnections = newBox->getConnectedOutputs(); + + for(int k = 0; kgetInputPort(posInBox); + std::string inputPortName = inputPort->getBBTKName(); + int idInputPort = createGComplexBoxInputPort(inputPortName); + GObjectController *cont = _controllers[idInputPort]; + GBoxModel *cbmod = (GBoxModel*)cont->getModel(); + double xIn,yIn,zIn; + inputPort->getInicPoint(xIn,yIn,zIn); + yIn+=20; + cbmod->setInicPoint(xIn,yIn,zIn); + cbmod->notifyObservers(_idManager); + + GPortModel* inputPortEnd = newBox->getInputPort(posInBox); + + // Creates connection + int idCon = createGConnector(cbmod->getOutputPort(0)); + GConnectorController *tempp = (GConnectorController*)_controllers[idCon]; + GConnectorModel *conMod = (GConnectorModel*)tempp->getModel(); + vtkGConnectorView *conView = (vtkGConnectorView*)tempp->getView(); + tempp->endContourCreation(); + conMod->setEndPort(inputPortEnd); + conView->updateStartEndPoints(); + + } + + } + + + for(int k = 0; kgetOutputPort(posInBox); + std::string outputPortName = outputPort->getBBTKName(); + int idOutputPort = createGComplexBoxOutputPort(outputPortName); + GObjectController *cont = _controllers[idOutputPort]; + GBoxModel *cbmod = (GBoxModel*)cont->getModel(); + double xIn,yIn,zIn; + outputPort->getInicPoint(xIn,yIn,zIn); + yIn-=20; + cbmod->setInicPoint(xIn,yIn,zIn); + cbmod->notifyObservers(_idManager); + + GPortModel* outputPortEnd = newBox->getOutputPort(posInBox); + + // Creates connection + int idCon = createGConnector(outputPortEnd); + GConnectorController *tempp = (GConnectorController*)_controllers[idCon]; + GConnectorModel *conMod = (GConnectorModel*)tempp->getModel(); + vtkGConnectorView *conView = (vtkGConnectorView*)tempp->getView(); + tempp->endContourCreation(); + conMod->setEndPort(cbmod->getInputPort(0)); + conView->updateStartEndPoints(); + + } + + } + + } + + + } + + //========================================================================= + } // EO namespace bbtk // EOF diff --git a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.h b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.h index 5aee359..86f24fd 100644 --- a/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.h +++ b/lib/EditorGraphicBBS/bbsKernelEditorGraphic/wxVtkSceneManager.h @@ -127,12 +127,20 @@ namespace bbtk void centerView(); void refreshScene(); - std::vector getBoxes(); + std::vector getBlackBoxes(); std::vector getConnections(); + std::vector getComplexInputPorts(); + std::vector getComplexOutputPorts(); + + std::map getSelectedObjects(); + int getNumSelectedObjects(); bool isComplexBox(); void setComplexBox(bool val); + int addObjectController(GObjectController* objController); + void addObjects(std::map objectsMap); + private: diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx index 376db52..9ae5500 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.cxx @@ -141,7 +141,7 @@ namespace bbtk //========================================================================= void wxGUIEditorGraphicBBS::initMenu() { - // create a menu bar + // Create File menu and its items wxMenu *fileMenu = new wxMenu(); fileMenu->Append(ID_NEW, _T("New diagram"), _T("New")); fileMenu->Append(ID_SAVE_AS_DIAGRAM, _T("Save diagram"), _T("Save diagram")); @@ -155,16 +155,23 @@ namespace bbtk Connect(ID_SAVE_AS_COMPLEXBOX,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnSaveActualComplexBox)); Connect(wxID_EXIT,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnExit)); - // the "About" item should be in the help menu + // Create Help menu and its items + wxMenu *editMenu = new wxMenu; + editMenu->Append(ID_COPY_TO_COMPLEXDIAGRAM, _T("Copy selected to complex box"), _T("Creates a new complex box diagram with selected boxes")); + + Connect(ID_COPY_TO_COMPLEXDIAGRAM,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram)); + + // Create Help menu and its items wxMenu *helpMenu = new wxMenu; helpMenu->Append(wxID_ABOUT, _T("&About..."), _T("About")); - // now append the freshly created menu to the menu bar... + // Append the created menu to the menu bar wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(fileMenu, _T("&File")); + menuBar->Append(editMenu, _T("&Edit")); menuBar->Append(helpMenu, _T("&Help")); - // attach this menu bar to the frame + // Attach this menu bar to the frame SetMenuBar(menuBar); } @@ -458,7 +465,7 @@ namespace bbtk void wxGUIEditorGraphicBBS::OnSaveActualDiagram(wxCommandEvent& event) { - wxFileDialog * saveFileDialog = new wxFileDialog(this,wxT("Save actual diagram"),wxEmptyString,wxT("NewDiagram"),wxT("*.bbd"),wxSAVE|wxOVERWRITE_PROMPT); + wxFileDialog * saveFileDialog = new wxFileDialog(this,wxT("Save actual diagram"),wxEmptyString,wxT("NewDiagram"),wxT("*.bbg"),wxSAVE|wxOVERWRITE_PROMPT); if (saveFileDialog->ShowModal() == wxID_OK) { wxString fileName = saveFileDialog->GetPath(); @@ -471,7 +478,7 @@ namespace bbtk // writing file header content += "# ----------------------------------\n"; - content += "# - BBTKGEditor v 1.0 BBD BlackBox Diagram file\n"; + content += "# - BBTKGEditor v 1.0 BBG BlackBox Diagram file\n"; content += "# - "; //EED content += fileName; @@ -512,6 +519,16 @@ namespace bbtk GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_COMPLEXBOX,false); GetMenuBar()->GetMenu(0)->Enable(ID_SAVE_AS_BBS,true); } + + if(_tabsMgr->getNumActualSelectedObjects()>0) + { + GetMenuBar()->GetMenu(1)->Enable(ID_COPY_TO_COMPLEXDIAGRAM,true); + } + else + { + ///TODO Fix the possibility to say from the SceneManager to the GUI to refresh the options + GetMenuBar()->GetMenu(1)->Enable(ID_COPY_TO_COMPLEXDIAGRAM,true); + } } @@ -538,7 +555,7 @@ namespace bbtk void wxGUIEditorGraphicBBS::OnOpenDiagram(wxCommandEvent& event) { - wxFileDialog * openFileDialog = new wxFileDialog(this,wxT("Open diagram"),wxEmptyString,wxT(""),wxT("*.bbd"),wxOPEN|wxFILE_MUST_EXIST); + wxFileDialog * openFileDialog = new wxFileDialog(this,wxT("Open diagram"),wxEmptyString,wxT(""),wxT("*.bbg"),wxOPEN|wxFILE_MUST_EXIST); if (openFileDialog->ShowModal() == wxID_OK) { wxString fileName = openFileDialog->GetPath(); @@ -609,6 +626,13 @@ namespace bbtk //========================================================================= + void wxGUIEditorGraphicBBS::OnCopySelectedToComplexDiagram(wxCommandEvent& event) + { + _tabsMgr->copySelectedBBoxesToComplexDiagram(); + } + + //========================================================================= + void wxGUIEditorGraphicBBS::OnExit(wxCommandEvent& event) { Close(true); diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.h b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.h index 8367ab0..48c4243 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.h +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/bbtkwxGUIEditorGraphicBBS.h @@ -87,64 +87,77 @@ namespace bbtk { + //RaC: It is important if it exists a double relation + //e.g. wxTabPanelsManager includes wxGUIEditorGraphicBBS, and wxGUIEditorGraphicBBS includes wxTabPanelsManager class wxTabPanelsManager; - class wxVtkSceneManager; - + class wxGUIEditorGraphicBBS : public wxFrame - { - public: - wxGUIEditorGraphicBBS(wxFrame *parent ); - ~wxGUIEditorGraphicBBS(); - - void initToolbar(); - void initMenu(); - void initTabPanelsManager(); - void initPackageBrowser(); - void initHelpHTMLBrowser(); - - wxAuiNotebook* getAuiNotebook(); - void displayBlackBoxInfo(std::string packageName, std::string boxName); - void updateStatusBar(std::string textStatus); - void executeScript(std::string script); - - void editBlackBox(GBlackBoxModel *bbmodel); - void editDiagramParameters(wxVtkSceneManager* scene); - - void RegenerateAll(); - void DoRegeneratePackageDoc(const std::string& pack); - void DoRegenerateBoxesLists(); - - void refreshGUIControls(); - - void OnCreateNewTab(wxCommandEvent& event); - void OnOpenDiagram(wxCommandEvent& event); - void OnSaveActualDiagram(wxCommandEvent& event); - void OnSaveActualBBS(wxCommandEvent& event); - void OnSaveActualComplexBox(wxCommandEvent& event); - void OnExecuteActualDiagram(wxCommandEvent& event); - void OnDeleteAllBoxesActualDiagram(wxCommandEvent& event); - void OnCenterViewActualDiagram(wxCommandEvent& event); - void OnClickBtnComplexBox(wxCommandEvent& event); - void OnAddComplexBoxInput(wxCommandEvent& event); - void OnAddComplexBoxOutput(wxCommandEvent& event); - void OnExit(wxCommandEvent& event); - - - private: - wxAuiManager *_frameAUIMgr; - wxTabPanelsManager *_tabsMgr; - wxAuiNotebook *_notebook; - WxGUIPackageBrowser2 *_pkgBrowser; - WxGUIHtmlBrowser *_helpHtmlBrowser; - - std::string _dataDir; - - std::string _actualPkgBrowserBoxName; - - std::string _actualPkgBrowserPkgName; - - protected: + { + public: + wxGUIEditorGraphicBBS(wxFrame *parent); + ~wxGUIEditorGraphicBBS(); + + void initToolbar(); + void initMenu(); + void initTabPanelsManager(); + void initPackageBrowser(); + void initHelpHTMLBrowser(); + + wxAuiNotebook* getAuiNotebook(); + void displayBlackBoxInfo(std::string packageName, std::string boxName); + void updateStatusBar(std::string textStatus); + void executeScript(std::string script); + + void editBlackBox(GBlackBoxModel *bbmodel); + void editDiagramParameters(wxVtkSceneManager* scene); + + void RegenerateAll(); + void DoRegeneratePackageDoc(const std::string& pack); + void DoRegenerateBoxesLists(); + + void refreshGUIControls(); + + // File menu and toolbar events + void OnCreateNewTab(wxCommandEvent& event); + void OnOpenDiagram(wxCommandEvent& event); + void OnSaveActualDiagram(wxCommandEvent& event); + void OnSaveActualBBS(wxCommandEvent& event); + void OnSaveActualComplexBox(wxCommandEvent& event); + void OnExecuteActualDiagram(wxCommandEvent& event); + void OnDeleteAllBoxesActualDiagram(wxCommandEvent& event); + void OnCenterViewActualDiagram(wxCommandEvent& event); + void OnClickBtnComplexBox(wxCommandEvent& event); + void OnAddComplexBoxInput(wxCommandEvent& event); + void OnAddComplexBoxOutput(wxCommandEvent& event); + void OnExit(wxCommandEvent& event); + + // Edit menu events + void OnCopySelectedToComplexDiagram(wxCommandEvent& event); + + + private: + + //AuiManager for the wxWindow + wxAuiManager *_frameAUIMgr; + + //Class that manages all the tabs in the window + wxTabPanelsManager *_tabsMgr; + + //Notebook managed by the wxTabPanelsManager + wxAuiNotebook *_notebook; + + //Instance to the BBTK Package Browser + WxGUIPackageBrowser2 *_pkgBrowser; + + //Instance to the BBTK Help Browser + WxGUIHtmlBrowser *_helpHtmlBrowser; + + //Name of the box and its package that is shown in the browser + std::string _actualPkgBrowserBoxName; + std::string _actualPkgBrowserPkgName; + + protected: }; diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx index 682d3d4..03e1415 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx @@ -209,6 +209,27 @@ namespace bbtk } //========================================================================= + + std::map wxGEditorTabPanel::getSelectedObjects() + { + return _sceneManager->getSelectedObjects(); + } + + //========================================================================= + + void wxGEditorTabPanel::addObjects(std::map objectsMap) + { + _sceneManager->addObjects(objectsMap); + } + + //========================================================================= + + int wxGEditorTabPanel::getNumSelectedObjects() + { + return _sceneManager->getNumSelectedObjects(); + } + + //========================================================================= } // EO namespace bbtk diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.h b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.h index 05eab99..70f79fd 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.h +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.h @@ -94,6 +94,9 @@ namespace bbtk void setComplexBox(bool val); void addComplexInputPort(std::string portName); void addComplexOutputPort(std::string portName); + std::map getSelectedObjects(); + void addObjects(std::map objectsMap); + int getNumSelectedObjects(); //========================================================================= diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.cxx index 3ac9274..fc43c0c 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.cxx @@ -179,6 +179,24 @@ namespace bbtk //========================================================================= + void wxTabPanelsManager::copySelectedBBoxesToComplexDiagram() + { + std::map mapSelected = _actual->getSelectedObjects(); + addNewTab(); + setActualDiagramComplexBox(true); + _actual->addObjects(mapSelected); + _parent->refreshGUIControls(); + } + + //========================================================================= + + int wxTabPanelsManager::getNumActualSelectedObjects() + { + return _actual->getNumSelectedObjects(); + } + + //========================================================================= + void wxTabPanelsManager::OnTabChanged(wxAuiNotebookEvent& event) { int index = event.GetSelection(); diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.h b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.h index 7f1d60e..126141a 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.h +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxTabPanelsManager.h @@ -86,6 +86,8 @@ namespace bbtk void setActualDiagramComplexBox(bool val); void addActualDiagramComplexInputPort(std::string portName); void addActualDiagramComplexOutputPort(std::string portName); + void copySelectedBBoxesToComplexDiagram(); + int getNumActualSelectedObjects(); void OnTabChanged(wxAuiNotebookEvent& event); -- 2.45.1