/* # --------------------------------------------------------------------- # # 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$ Language: C++ Date: $Date$ Version: $Revision$ =========================================================================*/ /* --------------------------------------------------------------------- * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale) * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux * * 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. * ------------------------------------------------------------------------ */ /** * \file * \brief Class bbtk::wxGEditorTabPanel . */ #include "wxGEditorTabPanel.h" #include "creaWx.h" namespace bbtk { //========================================================================= wxGEditorTabPanel::wxGEditorTabPanel() { printf ("EED %p wxGEditorTabPanel 1 ()\n" , this ); } //========================================================================= wxGEditorTabPanel::wxGEditorTabPanel(wxWindow *parent,int id, Factory::Pointer bbtkfactory) : wxPanel(parent),wxTextDropTarget() { _id = id; _panelAUIMgr = new wxAuiManager(this); _sceneManager = NULL; _actualdo = states.begin(); _sactualdo = sstates.begin(); _bbtkfactory = bbtkfactory; initWxVtkCanvas(); } //========================================================================= wxGEditorTabPanel::~wxGEditorTabPanel() { //ED02JUIN2010 _sceneManager->disconnectDrop(); _panelsManager->VerifyLastTabPanel(); //FCY memory leaks delete _panelAUIMgr; delete _sceneManager; } //========================================================================= void wxGEditorTabPanel::initWxVtkCanvas() { wxVtk3DBaseView *baseview = new wxVtk3DBaseView(this,NULL); baseview->Configure(); //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 printf("RaC-EED 21-06-2010 wxGEditorTabPanel::initWxVtkCanvas Remove the panelAUIMgr, and change to a normal sizer inside the wxGEditorTabPanel\n"); _panelAUIMgr->AddPane((wxWindow*)baseview->GetWxVTKRenderWindowInteractor(),wxAuiPaneInfo().Fixed().CenterPane()); _panelAUIMgr->Update(); } //========================================================================= bool wxGEditorTabPanel::OnDropText(wxCoord x, wxCoord y, const wxString& data) { /* * 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) { _panelsManager = panelsManager; } //========================================================================= void wxGEditorTabPanel::displayBlackBoxInfo(std::string packageName, std::string boxName) { _panelsManager->displayBlackBoxInfo(packageName,boxName); } //========================================================================= void wxGEditorTabPanel::updateStatusBar(std::string textStatus) { _panelsManager->updateStatusBar(textStatus); } //========================================================================= std::string wxGEditorTabPanel::getDiagramBBS(bool wln) { return _sceneManager->getDiagramBBS(wln); } //========================================================================= std::string wxGEditorTabPanel::saveComplexBoxBBS() { return _sceneManager->saveComplexBoxBBS(); } //========================================================================= void wxGEditorTabPanel::editBlackBox(GBlackBoxModel *bbmodel) { _panelsManager->editBlackBox(bbmodel); } //========================================================================= void wxGEditorTabPanel::deleteAllBoxes() { _sceneManager->deleteAllBoxes(); } //========================================================================= void wxGEditorTabPanel::centerView() { if(_sceneManager) { _sceneManager->centerView(); } } //========================================================================= void wxGEditorTabPanel::saveDiagram(std::string &content, const std::string &path) //DFCH { this->SetFullPath(path); _sceneManager->saveDiagram(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::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); 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); } //========================================================================= int wxGEditorTabPanel::getPanelId() { return _id; } //========================================================================= bool wxGEditorTabPanel::isComplexBox() { return _sceneManager->isComplexBox(); } //========================================================================= void wxGEditorTabPanel::setComplexBox(bool val) { _sceneManager->setComplexBox(val); } //========================================================================= void wxGEditorTabPanel::addComplexInputPort(std::string portName) { _sceneManager->createGComplexBoxInputPort(portName); } //========================================================================= void wxGEditorTabPanel::addComplexOutputPort(std::string portName) { _sceneManager->createGComplexBoxOutputPort(portName); } //========================================================================= std::map wxGEditorTabPanel::getSelectedObjects() { return _sceneManager->getSelectedObjects(); } //========================================================================= void wxGEditorTabPanel::addObjects(std::map objectsMap) { _sceneManager->addObjects(objectsMap); } //========================================================================= int wxGEditorTabPanel::getNumSelectedObjects() { return _sceneManager->getNumSelectedObjects(); } //========================================================================= wxVtkSceneManager* wxGEditorTabPanel::getSceneManager() { 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(); } //========================================================================= std::string wxGEditorTabPanel::GetMessageKind() { return _sceneManager->GetMessageKind(); } //========================================================================= std::string wxGEditorTabPanel::GetMessageLevel() { return _sceneManager->GetMessageLevel(); } //========================================================================= 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 ); } //========================================================================= void wxGEditorTabPanel::SetMessageKind(std::string kind) { _sceneManager->SetMessageKind( kind ); } //========================================================================= void wxGEditorTabPanel::SetMessageLevel(std::string level) { _sceneManager->SetMessageLevel( level ); } //========================================================================= //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 // EOF