X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FEditorGraphicBBS%2FbbsWxGUIEditorGraphic%2FwxGEditorTabPanel.cxx;h=58e8835daf6f83690c92aeb5fa7694541078b3da;hb=782cadf1306a646406ed7a089907f73a5f12c4e5;hp=cd591b16d36a18a543dc1a82928c583aa0ebd911;hpb=827bf260ed8c5451c11c41854c411e8a84d70f11;p=bbtkGEditor.git diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx index cd591b1..58e8835 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx @@ -1,3 +1,28 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Santé) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ +*/ + /*========================================================================= Program: bbtk Module: $RCSfile$ @@ -47,37 +72,36 @@ 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 wxGEditorTabPanel::wxGEditorTabPanel 0\n"); - 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(); -printf("EED wxGEditorTabPanel::wxGEditorTabPanel 1\n"); } //========================================================================= wxGEditorTabPanel::~wxGEditorTabPanel() { -printf ("EED %p ~wxGEditorTabPanel()\n" , this ); //ED02JUIN2010 _sceneManager->disconnectDrop(); _panelsManager->VerifyLastTabPanel(); //FCY memory leaks delete _panelAUIMgr; delete _sceneManager; - } //========================================================================= void wxGEditorTabPanel::initWxVtkCanvas() { -printf("EED wxGEditorTabPanel::initWxVtkCanvas 0\n"); 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 @@ -85,7 +109,6 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 0\n"); _panelAUIMgr->AddPane((wxWindow*)baseview->GetWxVTKRenderWindowInteractor(),wxAuiPaneInfo().Fixed().CenterPane()); _panelAUIMgr->Update(); -printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); } //========================================================================= @@ -107,11 +130,19 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); 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"); + } return true; } + //========================================================================= + void wxGEditorTabPanel::saveTempandUpdate(const std::string &action) + { + _panelsManager->saveTempandUpdate(action); + } //========================================================================= void wxGEditorTabPanel::setPanelsManager(wxTabPanelsManager* panelsManager) @@ -181,10 +212,134 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); //========================================================================= + 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::iterator it = _actualdo+1; + states.erase(it, states.end()); + states.push_back(content); + + std::vector::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); - _sceneManager->loadDiagram(inputStream); + 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::saveStringAction(const std::string &action) + { + char temp[50]; + sprintf(temp,".%d", sstates.size()); + sstates.push_back(action + temp); } //========================================================================= @@ -193,6 +348,8 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); { return _id; } + + //=========================================================================