]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx
v1.1.0 Feature 1407
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxVtkSceneManager.cxx
index 543f88a7e294196bfc96232d400a19e761475068..b88f527cad467418da510f634b114e5d0e33699f 100644 (file)
 
 #include "wxVtkSceneManager.h"
 
-
 #include <vtkPolygon.h>
 #include <vtkUnstructuredGrid.h>
 
-
 namespace bbtk {
 
-cvs 
 //=========================================================================
 wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent,
                wxVtk3DBaseView *baseView, int idManager) {
@@ -62,13 +59,11 @@ wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent,
        if (_baseView != NULL) {
                //EED02JUIN2010
                printf(
-               "RaC-EED 21-06-2010 %p wxVtkSceneManager::wxVtkSceneManager If you comment this line, the drag and drop functionnality is not initialized.\n", this);
-
-               #ifdef __APPLE__
-
+                               "RaC-EED 21-06-2010 %p wxVtkSceneManager::wxVtkSceneManager If you comment this line, the drag and drop functionnality is not initialized.\n",
+                               this);
+//#ifdef __APPLE__
                _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget((wxDropTarget*)parent);
-
-               #endif
+//#endif
 
                configureBaseView();
                _worldState = NOTHING_HAPPENS;
@@ -92,9 +87,10 @@ void wxVtkSceneManager::disconnectDrop() {
 
 wxVtkSceneManager::~wxVtkSceneManager() {
        //FCY memory leaks
-       printf("EED %p ~wxVtkSceneManager()\n", this);
+       printf("EED %p ~wxVtkSceneManager() START\n", this);
        disconnectDrop();
        delete _baseView;
+       printf("EED %p ~wxVtkSceneManager() END\n", this);
 }
 
 //=========================================================================
@@ -114,15 +110,16 @@ void wxVtkSceneManager::configureBaseView() {
        interactorstylebaseview->SetwxVtkBaseView(_baseView);
 
        _baseView->GetRenderer()->GetActiveCamera()->ParallelProjectionOn();
-       _baseView->GetRenderer()->ResetCamera(-100, 100, -100, 100, 800, 1100);
+       _baseView->GetRenderer()->ResetCamera(-100, 100, -100, 100, -1000, 1000);
+       _baseView->GetRenderer()->GetActiveCamera()->Zoom(10);
+
 
        _baseView->GetRenderer()->SetBackground(0.9, 0.9, 0.9);
        _baseView->GetRenderer()->GradientBackgroundOn();
-       _baseView->Refresh();
 
        // Actos Port_Text
        _textActor = vtkTextActor3D::New();
-       _textActor->SetPosition(-9999, -9999, 900);
+       _textActor->SetPosition(-9999, -9999, GPOSITION_Z);
        _textActor->SetInput("<void>");
        _textActor->GetTextProperty()->SetFontSize(60);
        _textActor->GetTextProperty()->BoldOn();
@@ -136,7 +133,7 @@ void wxVtkSceneManager::configureBaseView() {
        //------------
        double xInic = 0;
        double yInic = 0;
-       double zInic = 900;
+       double zInic = GPOSITION_Z;
 
        vtkPolygon *aPolygon = vtkPolygon::New();
        _fillObjectActor = vtkActor::New();
@@ -257,7 +254,9 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,
        BlackBoxDescriptor::Pointer descriptor =
                        GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(
                                        packageName, boxType);
-
+       if (descriptor == NULL){
+                       printf("SCP: ERROR in wxVtkSceneManager::createGBlackBox, box %s probably does not exist.\n",  boxType.c_str());
+               }
        //Prepares the initial model
        //The coordinates obtained are the following. Top-Left:x=0,y=0 Bottom-Right:x=width,y=height
 
@@ -265,7 +264,7 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,
        double yy = windowHeight - y;
 
        //z value is not important yet, because it is only used a parallel projection
-       double zz = 900;
+       double zz = GPOSITION_Z;
        _baseView->TransCoordScreenToWorld(xx, yy, zz);
        model->setInicPoint(xx, yy, zz);
 
@@ -353,8 +352,7 @@ int wxVtkSceneManager::createGComplexBoxInputPort(std::string inputName) {
        double yy = windowHeight - 5;
 
        //z value is not important yet, because it is only used a parallel projection
-       double zz = 900;
-       printf("EED  wxVtkSceneManager::createGComplexBoxInputPort 900-450\n");
+       double zz = GPOSITION_Z;
 
        _baseView->TransCoordScreenToWorld(xx, yy, zz);
        model->setInicPoint(xx, yy, zz);
@@ -368,7 +366,7 @@ int wxVtkSceneManager::createGComplexBoxInputPort(std::string inputName) {
 
        //create the output port
        GPortController* portController = createGPort(GOUTPUTPORT, inputName,
-                       "ComplexInputPort", 0, model);
+                       "ComplexOutputPortType","ComplexOutputPortDescriopton", 0, model);
        model->addOutputPort((GPortModel*) portController->getModel());
 
        //Associates the view with the correspondent renderer and the  model.
@@ -412,9 +410,7 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
        double yy = windowHeight - 5;
 
        //z value is not important yet, because it is only used a parallel projection
-       double zz = 900;
-
-       printf("EED  wxVtkSceneManager::createGComplexBoxOutputPort 900-450\n");
+       double zz = GPOSITION_Z;
 
        _baseView->TransCoordScreenToWorld(xx, yy, zz);
        model->setInicPoint(xx, yy, zz);
@@ -428,7 +424,7 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
 
        //create the output port
        GPortController* portController = createGPort(GINPUTPORT, outputName,
-                       "ComplexInputPort", 0, model);
+                       "ComplexInputPort","ComplexInputPortDescription", 0, model);
        model->addInputPort((GPortModel*) portController->getModel());
 
        //Associates the view with the correspondent renderer and the  model.
@@ -452,7 +448,7 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
 int wxVtkSceneManager::createGInputPort(int portType, int posinBox,
                GBoxModel *blackBox, BlackBoxInputDescriptor *desc) {
        GPortController* portController = createGPort(portType, desc->GetName(),
-                       desc->GetTypeName(), posinBox, blackBox);
+                       desc->GetTypeName(), desc->GetDescription(), posinBox, blackBox);
        blackBox->addInputPort((GPortModel*) portController->getModel());
        return portController->getId();
 }
@@ -462,7 +458,7 @@ int wxVtkSceneManager::createGInputPort(int portType, int posinBox,
 int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,
                GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) {
        GPortController* portController = createGPort(portType, desc->GetName(),
-                       desc->GetTypeName(), posinBox, blackBox);
+                       desc->GetTypeName(),desc->GetDescription(), posinBox, blackBox);
        blackBox->addOutputPort((GPortModel*) portController->getModel());
        return portController->getId();
 }
@@ -470,7 +466,7 @@ int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,
 //=========================================================================
 
 GPortController* wxVtkSceneManager::createGPort(int portType,
-               std::string bbtkName, std::string bbtkType, int posInBox,
+               std::string bbtkName, std::string bbtkType, std::string bbtkDescription, int posInBox,
                GBoxModel *blackBox) {
        int type = GPORT;
 
@@ -488,6 +484,7 @@ GPortController* wxVtkSceneManager::createGPort(int portType,
 
        model->setBBTKType(bbtkType);
        model->setBBTKName(bbtkName);
+       model->setBBTKDescription(bbtkDescription);
 
        model->addObserver(view);
        model->addObserver(this);
@@ -513,15 +510,12 @@ GPortController* wxVtkSceneManager::createGPort(int portType,
 int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
        int type = GCONNECTOR;
 
-       manualConnectorContourController* manContourControl =
-                       new manualConnectorContourController();
-       manualConnectorContourView* manContourView =
-                       new manualConnectorContourView();
-       manualContourModel* manContourModel = new manualContourModel();
-
-       GConnectorController* connectorcontroller = new GConnectorController();
-       GConnectorModel* connectorModel = new GConnectorModel();
-       vtkGConnectorView* connectorView = new vtkGConnectorView();
+       manualConnectorContourController        *manContourControl              = new manualConnectorContourController();
+       manualConnectorContourView                      *manContourView                 = new manualConnectorContourView();
+       manualContourModel                                      *manContourModel                = new manualContourModel();
+       GConnectorController                            *connectorcontroller    = new GConnectorController();
+       GConnectorModel                                         *connectorModel                 = new GConnectorModel();
+       vtkGConnectorView                                       *connectorView                  = new vtkGConnectorView();
        connectorModel->setGObjectType(type);
 
        manContourModel->SetCloseContour(false);
@@ -530,33 +524,29 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
        manContourView->SetModel(manContourModel);
        manContourView->SetWxVtkBaseView(_baseView);
        manContourView->SetRange(0.5);
-       manContourView->SetZ(900);
+       manContourView->SetZ(GPOSITION_Z);
 
        manContourView->SetColorNormalContour(0, 0, 1);
        manContourView->SetColorEditContour(0.5, 0.5, 0.5);
        manContourView->SetColorSelectContour(1, 0.8, 0);
-       
-       
-      /**
+        
+        /**
          * JGRR AND CM
-         * Width increased from 2 to 5, it simplifies line handling and spline control :P
+         * Width increased from 2 to 3, it simplifies line handling and spline control :P
          * @param WidthLine  
-         */
-        
-        manContourView->SetWidthLine( 5 ) ;
-
-
+         */ 
+        manContourView->SetWidthLine( 3 ) ;
        manContourView->SetShowText(false);
 
        manContourControl->SetModelView(manContourModel, manContourView);
 
        manContourControl->CreateNewManualContour();
 
-       manContourView->RefreshContour();
 
        double x, y, z;
        connectorModel->getInicPoint(x, y, z);
-
+       
+       
        manContourControl->SetState(1);
        manContourModel->SetCloseContour(false);
 
@@ -568,8 +558,7 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
 
        int bak = manContourControl->GetNumberOfPointsManualContour() - 1;
        manContourControl->_bakIdPoint = bak;
-       manContourView->Refresh();
-
+       
        manContourControl->SetMoving(false);
 
        connectorcontroller->setModelAndView(connectorModel, connectorView);
@@ -585,6 +574,8 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
        connectorModel->addObserver(connectorView);
        connectorModel->addObserver(this);
 
+//     manContourView->Refresh();
+       
        return newId;
 }
 
@@ -637,34 +628,50 @@ void wxVtkSceneManager::update(int idController, int command) {
 
        if (command != NO_COMMAND) {
                if (command == ADD_TO_SELECTED) {
-                       //EEDBorrame                            GObjectController* cont = _controllers[idController];
-
                        if (GetIndexInSelected(idController) == -1) {
                                _selectedObjects.push_back(idController);
                        }
-
-                       //EEDBorrame
-                       //                              bool foundID=false;
-                       //                              for (int i=0; i<(int)_selectedObjects.size() && foundID==false; i++)
-                       //                              {
-                       //                                      if(_selectedObjects[i]==idController)
-                       //                                      {
-                       //                                              foundID = true;
-                       //                                      }
-                       //                              }
-                       //                              if(!foundID)
-                       //                              {
-                       //                                      _selectedObjects.push_back(idController);
-                       //                              }
-
                } else if (command == REMOVE_FROM_SELECTED) {
                        int index = GetIndexInSelected(idController);
                        if (index >= 0) {
                                _selectedObjects.erase(_selectedObjects.begin() + index);
                        }
                } else if (command == INIT_CREATION_CONTOUR) {
-                       _worldState = INIT_CREATION_CONTOUR;
-                       GObjectController* cont = _controllers[idController];
+
+                // JGRR & CM WH
+                typedef std::map<int , GObjectController*>::iterator TIterator ;
+                TIterator iter ;
+                TIterator iter_end ;
+                // Find current item in the controller
+                iter = _controllers.find( idController ) ;
+                iter_end = _controllers.end( ) ;
+                // If item exist 
+                if ( iter != iter_end ) {
+                    GObjectController* gobjc = iter->second ;
+
+                    std::string bbtkType = gobjc->getModel( )->getBBTKType( ) ;
+                    // And if the item is a port
+                    if ( gobjc->getModel( )->getGObjectType( ) == GPORT ) {
+                        TIterator c_it = _controllers.begin( ) ;
+                        // Go through all componets 
+                        for ( c_it ; c_it != iter_end ; c_it++ ) {
+                            GObjectController* obc = c_it->second ;
+                            int obc_type = obc->getModel( )->getGObjectType( ) ;
+                            std::string obc_bbtkType = obc->getModel( )->getBBTKType( ) ;
+                            // if the component is a port and the type is the same of that selected
+                            if ( ( obc_type == GPORT ) && ( obc_bbtkType == bbtkType ) ) {
+                                // Highliht element 
+                                obc->getView( )->setState( POSSIBLE_CONNECTION ) ;                             
+                                //obc->getView( )->setState( HIGHLIGHTED ) ;
+                            }
+                        }
+                    }
+                }
+
+                // EO JGRR & CM WH  
+                     
+                       _worldState                                     = INIT_CREATION_CONTOUR;
+                       GObjectController* cont         = _controllers[idController];
                        GPortModel* startOutputPort = (GPortModel*) cont->getModel();
 
                        // The last one is the controller of the connector
@@ -689,28 +696,46 @@ void wxVtkSceneManager::update(int idController, int command) {
                        }
                        _selectedObjects.clear();
                        _idConnectionInCreation = createGConnector(startOutputPort);
-               } else if (command == FIN_CREATION_CONTOUR && _worldState
-                               == INIT_CREATION_CONTOUR) {
+               } else if (command == FIN_CREATION_CONTOUR && _worldState == INIT_CREATION_CONTOUR) {
                        _worldState = NOTHING_HAPPENS;
                        //int id = _controllers.size()-1;
-                       GObjectController *cont = _controllers[_idConnectionInCreation];
-                       GConnectorModel *modelContour = (GConnectorModel*) cont->getModel();
-                       GObjectController *finPort = _controllers[idController];
+                       GObjectController       *cont                   = _controllers[_idConnectionInCreation];
+                       GConnectorModel         *modelContour   = (GConnectorModel*) cont->getModel();
+                       GObjectController       *finPort                = _controllers[idController];
 
                        if (finPort->getGObjectType() == GPORT) {
                                GPortModel* modelPort = (GPortModel*) finPort->getModel();
                                modelContour->setEndPort(modelPort);
-                               _parent->saveTempDiagram();
-                       }
 
-                       manualConnectorContourController
-                                       * manCont =
-                                                       ((GConnectorController*) cont)->getManualContourController();
-                       manualConnectorContourView
-                                       * connView =
-                                                       (manualConnectorContourView*) manCont->GetManualViewBaseContour();
-                       connView->Refresh();
+                                // JGRR CM                     
+                                typedef std::map<int, GObjectController*>::iterator TIterator;
+                                TIterator c_it = _controllers.begin();
+                                TIterator iter_end = _controllers.end();
+                                // Go through all componets 
+                                for (c_it; c_it != iter_end; c_it++) {
+                                    GObjectController* obc = c_it->second;
+                                    int obc_type = obc->getModel()->getGObjectType();
+                                    int obc_state = obc->getView()->getState();
+                                    // if the component is a port and the type is the same of that selected
+                                    if ((obc_type == GPORT) && (obc_state == POSSIBLE_CONNECTION)) {
+                                        // Return element to neutral state if not selected
+                                        obc->getView()->setState(NOTHING_HAPPENS);
+                                    }
+                                    if ((obc_type == GPORT) && (obc_state == SELECTED_POSSIBLE_CONNECTION)) {
+                                        // Change element to connected state
+                                        obc->getView()->setState(HIGHLIGHTED);
+
+                                    }
+
+                                }
+                                // EO JGRR CM                                
+                    
+                                                               _parent->saveTempandUpdate("create connection");
+                       }
 
+                       manualConnectorContourController        *manCont        = ((GConnectorController*) cont)->getManualContourController();
+                       manualConnectorContourView                      *connView       = (manualConnectorContourView*) manCont->GetManualViewBaseContour();
+                                     
                        std::map<int, GObjectController*>::iterator it2;
 
                        for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) {
@@ -721,21 +746,21 @@ void wxVtkSceneManager::update(int idController, int command) {
                                }
                                cont->SetActive(true);
                        }
+                       connView->Refresh();          
                }
 
        }
-
+        
 }
 
 //=========================================================================
 
 bool wxVtkSceneManager::OnMouseMove() {
        int X, Y;
-       bool okStatusMessage = false;
-       bool okPortMessage = false;
+       bool okStatusMessage    = false;
+       bool okPortMessage              = false;
        wxVTKRenderWindowInteractor *wxVTKiren;
-       wxVTKiren
-                       = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor();
+       wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor();
        wxVTKiren->GetEventPosition(X, Y);
 
        if (_worldState == DRAG_OBJECTS) {
@@ -762,17 +787,18 @@ bool wxVtkSceneManager::OnMouseMove() {
 
                _startDragging = false;
 
-       } else if (_worldState == NOTHING_HAPPENS || _worldState
-                       == INIT_CREATION_CONTOUR) {
+       } else if (_worldState == NOTHING_HAPPENS || _worldState == INIT_CREATION_CONTOUR) {
                std::map<int, GObjectController*>::iterator it;
                double px, py, pz;
                for (it = _controllers.begin(); it != _controllers.end(); ++it) {
                        GObjectController *desc = it->second;
-                       int type = desc->getGObjectType();
-                       int state = desc->getView()->getState();
+                       int type        = desc->getGObjectType();
+                       int state       = desc->getView()->getState();
                        desc->getModel()->getCenter(px, py, pz);
 
-                       if (state == HIGHLIGHTED) {
+                        // JGRR & CM
+                       if ((state == HIGHLIGHTED) || (state == SELECTED_POSSIBLE_CONNECTION )) {
+                        // EO JGRR & CM    
                                okStatusMessage = true;
                                updateStatusBar(desc->getStatusText());
                                if (type == GBLACKBOX) {
@@ -827,8 +853,15 @@ bool wxVtkSceneManager::OnLeftButtonDown() {
                                if (portmod->getPortType() == GINPUTPORT
                                                && portView->getState() == HIGHLIGHTED) {
                                        isOverPort = true;
-                               } // if
-                       } // if
+                                 } // if
+                                // JGRR & CM                    
+                                if ( portmod->getPortType( ) == GINPUTPORT &&  portView->getState( ) == SELECTED_POSSIBLE_CONNECTION   ) {
+                                    isOverPort = true ;
+                                    portView->setState( HIGHLIGHTED);
+                                }                    
+                                // EO JGRR & CM 
+
+                        } // if
                } // for
 
                if (isOverPort == false) {
@@ -839,14 +872,12 @@ bool wxVtkSceneManager::OnLeftButtonDown() {
 
        } else { //_worldState
 
-               _worldState = DRAG_OBJECTS;
-               _startDragging = true;
+               _worldState             = DRAG_OBJECTS;
+               _startDragging  = true;
 
-               int shiftkey =
-                               _vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey();
-               int ctrlkey =
-                               _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey();
-               ctrlkey = ctrlkey + shiftkey;
+               int shiftkey    = _vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey();
+               int ctrlkey             = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey();
+               ctrlkey                 = ctrlkey + shiftkey;
 
                GObjectController *cont = GetGBlackBoxControlerPointedByMouse();
 
@@ -968,6 +999,7 @@ void wxVtkSceneManager::UnSelectBlackBoxes() {
                int id = _selectedObjects[i];
                GObjectController* control = _controllers[id];
                control->getView()->setState(NOTHING_HAPPENS);
+               control->getModel()->notifyObservers(_idManager);
        }// for _selectedObjects
        _selectedObjects.clear();
 }
@@ -1025,38 +1057,49 @@ bool wxVtkSceneManager::OnLeftDClick() {
 
 //=========================================================================
 
-bool wxVtkSceneManager::OnChar() {
-       char keyCode = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode();
-        int ctrlkey = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey();
+bool wxVtkSceneManager::OnChar() 
+{
+       bool ok=false;
+       bool oktmp;
+       char keyCode    = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode();
+       int ctrlkey             = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey();
         
        // KeyCode 127 : Delete Key
        // KeyCode 8 : Backspace Key
-       if (keyCode == 8 || keyCode == 127) {
-               if (_selectedObjects.size() > 0) {
-                       for (int i = 0; i < (int) _selectedObjects.size(); i++) {
+       if (keyCode == 8 || keyCode == 127) 
+       {
+                       for (int i = 0; i < (int) _selectedObjects.size(); i++) 
+                       {
                                int id = _selectedObjects[i];
                                std::map<int, GObjectController*>::iterator it;
                                it = _controllers.find(id);
-                               if (it != _controllers.end()) {
-                                       deleteObject(id);
-                               }
+                               if (it != _controllers.end()) 
+                               {
+                                       oktmp   =       deleteObject(id);
+                                       ok              =       ok||oktmp;
+                               } // if
+                       }// for selected objects                
+                       if (ok) _selectedObjects.clear();
+                       _parent->saveTempandUpdate("delete object");
+       }// if keyCode
+       
+       /// Duplicate 
+#ifdef MACOSX
+       if((keyCode==0) && (ctrlkey==1)) {                
+#else
+       ctrlkey+=keyCode;
+       if(ctrlkey==5){                
+#endif
+               if(_selectedObjects.size()){
+                       std::cout<<"objects to copy :";
+                       for(int i=0;i<_selectedObjects.size();i++){
+                               std::cout<<_selectedObjects.at(i)<<" ";
                        }
-                       _selectedObjects.clear();
-               }
-       }
-        
-        /// Duplicate 
-             if(ctrlkey==5){                
-                if(_selectedObjects.size()){
-                    std::cout<<"objects to copy :";
-                    for(int i=0;i<_selectedObjects.size();i++){
-                       std::cout<<_selectedObjects.at(i)<<" ";
-                    }
-                    DuplicateObjects(getSelectedObjects());   
-                }else{
-                    std::cout<<"No objects to copy\n";
-                }
-            }  
+                       DuplicateObjects(getSelectedObjects());   
+               }else{
+                       std::cout<<"No objects to copy\n";
+               } // _selectedObjects.size
+       } // ctrlkey 5  
 
        return true;
 }
@@ -1082,10 +1125,11 @@ void wxVtkSceneManager::AddControlerToBeRemove(
 
 //=========================================================================
 
-void wxVtkSceneManager::deleteObject(int id) {
+bool wxVtkSceneManager::deleteObject(int id) 
+{
+       bool result=true;
        GObjectController *control = _controllers[id];
        std::vector<int> controllersToRemove;
-
        if (control->getGObjectType() == GBLACKBOX || control->getGObjectType()
                        == GCOMPLEXINPUTPORT || control->getGObjectType()
                        == GCOMPLEXOUTPUTPORT) {
@@ -1096,8 +1140,7 @@ void wxVtkSceneManager::deleteObject(int id) {
 
                // Add box input controllers to be removed
                for (int i = 0; i < (int) inputs.size(); i++) {
-                       AddControlerToBeRemove(&controllersToRemove,
-                                       inputs[i]->getObjectId());
+                       AddControlerToBeRemove(&controllersToRemove, inputs[i]->getObjectId());
                        if (inputs[i]->isConnected()) {
                                boxConnected = true;
                        }
@@ -1107,8 +1150,7 @@ void wxVtkSceneManager::deleteObject(int id) {
 
                // Add box output controllers to be removed
                for (int i = 0; i < (int) outputs.size(); i++) {
-                       AddControlerToBeRemove(&controllersToRemove,
-                                       outputs[i]->getObjectId());
+                       AddControlerToBeRemove(&controllersToRemove, outputs[i]->getObjectId());
                        if (outputs[i]->isConnected()) {
                                boxConnected = true;
                        }
@@ -1121,17 +1163,13 @@ void wxVtkSceneManager::deleteObject(int id) {
                        int type = cont->getGObjectType();
                        if (type == GCONNECTOR) {
                                GConnectorModel *conMod = (GConnectorModel*) cont->getModel();
-                               if (conMod->getStartPort() != NULL
-                                               && conMod->getStartPort()->getParentBox()->getObjectId()
-                                                               == bbmod->getObjectId()) {
-                                       AddControlerToBeRemove(&controllersToRemove,
-                                                       conMod->getObjectId());
+                               if (conMod->getStartPort() != NULL && conMod->getStartPort()->getParentBox()->getObjectId() == bbmod->getObjectId()) 
+                               {
+                                       AddControlerToBeRemove(&controllersToRemove,conMod->getObjectId());
                                }
-                               if (conMod->getEndPort() != NULL
-                                               && conMod->getEndPort()->getParentBox()->getObjectId()
-                                                               == bbmod->getObjectId()) {
-                                       AddControlerToBeRemove(&controllersToRemove,
-                                                       conMod->getObjectId());
+                               if (conMod->getEndPort() != NULL && conMod->getEndPort()->getParentBox()->getObjectId() == bbmod->getObjectId()) 
+                               {
+                                       AddControlerToBeRemove(&controllersToRemove,conMod->getObjectId());
                                }
                        }
                }
@@ -1139,8 +1177,15 @@ void wxVtkSceneManager::deleteObject(int id) {
                // Add box controller to be removed
                AddControlerToBeRemove(&controllersToRemove, bbmod->getObjectId());
        } else if (control->getGObjectType() == GCONNECTOR) {
-               GConnectorModel *conMod = (GConnectorModel*) control->getModel();
-               AddControlerToBeRemove(&controllersToRemove, conMod->getObjectId());
+               GConnectorController *gconnectorcontroler = (GConnectorController*)control;
+               if (gconnectorcontroler->getManualContourController()->IsEditable()==false)
+               {
+                       GConnectorModel *conMod = (GConnectorModel*) control->getModel();
+                       AddControlerToBeRemove(&controllersToRemove, conMod->getObjectId());
+               } else{
+                       gconnectorcontroler->getManualContourController()->OnChar();
+                       result = false;
+               }
        }
 
        std::map<int, GObjectController*>::iterator it;
@@ -1155,7 +1200,9 @@ void wxVtkSceneManager::deleteObject(int id) {
                        _controllers.erase(it);
                }//if
        }// for
-       _parent->saveTempDiagram();
+       
+       
+       return result;
 }
 
 //=========================================================================
@@ -1572,7 +1619,6 @@ void wxVtkSceneManager::deleteAllBoxes() {
        }
        _selectedObjects.clear();
        _controllers.clear();
-       refreshScene();
 }
 
 //=========================================================================
@@ -1595,8 +1641,6 @@ void wxVtkSceneManager::centerView() {
        _baseView->GetRenderer()->GetActiveCamera()->SetFocalPoint(0, 0, temp[2]);
        _baseView->GetRenderer()->GetActiveCamera()->GetPosition(temp);
        _baseView->GetRenderer()->GetActiveCamera()->SetPosition(0, 0, temp[2]);
-       _baseView->RefreshView();
-
 }
 
 //=========================================================================
@@ -1715,6 +1759,9 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        if (line == "# - BBTKGEditor v 1.2 BBG BlackBox Diagram file") {
                                version = line.substr(18, 3);
                        }
+                       if (line == "# - BBTKGEditor v 1.3 BBG BlackBox Diagram file") {
+                               version = line.substr(18, 3);
+                       }
                } else if (line == "APP_START") {
                        start = true;
                        break;
@@ -1813,6 +1860,11 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                std::istringstream zSt(zInic);
                                zSt >> zIn;
 
+                               if (version<="1.2")
+                               {
+                                       if (zIn==900) zIn=GPOSITION_Z;
+                               }
+                               
                                getline(inputStream, line);//FIN_COMPLEX_PORT
 
                                configGComBoxInputOutputPort(true, inputPortName, xIn, yIn, zIn);
@@ -1859,10 +1911,14 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                std::istringstream zSt(zInic);
                                zSt >> zIn;
 
+                               if (version<="1.2")
+                               {
+                                       if (zIn==900) zIn=GPOSITION_Z;
+                               }
+                               
                                getline(inputStream, line);//FIN_COMPLEX_PORT
 
-                               configGComBoxInputOutputPort(false, outputPortName, xIn, yIn,
-                                               zIn);
+                               configGComBoxInputOutputPort(false, outputPortName, xIn, yIn, zIn);
 
                        } // for output complex box
 
@@ -1918,6 +1974,13 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        std::istringstream zSt(zInic);
                        zSt >> zIn;
 
+                       
+                       if (version<="1.2")
+                       {
+                               if (zIn==900) zIn=GPOSITION_Z;
+                       }
+                       
+                       
                        //----------
                        getline(inputStream, line);//xEnd:yEnd:zEnd
                        strcpy(coord, line.c_str());
@@ -1936,14 +1999,19 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        std::istringstream zEt(zEnd);
                        zEt >> zEn;
 
+                       if (version<="1.2")
+                       {
+                               if (zEn==900) zEn=GPOSITION_Z;
+                       }
+                       
+                       
                        bool boxExecutable = false;
                        if (isExec == "TRUE") {
                                boxExecutable = true;
                        }
 
                        int idBox = createGBlackBox(xIn, yIn, package, type);
-                       configGBlackBox(idBox, xIn, yIn, zIn, name, boxExecutable, xEn,
-                                       yEn, zEn);
+                       configGBlackBox(idBox, xIn, yIn, zIn, name, boxExecutable, xEn, yEn, zEn);
 
                        GObjectController *cont = _controllers[idBox];
                        GBlackBoxModel *bbmod = (GBlackBoxModel*) cont->getModel();
@@ -1961,6 +2029,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                std::string value(result);
 
                                bbmod->setValueToInput(name, value);
+
                                getline(inputStream, line);//PORT o FIN_BOX
                                port = line.substr(0, 4);
                        } // while
@@ -1996,17 +2065,13 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        result = strtok(NULL, delims);
                        std::string nameEndPort(result);
 
-                       int idCon = configGConnetion(nameStartBox, nameStartPort,
-                                       nameEndBox, nameEndPort);
+                       int idCon = configGConnetion(nameStartBox, nameStartPort,nameEndBox, nameEndPort);
 
                        if (version != "1.0") {
                                //Readding control points of the manualContour
-                               //ups1
-                               GConnectorController *tempp =
-                                               (GConnectorController*) _controllers[idCon];
-                               GConnectorModel *conMod = (GConnectorModel*) tempp->getModel();
-                               vtkGConnectorView *conView =
-                                               (vtkGConnectorView*) tempp->getView();
+                               GConnectorController *tempp             = (GConnectorController*) _controllers[idCon];
+                               GConnectorModel *conMod                 = (GConnectorModel*) tempp->getModel();
+                               vtkGConnectorView *conView              = (vtkGConnectorView*) tempp->getView();
                                getline(inputStream, line); //NumberOfControlPoints:##
                                strcpy(conns, line.c_str());
                                result = strtok(conns, delims);
@@ -2031,9 +2096,13 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                        result = strtok(NULL, delims);
                                        std::istringstream isPointZ(result);
                                        isPointZ >> pz;
-
-                                       conMod->getManualContourModel()->InsertPoint_id(ii + 1, px,
-                                                       py, pz);
+               
+                                       if (version<="1.2")
+                                       {
+                                               if (pz==900) pz=GPOSITION_Z;
+                                       }
+                                       
+                                       conMod->getManualContourModel()->InsertPoint_id(ii + 1, px, py, pz);
                                        conView->getManualContourView()->AddPoint();
                                }
                        }// version !=1.0
@@ -2042,7 +2111,6 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
 
        } // start
 
-       refresh();
 }
 //=========================================================================
 
@@ -2117,11 +2185,17 @@ int wxVtkSceneManager::configGConnetion(std::string nameStartBox,
        boxModel = findGBox(nameStartBox);
        if (boxModel != NULL) {
                startP = boxModel->getOutputPort(nameStartPort);
+               if(startP == NULL){
+                       printf("SCP: ERROR in wxVtkSceneManager::configGConnetion start port %s is null. Port name is probably wrong.\n", nameStartPort.c_str());
+               }
        }
 
        boxModel = findGBox(nameEndBox);
        if (boxModel != NULL) {
                endP = boxModel->getInputPort(nameEndPort);
+               if(endP == NULL){
+                       printf("SCP: ERROR in wxVtkSceneManager::configGConnetion end port %s is null. Port name is probably wrong\n", nameStartPort.c_str(), nameEndPort.c_str());
+               }
        }
 
        //ups2
@@ -2228,9 +2302,7 @@ int wxVtkSceneManager::addObjectController(GObjectController* objController) {
        int newId = _contLastId;//_controllers.size();
        objController->setId(newId);
        _controllers[newId] = objController;
-       std::cout
-                       << "DFCH: int wxVtkSceneManager::addObjectController(GObjectController* objController) ---- _contLastId = "
-                       << _contLastId << std::endl;
+       //std::cout << "DFCH: int wxVtkSceneManager::addObjectController(GObjectController* objController) ---- _contLastId = " << _contLastId << std::endl;
        _contLastId++;
        return newId;
 }
@@ -2329,7 +2401,6 @@ void wxVtkSceneManager::DuplicateObjects(std::map<int, GObjectController*> objec
             cont->getModel()->notifyObservers(_idManager);
 
         }
-        refreshScene();
     }
 
 
@@ -2570,7 +2641,6 @@ void wxVtkSceneManager::SetCbPackageName(std::string packagename) {
        }
 }
 
-
 //=========================================================================
 std::string wxVtkSceneManager::GetCbPackageName() {
        return _cbPackageName;
@@ -2610,7 +2680,6 @@ void wxVtkSceneManager::SetDescription(std::string description) {
        }
 }
 
-
 //=========================================================================
 std::string wxVtkSceneManager::GetDescription() {
        return _Description;
@@ -2619,6 +2688,60 @@ std::string wxVtkSceneManager::GetDescription() {
 //=========================================================================
 
 
+void wxVtkSceneManager::printAll(int com , int sta ){
+        
+         int tmpState = sta ;
+        if ( tmpState == NOTHING_HAPPENS ) {
+            std::cout << "CONTROLER STATE---->NOTHING_HAPPENS\n" ;
+        }
+        if ( tmpState == HIGHLIGHTED ) {
+            std::cout << "CONTROLER STATE---->HIGHLIGHTED\n" ;
+        }
+        if ( tmpState == POSSIBLE_CONNECTION ) {
+            std::cout << "CONTROLER STATE---->POSSIBLE_CONNECTION\n" ;
+        }
+        if ( tmpState == SELECTED_POSSIBLE_CONNECTION ) {
+            std::cout << "CONTROLER STATE---->SELECTED_POSSIBLE_CONNECTION\n" ;
+        }
+        if ( tmpState == CLICKED ) {
+            std::cout << "CONTROLER STATE---->CLICKED\n" ;
+        }
+        if ( tmpState == DRAG ) {
+            std::cout << "CONTROLER STATE---->DRAG\n" ;
+        }
+        if ( tmpState == SELECTED ) {
+            std::cout << "CONTROLER STATE---->SELECTED\n" ;
+        }
+        if ( tmpState == CREATING_CONTOUR ) {
+            std::cout << "CONTROLER STATE---->CREATING_CONTOUR\n" ;
+        }   
+         
+         // :P 
+
+        int command = com ;
+        if ( command == INIT_CREATION_CONTOUR ) {
+            std::cout << "COMMAND ----> INIT_CREATION_CONTOUR \n" ;
+        }
+        if ( command == FIN_CREATION_CONTOUR ) {
+            std::cout << "COMMAND ----> FIN_CREATION_CONTOUR \n" ;
+        }
+        if ( command == ADD_TO_SELECTED ) {
+            std::cout << "COMMAND ----> ADD_TO_SELECTED \n" ;
+        }
+        if ( command == DRAG_OBJECTS ) {
+            std::cout << "COMMAND ----> DRAG_OBJECTS \n" ;
+        }
+        if ( command == EDIT_BLACKBOX ) {
+            std::cout << "COMMAND ----> EDIT_BLACKBOX \n" ;
+        }
+        if ( command == REMOVE_FROM_SELECTED ) {
+            std::cout << "COMMAND ----> REMOVE_FROM_SELECTED \n" ;
+        }
+        
+    }
+
+
 } // EO namespace bbtk
 
-// EOF 
+// EOF
+