]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx
Feature #1758
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxGEditorTabPanel.cxx
index 4291597df0cc6b00e2caf375424b6f908adfd1c3..104b09578da3b2b75ecac4f320961d8eb5ad9a84 100644 (file)
@@ -47,23 +47,27 @@ namespace bbtk
        }
 
        //=========================================================================
-       wxGEditorTabPanel::wxGEditorTabPanel(wxWindow *parent,int id):wxPanel(parent),wxTextDropTarget()
+       wxGEditorTabPanel::wxGEditorTabPanel(wxWindow *parent,int id, Factory::Pointer bbtkfactory)
+        : wxPanel(parent),wxTextDropTarget()
        {
-               printf ("EED %p wxGEditorTabPanel 2 ()\n" , this );
                _id=id;
-               _panelAUIMgr = new wxAuiManager(this);
-               _sceneManager = NULL;
+               _panelAUIMgr    = new wxAuiManager(this);
+               _sceneManager   = NULL;
+               _actualdo               = states.begin();
+               _sactualdo              = sstates.begin();
+               _bbtkfactory    = bbtkfactory;
                initWxVtkCanvas();
        }
 
        //=========================================================================
        wxGEditorTabPanel::~wxGEditorTabPanel()
        {
-printf ("EED %p ~wxGEditorTabPanel()\n" , this );
 //ED02JUIN2010         _sceneManager->disconnectDrop();
 
         _panelsManager->VerifyLastTabPanel();
-
+               //FCY memory leaks
+               delete _panelAUIMgr;
+               delete _sceneManager;
        }
 
        //=========================================================================
@@ -71,7 +75,8 @@ printf ("EED %p ~wxGEditorTabPanel()\n" , this );
        {
                wxVtk3DBaseView *baseview = new wxVtk3DBaseView(this);
                baseview->Configure();
-               _sceneManager=new wxVtkSceneManager(this,baseview,_id);
+//EED 15 oct 2012              _sceneManager=new wxVtkSceneManager(this,baseview,_id);
+               _sceneManager=new wxVtkSceneManager(this,baseview,_id, _bbtkfactory);
 
 
 //EED02JUIN2010
@@ -100,11 +105,65 @@ printf ("EED %p ~wxGEditorTabPanel()\n" , this );
                 result = strtok( NULL, delims );
                 boxType += result;
 
-               _sceneManager->createGBlackBox(x,y,packageName, boxType);
-
+               if ( _panelsManager->TryToOpenScriptApplication(packageName,boxType) == false )
+               {
+                       _sceneManager->createGBlackBox(x,y,packageName, boxType);
+                       saveTempandUpdate("drop box");
+               }
+
+/*EED Borrame
+       >>>>>>  TryToOpenScriptApplication
+               Package::Pointer k;
+               std::map< std::string, BlackBoxDescriptor::Pointer> mapDesc;
+               BlackBoxDescriptor::Pointer descriptor;
+               k                       = _bbtkfactory->GetPackage(packageName);
+               mapDesc         = k->GetDescriptorMap();
+               descriptor      = mapDesc[boxType];
+               
+               if (descriptor->IsTypeOfScript_Application()==true)
+               {
+                       OpenScript(descriptor->GetScriptFileName(),boxType);
+               >>>>>   OpenScript
+                       printf("EED wxGEditorTabPanel::OnDropText packageName=%s   boxType=%s   APPLI ScriptFileName=%s\n", packageName.c_str() , boxType.c_str() , descriptor->GetScriptFileName().c_str() );
+                       std::string fileName                                                    = boxType+".bbg";
+                       std::string filePathNameBBS                                             = descriptor->GetScriptFileName();
+                       std::string filePathNameBBG                                             = filePathNameBBS;
+                       filePathNameBBG[ filePathNameBBG.length()-1 ]   = 'g';
+                       
+                       wxMessageDialog windowMessage1(NULL,_T("The system is going to open a bbg or bbs for you. Be careful if you save this file."), _T("Alert !"), wxOK);
+                       windowMessage1.ShowModal();
+                       
+                       if ( Utilities::FileExists( filePathNameBBG ) )
+                       {
+                               _panelsManager->OpenDiagram( filePathNameBBG , fileName );     
+                       } else {
+                               if ( Utilities::FileExists( filePathNameBBS ) )
+                               {
+                                       _panelsManager->OpenBBS( filePathNameBBS , fileName );     
+                               } else {
+                                       wxMessageDialog windowMessage1(NULL,_T("..ERROR.. loading script bbg/bbs."), _T("Alert !"), wxOK);
+                                       windowMessage1.ShowModal();
+                               }
+                       }
+                       <<<<<
+               } 
+       <<<<<<< 
+// EED Borrame         
+//             else {
+//                     _sceneManager->createGBlackBox(x,y,packageName, boxType);
+//                     saveTempandUpdate("drop box");
+//             }
+
+ */
+               
          return true;
        }
 
+       //=========================================================================
+       void wxGEditorTabPanel::saveTempandUpdate(const std::string &action)
+       {
+               _panelsManager->saveTempandUpdate(action);
+       }
        //=========================================================================
 
        void wxGEditorTabPanel::setPanelsManager(wxTabPanelsManager* panelsManager)
@@ -135,9 +194,9 @@ printf ("EED %p ~wxGEditorTabPanel()\n" , this );
 
        //=========================================================================
 
-       std::string wxGEditorTabPanel::saveComplexBoxBBS(std::string cbName,std::string cbAuthor,std::string cbCategory,std::string cbDescription)
+       std::string wxGEditorTabPanel::saveComplexBoxBBS()
        {
-               return _sceneManager->saveComplexBoxBBS(cbName,cbAuthor,cbCategory,cbDescription);
+               return _sceneManager->saveComplexBoxBBS();
        }
 
        //=========================================================================
@@ -158,21 +217,150 @@ printf ("EED %p ~wxGEditorTabPanel()\n" , this );
 
        void wxGEditorTabPanel::centerView()
        {
-               _sceneManager->centerView();
+               if(_sceneManager)
+               {
+                       _sceneManager->centerView();
+               }
+       }
+
+       //=========================================================================
+
+       void wxGEditorTabPanel::saveDiagram(std::string &content, const std::string &path) //DFCH
+       {
+               this->SetFullPath(path);
+               _sceneManager->saveDiagram(content);
        }
 
        //=========================================================================
 
-       void wxGEditorTabPanel::saveDiagram(std::string &content)
+       void wxGEditorTabPanel::saveTempDiagram(const std::string &action) //FCY
        {
+               std::string content = "";
+               // writing file header
+               content += "# ----------------------------------\n";
+               content += "# - BBTKGEditor v 1.3 BBG BlackBox Diagram file\n";
+               content += "# - ";
+               content += "temp";
+               content += "\n";
+               content += "# ----------------------------------\n";
+               content += "\n";
+               content += "APP_START\n";
                _sceneManager->saveDiagram(content);
+               content += "APP_END\n"; //put here to avoid mistakes
+               if(_actualdo == states.end() ) // same size, write to the end
+               {
+                       states.push_back (content);
+                       saveStringAction(action);
+               }
+               else
+               {
+                       std::vector<std::string>::iterator it = _actualdo+1;
+                       states.erase(it, states.end());
+                       states.push_back(content);
+
+                       std::vector<std::string>::iterator sit = _sactualdo+1;
+                       sstates.erase(sit, sstates.end());
+                       saveStringAction(action);
+               }
+               _actualdo = states.end();
+               _sactualdo = sstates.end();
+                       
+       }
+
+       //=========================================================================
+
+       void wxGEditorTabPanel::loadDiagram(ifstream &inputStream, const std::string &path) //DFCH
+       {
+               this->SetFullPath(path);
+               stringstream ss;
+               ss << inputStream.rdbuf() ;
+               _sceneManager->loadDiagram(ss);
+       }
+
+       //=========================================================================
+       unsigned short wxGEditorTabPanel::getUndoState( std::string &stun)
+       {
+               stun = "Undo";
+               if(states.size()>0)
+               {
+                       if(_actualdo == states.begin() )
+                       {
+                               
+                               return 0;
+                       }
+                       else
+                       {
+                               stun +=" - ";
+                               stun += _sactualdo->substr(0,(--_sactualdo)->find_last_of("."));
+                               _sactualdo++;
+                               return 1;
+                       }
+               }
+       }
+
+       unsigned short wxGEditorTabPanel::getRedoState( std::string &stre)
+       {
+               stre = "Redo";
+               if(states.size()>0)
+               {
+                       if(_actualdo == --states.end() || states.size() == 1 || _actualdo == states.end())
+                               return 0;
+                       else
+                       {
+                               stre +=" - ";
+                               stre += _sactualdo->substr(0,(++_sactualdo)->find_last_of("."));
+                               --_sactualdo;
+                               return 1;
+                       }
+               }
        }
 
        //=========================================================================
+       void wxGEditorTabPanel::loadTempDiagram(unsigned short un) //FCY
+       {
+               unsigned short res = 1;
+               deleteAllBoxes();
+               std::stringstream ss;
+               if (un == 0) //undo
+               {
+                       if(_actualdo == states.end() ) // same size, write to the end
+                       {
+                               (_actualdo--);
+                               (_sactualdo--);
+                       }
+                       if(_actualdo != states.begin() )
+                       {
+                               ss << *(--_actualdo);
+                               _sactualdo--;
+                       }
+                       else
+                       {
+                               ss << *_actualdo;
+                               res = 0;
+                       }
+               }
+               else //redo
+               {
+                       _actualdo++;
+                       _sactualdo++;
+                       if(_actualdo != states.end())
+                       {
+                               ss << *_actualdo;
+                       }
+                       else
+                       {
+                               res = 0;
+                       }
+               }
+               _sceneManager->loadDiagram(ss);
+       
+       }
 
-       void wxGEditorTabPanel::loadDiagram(ifstream &inputStream)
+       void wxGEditorTabPanel::saveStringAction(const std::string &action)
        {
-               _sceneManager->loadDiagram(inputStream);
+               char temp[50];
+               sprintf(temp,".%d", sstates.size());
+               sstates.push_back(action + temp);
        }
 
        //=========================================================================
@@ -181,6 +369,8 @@ printf ("EED %p ~wxGEditorTabPanel()\n" , this );
        {
                return _id;
        }
+       
+
 
        //=========================================================================
 
@@ -239,6 +429,96 @@ printf ("EED %p ~wxGEditorTabPanel()\n" , this );
                return _sceneManager;
        }
 
+       //=========================================================================
+    std::string wxGEditorTabPanel::GetCbName()
+       {
+           return _sceneManager->GetCbName();
+       }
+
+
+       //=========================================================================
+    std::string wxGEditorTabPanel::GetCbPackageName()
+       {
+           return _sceneManager->GetCbPackageName();
+       }
+
+       //=========================================================================
+    std::string wxGEditorTabPanel::GetAuthor()
+       {
+           return _sceneManager->GetAuthor();
+       }
+
+       //=========================================================================
+    std::string wxGEditorTabPanel::GetDescription()
+       {
+           return _sceneManager->GetDescription();
+       }
+
+       //=========================================================================
+    std::string wxGEditorTabPanel::GetCategory()
+       {
+           return _sceneManager->GetCategory();
+       }
+
+       //=========================================================================
+    void wxGEditorTabPanel::SetCbName(std::string cbName)
+    {
+        _sceneManager->SetCbName( cbName );
+    }
+
+       //=========================================================================
+    void wxGEditorTabPanel::SetCbPackageName(std::string packagename)
+    {
+        _sceneManager->SetCbPackageName( packagename );
+    }
+
+
+       //=========================================================================
+    void wxGEditorTabPanel::SetAuthor(std::string author)
+    {
+        _sceneManager->SetAuthor( author );
+    }
+
+
+       //=========================================================================
+    void wxGEditorTabPanel::SetCategory(std::string category)
+    {
+        _sceneManager->SetCategory( category );
+    }
+
+
+       //=========================================================================
+    void wxGEditorTabPanel::SetDescription(std::string description)
+    {
+        _sceneManager->SetDescription( description );
+    }
+    //=========================================================================
+       //DFCH
+       void wxGEditorTabPanel::SetFullPath( const std::string& fullpath )
+       {
+               this->_fullPath = fullpath;
+       }
+       //=========================================================================
+       //DFCH
+       void wxGEditorTabPanel::SetFileName( const std::string& filename )
+       {
+               this->_fileName = filename;
+       }
+       //=========================================================================
+       //DFCH
+       std::string wxGEditorTabPanel::GetFullPath( )
+       {
+               return( this->_fullPath );
+       }
+       //=========================================================================
+       //DFCH
+    std::string wxGEditorTabPanel::GetFileName( )
+    {
+               return( this->_fileName );
+       }
+
+
+
 
 }  // EO namespace bbtk