-/*=========================================================================
+/*
+# ---------------------------------------------------------------------
+#
+# 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++
* 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
+* 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.
+* 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 .
+* \file
+* \brief Class bbtk::wxGEditorTabPanel .
*/
//=========================================================================
wxGEditorTabPanel::wxGEditorTabPanel()
{
+ printf ("EED %p wxGEditorTabPanel 1 ()\n" , this );
}
//=========================================================================
- wxGEditorTabPanel::wxGEditorTabPanel(wxWindow *parent,int id):wxPanel(parent),wxTextDropTarget()
+ wxGEditorTabPanel::wxGEditorTabPanel(wxWindow *parent,int id, Factory::Pointer bbtkfactory)
+ : wxPanel(parent),wxTextDropTarget()
{
_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()
{
- _sceneManager->disconnectDrop();
+//ED02JUIN2010 _sceneManager->disconnectDrop();
+
+ _panelsManager->VerifyLastTabPanel();
+ //FCY memory leaks
+ delete _panelAUIMgr;
+ delete _sceneManager;
}
-
+
//=========================================================================
void wxGEditorTabPanel::initWxVtkCanvas()
{
wxVtk3DBaseView *baseview = new wxVtk3DBaseView(this);
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);
- _sceneManager=new wxVtkSceneManager(this,baseview,_id);
+//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)
{
- std::string packageName="";
- std::string boxName="";
- 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 );
- boxName += result;
-
- _sceneManager->createGBlackBox(x,y,packageName, boxName);
+ /*
+ * 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 << "'" <<std::endl;
+ /*
+ 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;
+ */
+ if ( _panelsManager->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)
//=========================================================================
- std::string wxGEditorTabPanel::getDiagramScript()
+ std::string wxGEditorTabPanel::getDiagramBBS(bool wln)
{
- return _sceneManager->getDiagramScript();
+ return _sceneManager->getDiagramBBS(wln);
}
//=========================================================================
- void wxGEditorTabPanel::editBlackBox(GBlackBoxModel *bbmodel)
+ std::string wxGEditorTabPanel::saveComplexBoxBBS()
{
- _panelsManager->editBlackBox(bbmodel);
+ return _sceneManager->saveComplexBoxBBS();
}
//=========================================================================
-
- void wxGEditorTabPanel::editDiagramParameters(wxVtkSceneManager* scene)
+
+ void wxGEditorTabPanel::editBlackBox(GBlackBoxModel *bbmodel)
{
- _panelsManager->editDiagramParameters(scene);
+ _panelsManager->editBlackBox(bbmodel);
}
//=========================================================================
void wxGEditorTabPanel::centerView()
{
- _sceneManager->centerView();
+ if(_sceneManager)
+ {
+ _sceneManager->centerView();
+ }
}
//=========================================================================
-
- void wxGEditorTabPanel::saveDiagram(std::string &content)
+
+ void wxGEditorTabPanel::saveDiagram(std::string &content, const std::string &path) //DFCH
{
+ this->SetFullPath(path);
_sceneManager->saveDiagram(content);
}
//=========================================================================
- void wxGEditorTabPanel::loadDiagram(ifstream &inputStream)
+ 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::saveStringAction(const std::string &action)
{
- _sceneManager->loadDiagram(inputStream);
+ char temp[50];
+ sprintf(temp,".%d", sstates.size());
+ sstates.push_back(action + temp);
}
//=========================================================================
{
return _id;
}
+
+
//=========================================================================
//=========================================================================
+ std::map<int,GObjectController*> wxGEditorTabPanel::getSelectedObjects()
+ {
+ return _sceneManager->getSelectedObjects();
+ }
+
+ //=========================================================================
+
+ void wxGEditorTabPanel::addObjects(std::map<int,GObjectController*> 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();
+ }
+
+ //=========================================================================
+ 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
// EOF