X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxConsole.cxx;h=b425facebed4882d0859c7842b63e8b3b01ba706;hb=372f03317f05d4a436b0f9c39b98558ec4810b78;hp=a218586269b5ac855af6bd207b1f613982312dca;hpb=b253812964e57b9592fe64bb3bc97f2aac72d3a7;p=bbtk.git diff --git a/kernel/src/bbtkWxConsole.cxx b/kernel/src/bbtkWxConsole.cxx index a218586..b425fac 100644 --- a/kernel/src/bbtkWxConsole.cxx +++ b/kernel/src/bbtkWxConsole.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkWxConsole.cxx,v $ Language: C++ - Date: $Date: 2008/03/14 14:58:53 $ - Version: $Revision: 1.13 $ + Date: $Date: 2008/03/18 12:51:26 $ + Version: $Revision: 1.16 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -36,128 +36,19 @@ #include "bbtkWxConsole.h" #include "bbtkWxBlackBox.h" #include "bbtkConfigurationFile.h" +#include "bbtkWxStreamRedirector.h" namespace bbtk { -// On Windows when compiling a dll, wx prevents the compilation -// of the class wxStreamToTextRedirector (why ? it is a nightmare...) -// The blocking symbol is wxHAS_TEXT_WINDOW_STREAM. -// Note also that wxStreamToTextRedirector use the fact that wx is -// compiled with the option WX_USE_STD_STREAMS in which case -// wxTextCtrl inherits from std::streambuf and the redirection -// can be done simply by setting the std::cout buffer to the -// one of the wxTextCtrl. -// So on windows, we have to redirect manually std::cout to mwxTextHistory. -// Finally, on all systems we made our redirection class to redirect both to -// the WxConsole and to printf in order to get a console trace when -// the appli crashes (we could also imagine to log in a file...) -// This is why we finally wrote our own redirection which is crossplatform -// (drawback : not optimal on Unix platform; we could think of -// a particular implementation...). - //================================================================ - /// Redirects std::cout to a wxTextCtrl and optionally to printf also - class WxTextCtrlStreamRedirector : public std::streambuf - { - - public: - - - WxTextCtrlStreamRedirector(std::ostream& redirect, - wxTextCtrl *text, - const wxColour& colour = *wxBLACK, - bool doprintf=true, - int bufferSize=1000) - : mText(text), - mPrintf(doprintf), - m_ostr(redirect), - mColour(colour) - { - if (bufferSize) - { - char *ptr = new char[bufferSize]; - setp(ptr, ptr + bufferSize); - } - else - setp(0, 0); - - m_sbufOld = m_ostr.rdbuf(); - m_ostr.rdbuf(this); - } - - ~WxTextCtrlStreamRedirector() - { - sync(); - delete[] pbase(); - m_ostr.rdbuf(m_sbufOld); - } - - virtual void writeString(const std::string &str) - { - const wxTextAttr& style = mText->GetDefaultStyle(); - mText->SetDefaultStyle(mColour); - mText->AppendText(std2wx(str)); - mText->SetDefaultStyle(style); - - if (mPrintf) - { - printf("%s",str.c_str()); - } - } - - - private: - wxTextCtrl* mText; - // - bool mPrintf; - // the stream we're redirecting - std::ostream& m_ostr; - // the old streambuf (before we changed it) - std::streambuf *m_sbufOld; - // - wxColour mColour; - - private: - int overflow(int c) - { - sync(); - - if (c != EOF) - { - if (pbase() == epptr()) - { - std::string temp; - temp += char(c); - writeString(temp); - } - else - sputc(c); - } - - return 0; - } - - int sync() - { - if (pbase() != pptr()) - { - int len = int(pptr() - pbase()); - std::string temp(pbase(), len); - writeString(temp); - setp(pbase(), epptr()); - } - return 0; - } - }; - //================================================================ - - //================================================================ WxConsole::WxConsole( wxWindow *parent, wxString title, wxSize size) : wxFrame((wxFrame *)parent, -1, title, wxDefaultPosition, size) { +// m_mgr = new wxAuiManager(this); + m_mgr.SetManagedWindow(this); mInterpreter = new bbtk::Interpreter(); mInterpreter->SetWxConsole(this); @@ -173,9 +64,11 @@ namespace bbtk menuAbout->Append( ID_Menu_About, _T("&About...") ); wxMenu *menuTools = new wxMenu; - menuTools->Append( ID_Menu_CreatePackage, _T("&Create package") ); - menuTools->Append( ID_Menu_CreateBlackBox, _T("&Create blackbox") ); + menuTools->Append( ID_Menu_EditConfig, _T("&Edit bbtk config") ); + menuTools->Append( ID_Menu_CreatePackage, _T("Create &package") ); + menuTools->Append( ID_Menu_CreateBlackBox, _T("Create &blackbox") ); menuTools->Append( ID_Menu_ShowImageGraph, _T("&Show last image graph") ); + menuTools->Append( ID_Menu_CreateIndex, _T("&Generate index") ); wxMenuBar *menuBar = new wxMenuBar; @@ -201,18 +94,9 @@ namespace bbtk wxSize(500,500), wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER); - mwxPageCommand = new wxPanel(mwxNotebook,-1); - mwxNotebook->AddPage( mwxPageCommand, _T("Command")); - + mwxPageCommand = new wxPanel(mwxNotebook,-1); mwxPageHelp = new wxPanel(mwxNotebook,-1); - mwxNotebook->AddPage( mwxPageHelp, _T("Help")); - - -//EED sizer->Add ( mwxNotebook, 1, wxEXPAND /*| wxALIGN_BOTTOM*/ ); - wxAuiManager *m_mgr = new wxAuiManager(this); - m_mgr->AddPane(mwxNotebook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); - m_mgr->Update(); wxBoxSizer *cmdsizer = new wxBoxSizer(wxVERTICAL); @@ -273,10 +157,11 @@ namespace bbtk mwxTextCommand = new wxComboBox(mwxPageCommand, ID_Text_Command, - _T("") -// wxDefaultPosition, -// wxDefaultSize, -// wxTE_PROCESS_ENTER + _T(""), + wxDefaultPosition, + wxDefaultSize, + 0, NULL, + wxTE_PROCESS_ENTER // | wxTE_PROCESS_TAB // | wxWANTS_CHARS // //| wxTAB_TRAVERSAL @@ -310,10 +195,10 @@ namespace bbtk // Events connection // COMMAND // ENTER - /* Connect( mwxTextCommand->GetId(), wxEVT_COMMAND_TEXT_ENTER, (wxObjectEventFunction)& WxConsole::OnCommandEnter ); + /* Connect( mwxTextCommand->GetId(), wxEVT_CHAR, //wxEVT_COMMAND_TEXT_UPDATED, @@ -324,9 +209,9 @@ namespace bbtk // Redirection of std::cout to mwxTextHistory and printf mRedirect_cout = - new WxTextCtrlStreamRedirector(std::cout,mwxTextHistory,*wxBLACK,true); + new WxStreamRedirector(std::cout,mwxTextHistory,*wxBLACK,true); mRedirect_cerr = - new WxTextCtrlStreamRedirector(std::cerr,mwxTextHistory,*wxGREEN,true); + new WxStreamRedirector(std::cerr,mwxTextHistory,*wxGREEN,true); // Creates and sets the parent window of all bbtk windows wxWindow* top = new wxPanel(this,-1);//,_T("top")); @@ -343,15 +228,24 @@ namespace bbtk // Layout //EED SetSizer(sizer); - SetAutoLayout(true); + + mwxNotebook->AddPage( mwxPageCommand, _T("Command")); + mwxNotebook->AddPage( mwxPageHelp, _T("Help")); + m_mgr.AddPane(mwxNotebook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); + m_mgr.Update(); + + + SetAutoLayout(true); Layout(); - Refresh(); +// Refresh(); +// m_mgr.Update(); } //================================================================ //================================================================ WxConsole::~WxConsole() { + m_mgr.UnInit(); delete mRedirect_cout; delete mRedirect_cerr; } @@ -398,9 +292,7 @@ namespace bbtk { bool insideComment = false; -printf("WxConsole::CommandString 04 \n"); mInterpreter->InterpretLine( wx2std(line), insideComment ); -printf("WxConsole::CommandString 05 \n"); } catch (bbtk::QuitException) { @@ -435,21 +327,40 @@ printf("WxConsole::CommandString 05 \n"); //================================================================ void WxConsole::OnMenuAbout(wxCommandEvent& WXUNUSED(event)) { - - wxMessageBox(_T(" bbi\nThe Black Box Toolkit interpreter\n(c) CREATIS-LRMN 2007"), + m_mgr.Update(); + Refresh(); + wxMessageBox(_T(" bbi\nThe Black Box Toolkit interpreter\n(c) CREATIS-LRMN 2008"), _T("About ..."), wxOK | wxICON_INFORMATION, this); } //================================================================ - + + //================================================================ + void WxConsole::OnMenuEditConfig(wxCommandEvent& WXUNUSED(event)) + { + std::string commandStr; + std::string configFile = ConfigurationFile::GetInstance().Get_config_xml_full_path(); +#ifdef WIN32 + commandStr = "notepad.exe "; +#else + commandStr = "gedit "; +#endif + commandStr = commandStr + configFile; + std::cout << "system: " << commandStr << std::endl; + system ( commandStr.c_str() ); + } + //================================================================ + + //================================================================ void WxConsole::OnMenuCreatePackage(wxCommandEvent& WXUNUSED(event)) { - - wxMessageBox(_T(" Creating Package"), - _T("Creating Package ..."), wxOK | wxICON_INFORMATION, - this); + std::string command("toolsbbtk/appli/CreatePackage"); + bbtkMessage("Debug",1,"Executing : '"<InterpretFile(command); + delete I; } //================================================================ @@ -457,29 +368,56 @@ printf("WxConsole::CommandString 05 \n"); //================================================================ void WxConsole::OnMenuCreateBlackBox(wxCommandEvent& WXUNUSED(event)) { - - wxMessageBox(_T(" Creating blackbox"), - _T("Creating blackbox ..."), wxOK | wxICON_INFORMATION, - this); + std::string command("toolsbbtk/appli/CreateBlackBox"); + bbtkMessage("Debug",1,"Executing : '"<InterpretFile(command); + delete I; } //================================================================ //================================================================ void WxConsole::OnMenuShowImageGraph(wxCommandEvent& WXUNUSED(event)) { - std::string default_doc_dir = ConfigurationFile::GetInstance().Get_default_temp_dir(); + std::string default_temp_dir = ConfigurationFile::GetInstance().Get_default_temp_dir(); #if defined(WIN32) std::string strappli="start "; #else std::string strappli="gnome-open "; #endif - std::string strcommand = strappli +default_doc_dir+"/temp_dir/workspace_workspacePrototype.png"; + std::string strcommand = strappli +default_temp_dir+"/temp_dir/workspace_workspacePrototype.png"; + std::cout << "system: " << strcommand << std::endl; system ( strcommand.c_str() ); + } //================================================================ - + + //================================================================ + void WxConsole::OnMenuCreateIndex(wxCommandEvent& WXUNUSED(event)) + { + std::string doc_path = ConfigurationFile::GetInstance().Get_doc_path(); + std::string filepath = doc_path+"/bbdoc/make-index.bbs"; + Interpreter* I = new Interpreter; + +//EED std::cout << "bbi: include "<InterpretFile( filepath ); + + bool insideComment = false; // for multiline comment + I->InterpretLine( "exec freeze" ,insideComment ); + I->InterpretLine( "include *" ,insideComment ); + I->InterpretLine( "index "+doc_path+"/bbdoc/index-alpha.html Initials" ,insideComment ); + I->InterpretLine( "index "+doc_path+"/bbdoc/index-package.html Packages" ,insideComment ); + I->InterpretLine( "index "+doc_path+"/bbdoc/index-category.html Categories" ,insideComment ); + I->InterpretLine( "index "+doc_path+"/bbdoc/index-adaptors.html Adaptors",insideComment ); + + delete I; + } + //================================================================ + + + //================================================================ void WxConsole::OnCommandChar(wxCommandEvent& event) @@ -544,10 +482,18 @@ printf("WxConsole::CommandString 05 \n"); wxButton *btnInclude = new wxButton( btnsCtrlPanel,-1,_T("Include") ); wxButton *btnReset = new wxButton( btnsCtrlPanel,-1,_T("Reset") ); wxButton *btnConfig = new wxButton( btnsCtrlPanel,-1,_T("Config") ); - wxButton *btnGraphS = new wxButton( btnsCtrlPanel,-1,_T("Graph S.") ); - wxButton *btnGraphD = new wxButton( btnsCtrlPanel,-1,_T("Graph D.") ); + wxButton *btnGraphS = new wxButton( btnsCtrlPanel,-1,_T("Graph simple") ); + wxButton *btnGraphD = new wxButton( btnsCtrlPanel,-1,_T("Graph detailed") ); wxButton *btnHelp = new wxButton( btnsCtrlPanel,-1,_T("Help") ); + btnsSizer->Add( btnInclude ); + btnsSizer->Add( btnReset ); + btnsSizer->Add( btnConfig ); + btnsSizer->Add( btnGraphS ); + btnsSizer->Add( btnGraphD ); + btnsSizer->Add( btnHelp ); + btnsCtrlPanel->SetSizer(btnsSizer); + Connect(btnInclude->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnInclude ); Connect(btnReset->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnReset ); Connect(btnConfig->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxConsole::OnBtnConfig ); @@ -584,9 +530,7 @@ printf("WxConsole::CommandString 05 \n"); //================================================================ void WxConsole::OnBtnReset(wxCommandEvent& event) { -printf("WxConsole::OnBtnReset 01 \n"); CommandString(_T("reset")); -printf("WxConsole::OnBtnReset 02 \n"); } //================================================================ @@ -626,11 +570,13 @@ printf("WxConsole::OnBtnReset 02 \n"); BEGIN_EVENT_TABLE(WxConsole, wxFrame) EVT_MENU(WxConsole::ID_Menu_Quit, WxConsole::OnMenuQuit) EVT_MENU(WxConsole::ID_Menu_About, WxConsole::OnMenuAbout) + EVT_MENU(WxConsole::ID_Menu_EditConfig, WxConsole::OnMenuEditConfig) EVT_MENU(WxConsole::ID_Menu_CreatePackage, WxConsole::OnMenuCreatePackage) EVT_MENU(WxConsole::ID_Menu_CreateBlackBox, WxConsole::OnMenuCreateBlackBox) EVT_MENU(WxConsole::ID_Menu_ShowImageGraph, WxConsole::OnMenuShowImageGraph) + EVT_MENU(WxConsole::ID_Menu_CreateIndex, WxConsole::OnMenuCreateIndex) EVT_TEXT_ENTER(WxConsole::ID_Text_Command, WxConsole::OnCommandEnter) - // EVT_CHAR(WxConsole::ID_Text_Command, WxConsole::OnCommandChar) +// EVT_CHAR(WxConsole::ID_Text_Command, WxConsole::OnCommandChar) END_EVENT_TABLE() //================================================================