X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FEditorGraphicBBS%2FbbsWxGUIEditorGraphic%2FwxGEditorTabPanel.cxx;h=a941a94c79c9df46ca330810107895c0653a31e8;hb=14342b19da6542ac157c5e7881a8294b209d1a32;hp=682c1193ffecf282544166a111c9487815eac2db;hpb=25cc7b0782c5950c95cbf3fa94586769ae093f10;p=bbtkGEditor.git diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx index 682c119..a941a94 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,40 +72,41 @@ 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; - _actualdo = states.begin(); + _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() START \n" , this ); //ED02JUIN2010 _sceneManager->disconnectDrop(); _panelsManager->VerifyLastTabPanel(); //FCY memory leaks delete _panelAUIMgr; delete _sceneManager; - - printf ("EED %p ~wxGEditorTabPanel() END\n" , this ); - } //========================================================================= void wxGEditorTabPanel::initWxVtkCanvas() { -printf("EED wxGEditorTabPanel::initWxVtkCanvas 0\n"); wxVtk3DBaseView *baseview = new wxVtk3DBaseView(this); baseview->Configure(); - _sceneManager=new wxVtkSceneManager(this,baseview,_id); +//EED 07 juin 2013 + baseview->GetCamera()->SetViewUp (0, 1, 0); + baseview->GetCamera()->SetPosition (0, 0, 1); + baseview->GetCamera()->SetFocalPoint (0, 0, 0); + +//EED 15 oct 2012 _sceneManager=new wxVtkSceneManager(this,baseview,_id); + _sceneManager=new wxVtkSceneManager(this,baseview,_id, _bbtkfactory); //EED02JUIN2010 @@ -88,33 +114,118 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 0\n"); _panelAUIMgr->AddPane((wxWindow*)baseview->GetWxVTKRenderWindowInteractor(),wxAuiPaneInfo().Fixed().CenterPane()); _panelAUIMgr->Update(); -printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); } //========================================================================= bool wxGEditorTabPanel::OnDropText(wxCoord x, wxCoord y, const wxString& data) { - std::string packageName=""; - std::string boxType=""; - - wxString foo( (data) ); - char str[150]; - strcpy( str, (const char*)foo.mb_str(wxConvUTF8) ); - - char delims[] = ":"; - char *result = NULL; - result = strtok( str, delims ); - packageName += result; - result = strtok( NULL, delims ); - boxType += result; - - _sceneManager->createGBlackBox(x,y,packageName, boxType); + /* + * DFGO + * To handle bbs and bbg: + * handle data parameter to detect if incoming string is file or bbs or + * bbg or blackbox. + * + * For a drag and drop tutorial read: + * http://zetcode.com/gui/wxwidgets/dragdrop/ + */ + + //wxMessageBox(data); + + std::string stdData = crea::wx2std(data); + + //std::cout << "Text drop: '" << stdData << "'" << std::endl; + + if(stdData.substr(0,4) == "box:") + { + int posT = stdData.find_first_of(':', 4); + std::string packageName = stdData.substr(4, posT-4); + posT = stdData.find_first_not_of(':', posT); + std::string boxType = stdData.substr(posT); + + //std::cout << "box: Package='" << packageName << "' BoxType='" << boxType << "'" <TryToOpenScriptApplication(packageName,boxType) == false ) + { + _sceneManager->createGBlackBox(x,y,packageName, boxType); + saveTempandUpdate("drop box"); + } + } + // DFGO: file for linux + else if(stdData.substr(0,5) == "file:") + { + stdData=stdData.substr(0,stdData.size()-1); + std::cout << "Dropped file: " << stdData << std::endl; + std::stringstream ss(stdData); + std::getline(ss, stdData, (char)13); + while(!ss.eof()) + { + std::string filePath = stdData.substr(7); + std::cout << filePath << ": "; + + FILE *ff=fopen(filePath.c_str(),"r"); + if( +// wxFile::Exists( crea::std2wx(filePath)) + ff!=NULL + ) + { + fclose(ff); + std::cout << "File Exists." << std::endl; + wxFileName fileToOpen(crea::std2wx(filePath)); + + std::string filetype = crea::wx2std(fileToOpen.GetExt()); + std::string filename = crea::wx2std(fileToOpen.GetFullName()); + std::string filepath = crea::wx2std(fileToOpen.GetFullPath()); + + + if(filetype == "bbs") + { + std::cout << "Importing bbs file." << std::endl; + wxMessageBox(crea::std2wx("You are opening a bbs file, " + "make sure not to overwrite an existing bbg file " + "when saving the pipeline."), + crea::std2wx("Opening File Warning"), wxICON_INFORMATION); + this->_panelsManager->GetParentGUIEditorGraphicBBS()->OpenBBS(filepath, filename); + } + else if(filetype == "bbg") + { + std::cout << "Opening bbg file." << std::endl; + this->_panelsManager->GetParentGUIEditorGraphicBBS()->OpenDiagram(filepath, filename); + } + else + { + std::cout << "Unknown file type: Can't open this kind of file: " << filetype << std::endl; + } + } + else + { + std::cout << "File Doesn't Exists. The given path is invalid: " << filePath << std::endl; + } + std::getline(ss, stdData, (char)13); + } + } return true; } + //========================================================================= + void wxGEditorTabPanel::saveTempandUpdate(const std::string &action) + { + _panelsManager->saveTempandUpdate(action); + } //========================================================================= void wxGEditorTabPanel::setPanelsManager(wxTabPanelsManager* panelsManager) @@ -184,12 +295,12 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); //========================================================================= - void wxGEditorTabPanel::saveTempDiagram() //FCY + void wxGEditorTabPanel::saveTempDiagram(const std::string &action) //FCY { std::string content = ""; // writing file header content += "# ----------------------------------\n"; - content += "# - BBTKGEditor v 1.2 BBG BlackBox Diagram file\n"; + content += "# - BBTKGEditor v 1.3 BBG BlackBox Diagram file\n"; content += "# - "; content += "temp"; content += "\n"; @@ -201,14 +312,20 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); 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(); } @@ -223,25 +340,40 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); } //========================================================================= - unsigned short wxGEditorTabPanel::getUndoState() + 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() + unsigned short wxGEditorTabPanel::getRedoState( std::string &stre) { + stre = "Redo"; if(states.size()>0) { - if(_actualdo == --states.end() || states.size() == 1) + 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; + } } } @@ -256,10 +388,12 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); if(_actualdo == states.end() ) // same size, write to the end { (_actualdo--); + (_sactualdo--); } if(_actualdo != states.begin() ) { ss << *(--_actualdo); + _sactualdo--; } else { @@ -270,6 +404,7 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); else //redo { _actualdo++; + _sactualdo++; if(_actualdo != states.end()) { ss << *_actualdo; @@ -282,13 +417,22 @@ printf("EED wxGEditorTabPanel::initWxVtkCanvas 1\n"); _sceneManager->loadDiagram(ss); } - + + void wxGEditorTabPanel::saveStringAction(const std::string &action) + { + char temp[50]; + sprintf(temp,".%d", sstates.size()); + sstates.push_back(action + temp); + } + //========================================================================= int wxGEditorTabPanel::getPanelId() { return _id; } + + //=========================================================================