]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkWxGUIConsole.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkWxGUIConsole.cxx
diff --git a/kernel/src/bbtkWxGUIConsole.cxx b/kernel/src/bbtkWxGUIConsole.cxx
new file mode 100644 (file)
index 0000000..e60afd3
--- /dev/null
@@ -0,0 +1,376 @@
+/*=========================================================================
+                                                                                
+  Program:   bbtk
+  Module:    $RCSfile: bbtkWxGUIConsole.cxx,v $
+  Language:  C++
+  Date:      $Date: 2008/03/20 09:51:29 $
+  Version:   $Revision: 1.1 $
+                                                                                
+  Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
+  l'Image). All rights reserved. See Doc/License.txt or
+  http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
+                                                                                
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notices for more information.
+                                                                                
+=========================================================================*//**
+ * \brief Short description in one line
+ * 
+ * Long description which 
+ * can span multiple lines
+ */
+/**
+ * \file 
+ * \brief 
+ */
+/**
+ * \class bbtk::
+ * \brief 
+ */
+
+
+#ifdef _USE_WXWIDGETS_
+
+#include <iostream>    
+#include "bbtkWxGUIConsole.h"
+#include "bbtkWxBlackBox.h"
+#include "bbtkConfigurationFile.h"
+#include "bbtkWxStreamRedirector.h"
+
+#include "icons/cc_run.xpm"
+
+namespace bbtk
+{
+
+    enum
+    {
+      ID_Menu_Quit = 1,
+      ID_Menu_About,
+      ID_Menu_EditConfig,
+      ID_Menu_CreatePackage,
+      ID_Menu_CreateBlackBox,
+      ID_Menu_ShowImageGraph,
+      ID_Menu_CreateIndex,
+      ID_Button_Run
+    };
+    
+  
+  //================================================================
+  WxGUIConsole::WxGUIConsole( 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->SetUser(this);
+    mInterpreter->SetCommandLine(true);
+    //==============
+    // Menu
+    wxInitAllImageHandlers();
+    
+    wxMenu *menuFile = new wxMenu;
+    menuFile->Append( ID_Menu_Quit, _T("&Quit") );
+    
+    wxMenu *menuAbout = new wxMenu;
+    menuAbout->Append( ID_Menu_About, _T("&About...") );
+
+    wxMenu *menuTools = new wxMenu;
+    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;
+    menuBar->Append( menuFile, _T("&File") );
+    menuBar->Append( menuTools, _T("&Tools") );
+    menuBar->Append( menuAbout, _T("About") );
+    
+    SetMenuBar( menuBar );
+    
+    CreateStatusBar();
+    SetStatusText( _T("Welcome to bbi !") );
+    
+    //==============
+    // Notebook
+    
+    //    wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
+    
+//EED    wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
+//    mwxNotebook = new wxNotebook(this,-1,wxDefaultPosition, wxDefaultSize, 0);
+    mwxNotebook = new wxAuiNotebook(this,  
+                                    -1,
+                                    wxPoint(0, 0),
+                                    wxSize(500,500),
+                                    wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER);
+    
+    mwxPageCommand = new wxPanel(mwxNotebook,-1);        
+    mwxPageHelp = new wxPanel(mwxNotebook,-1);    
+    
+    
+    wxBoxSizer *cmdsizer = new wxBoxSizer(wxVERTICAL);
+    
+    mwxPageCommand->SetAutoLayout(true);    
+    mwxPageCommand->SetSizer(cmdsizer);
+    cmdsizer->Fit(mwxPageCommand);
+    cmdsizer->SetSizeHints(mwxPageCommand);
+
+    wxBoxSizer *helpsizer = new wxBoxSizer(wxVERTICAL);
+    
+    mwxPageHelp->SetAutoLayout(true);    
+    mwxPageHelp->SetSizer(helpsizer);
+    helpsizer->Fit(mwxPageHelp);
+    helpsizer->SetSizeHints(mwxPageHelp);
+   
+    mWxGUIHtmlBrowser = new WxGUIHtmlBrowser(mwxPageHelp,
+                                            //EED                                wxSize(1200,0));
+                                            wxSize(200,0));
+
+    //    mWxGUIHtmlBrowser->SetSize(wxSize(800,1000));
+    helpsizer->Add (mWxGUIHtmlBrowser,1, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM  );
+//    helpsizer->Add ( new wxButton(mwxPageHelp,-1,"perro"), 0,  wxEXPAND  );
+    wxBitmap bmp_run(cc_run_xpm);
+    mwxButtonRun = new wxBitmapButton( mwxPageHelp,ID_Button_Run,bmp_run);//_T("Run")  );
+    helpsizer->Add( mwxButtonRun );
+
+  
+    //==============
+    // Command page 
+    mWxGUIOutputMessages = new WxGUIOutputMessages(mwxPageCommand);
+
+    mWxGUICommand = new WxGUICommand(mwxPageCommand,this);
+   
+    mWxGUICommand->SetFocus();
+
+    cmdsizer->Add (mWxGUIOutputMessages, 1, wxALL | wxGROW, 10);
+    cmdsizer->Add (mWxGUICommand, 1, wxALL | wxGROW, 10);
+
+        
+    // Creates and sets the parent window of all bbtk windows
+    wxWindow* top = new wxPanel(this,-1);//,_T("top"));
+    top->Hide();
+    Wx::SetTopWindow(top);
+    
+
+    // Layout
+//EED    SetSizer(sizer);
+
+    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();
+//    m_mgr.Update();
+  }
+  //================================================================
+
+ //================================================================
+  WxGUIConsole::~WxGUIConsole()
+  {
+    m_mgr.UnInit();
+  }
+  //================================================================
+
+
+  //================================================================
+  void WxGUIConsole::WxGUICommandEnter(const std::string& command)
+  {
+    std::string s("> ");
+    s += command + "\n";
+    mWxGUIOutputMessages->Print(s,wxRED);
+
+    if (  mInterpreter->InterpretLine( command ) == 
+         Interpreter::QUIT )
+      {
+       Close(true); 
+      }
+  }
+  //================================================================
+
+  //================================================================
+  /// Runs the interpretation of a file
+  bool WxGUIConsole::InterpretFile( const std::string& filename) 
+  { 
+    if ( mInterpreter->InterpretFile(filename) ==
+        Interpreter::ERROR ) 
+      {
+       return false;
+      }
+    return true;
+  }
+  //================================================================
+  //================================================================
+  void WxGUIConsole::OnButtonRun(wxCommandEvent& WXUNUSED(event))
+  {
+    std::string filename = wx2std(mWxGUIHtmlBrowser->GetCurrentPage());
+    size_t s = filename.length();
+
+    Interpreter* I = new Interpreter;
+    
+    if ((s>3) && (filename[s-1]=='s')
+       && (filename[s-2]=='b')
+       && (filename[s-3]=='b')
+       && (filename[s-4]=='.'))
+      {
+       SetStatusText(_T("Executing ")+filename);
+       I->InterpretFile(filename);
+      }
+    else
+      {
+       SetStatusText(_T("The current page is not a bbs file : cannot execute it"));
+      }
+    
+    delete I;
+  }
+  //================================================================  
+
+  //================================================================
+  void WxGUIConsole::OnMenuQuit(wxCommandEvent& WXUNUSED(event))
+  {
+    Close(true);
+  }
+  //================================================================
+
+
+  //================================================================
+  void WxGUIConsole::OnMenuAbout(wxCommandEvent& WXUNUSED(event))
+  {
+    m_mgr.Update();
+       Refresh();
+    wxMessageBox(_T("  bbi\nThe Black Box Toolkit interpreter\n(c) CREATIS-LRMN 2008"),
+                 _T("About ..."), wxOK | wxICON_INFORMATION,
+                 this);
+  }
+  //================================================================
+
+
+  //================================================================
+  void WxGUIConsole::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 WxGUIConsole::OnMenuCreatePackage(wxCommandEvent& WXUNUSED(event))
+  {
+printf("EED WxGUIConsole::OnMenuCreatePackage 01 \n");
+    std::string command("toolsbbtk/appli/CreatePackage");
+printf("EED WxGUIConsole::OnMenuCreatePackage 02 \n");
+
+    bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
+printf("EED WxGUIConsole::OnMenuCreatePackage 03 \n");
+    Interpreter* I = new Interpreter;    
+printf("EED WxGUIConsole::OnMenuCreatePackage 04 \n");
+    I->InterpretFile(command);
+printf("EED WxGUIConsole::OnMenuCreatePackage 05 \n");
+    delete I;
+printf("EED WxGUIConsole::OnMenuCreatePackage 06 \n");
+  }
+  //================================================================
+
+
+  //================================================================
+  void WxGUIConsole::OnMenuCreateBlackBox(wxCommandEvent& WXUNUSED(event))
+  {
+    std::string command("toolsbbtk/appli/CreateBlackBox");
+    bbtkMessage("Debug",1,"Executing : '"<<command<<"'"<<std::endl);
+    Interpreter* I = new Interpreter;    
+    I->InterpretFile(command);
+    delete I;
+  }
+  //================================================================
+  
+  //================================================================
+  void WxGUIConsole::OnMenuShowImageGraph(wxCommandEvent& WXUNUSED(event))
+  {
+    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_temp_dir+"/temp_dir/workspace_workspacePrototype.png";
+       std::cout << "system: " << strcommand << std::endl;
+    system ( strcommand.c_str() );
+
+  }
+  //================================================================
+
+
+  //================================================================
+  void WxGUIConsole::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 "<<filepath<<std::endl;
+//EED  I->InterpretFile( filepath );
+
+    I->InterpretLine( "exec freeze");
+    I->InterpretLine( "include *");
+    I->InterpretLine( "index "+doc_path+"/bbdoc/index-alpha.html Initials");
+    I->InterpretLine( "index "+doc_path+"/bbdoc/index-package.html Packages");
+    I->InterpretLine( "index "+doc_path+"/bbdoc/index-category.html Categories");
+    I->InterpretLine( "index "+doc_path+"/bbdoc/index-adaptors.html Adaptors");
+    
+    delete I;
+  }
+  //================================================================
+
+
+  //================================================================
+  void WxGUIConsole::InterpreterUserViewHtmlPage(const std::string& page)
+  {
+    std::string s(page);
+    //  std::cout << "WxGUIConsole::ShowHtmlPage('"<<page<<"')"<<std::endl;
+    if (mWxGUIHtmlBrowser->GoTo(s)) 
+      {
+//EED  mwxNotebook->ChangeSelection(1);
+       mwxNotebook->SetSelection(1);
+      }
+    else 
+      {
+         // std::cout << "ERROR html"<<std::endl;
+      }
+  } 
+  //================================================================  
+  
+    
+  //================================================================  
+  BEGIN_EVENT_TABLE(WxGUIConsole, wxFrame)
+    EVT_MENU(ID_Menu_Quit, WxGUIConsole::OnMenuQuit)
+    EVT_MENU(ID_Menu_About, WxGUIConsole::OnMenuAbout)
+    EVT_MENU(ID_Menu_EditConfig, WxGUIConsole::OnMenuEditConfig)
+    EVT_MENU(ID_Menu_CreatePackage, WxGUIConsole::OnMenuCreatePackage)
+    EVT_MENU(ID_Menu_CreateBlackBox, WxGUIConsole::OnMenuCreateBlackBox)
+    EVT_MENU(ID_Menu_ShowImageGraph, WxGUIConsole::OnMenuShowImageGraph)
+    EVT_MENU(ID_Menu_CreateIndex, WxGUIConsole::OnMenuCreateIndex)
+    EVT_BUTTON(ID_Button_Run, WxGUIConsole::OnButtonRun )
+    END_EVENT_TABLE()
+  //================================================================
+
+} // namespace bbtk
+
+
+#endif //_USE_WXWIDGETS_