]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkWxEditor.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkWxEditor.cxx
index ea1660a13b5e118ed40449249faeb308405197a6..f178a89c4167023d460453ee9feb601eda0a5333 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkWxEditor.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/03/18 12:51:26 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2008/03/19 14:58:13 $
+  Version:   $Revision: 1.5 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -90,12 +90,13 @@ namespace bbtk
   
   void WxTextCtrlGettingKeyEvents::OnKeyUp(wxKeyEvent& event)
   {
+    mWxEditor->OnKeyUp(event);
     event.Skip();
   }
   
   void WxTextCtrlGettingKeyEvents::OnKeyDown(wxKeyEvent& event)
   {
-    mWxEditor->OnKeyPress(event);
+    mWxEditor->OnKeyDown(event);
     event.Skip();
   }
   //================================================================
@@ -143,9 +144,15 @@ namespace bbtk
 
     //    wxFlexGridSizer *sizer= new wxFlexGridSizer(2);
     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
-
+    mwxSplit = new wxSplitterWindow(this,
+                                                  -1,
+                                                  wxDefaultPosition,
+                                                  wxDefaultSize,
+                                                  //wxSize(400,200),
+                                                  wxSP_3D |
+                                                  wxSP_LIVE_UPDATE );
     mwxInputText = 
-      new WxTextCtrlGettingKeyEvents(this,
+      new WxTextCtrlGettingKeyEvents(mwxSplit,
                      ID_InputText,
                      _T(""),
                     wxDefaultPosition,
@@ -168,12 +175,10 @@ namespace bbtk
    mwxInputTextAttr->SetFont(*FixedFont);
 
    //   sizer->AddGrowableCol(0);
-   sizer->Add(mwxInputText,1,wxGROW);
-
-   mwxInputText->SetFocus();
+   //   sizer->Add(mwxInputText,1,wxGROW);
 
    mwxOutputText = 
-      new WxTextCtrlGettingKeyEvents(this,
+      new WxTextCtrlGettingKeyEvents(mwxSplit,
                      ID_OutputText,
                      _T(""),wxDefaultPosition,
                      wxDefaultSize, //HistorySize,
@@ -184,9 +189,12 @@ namespace bbtk
 
    mwxOutputTextAttr = new wxTextAttr;
    mwxOutputTextAttr->SetFont(*FixedFont);
+   mwxOutputText->Hide();
+
+   //   sizer->Add(mwxOutputText,1,wxGROW);
+  sizer->Add(mwxSplit,1,wxGROW);
+  mwxSplit->Initialize(mwxInputText);
 
-   sizer->Add(mwxOutputText,1,wxGROW);
-     
    // BUTTONS
    wxPanel *btnsCtrlPanel = new wxPanel(this,-1);
    wxBoxSizer *btnsSizer  = new wxBoxSizer(wxHORIZONTAL);
@@ -207,59 +215,31 @@ namespace bbtk
    mwxButtonQuit = new wxBitmapButton( btnsCtrlPanel,ID_ButtonQuit,bmp_quit);//_T("Quit")  );
    btnsSizer->Add( mwxButtonQuit );
    
-   /*
- toolBarBitmaps[Tool_##bmp] = wxBitmap(bmp##_xpm)
-#else // !USE_XPM_BITMAPS
-    #define INIT_TOOL_BMP(bmp) \
-        toolBarBitmaps[Tool_##bmp] = wxBITMAP(bmp)
-#endif // USE_XPM_BITMAPS/!USE_XPM_BITMAPS
-
-    INIT_TOOL_BMP(new);
-    INIT_TOOL_BMP(open);
-    INIT_TOOL_BMP(save);
-    INIT_TOOL_BMP(copy);
-    INIT_TOOL_BMP(cut);
-    INIT_TOOL_BMP(paste);
-    INIT_TOOL_BMP(print);
-    INIT_TOOL_BMP(help);
-
-    int w = toolBarBitmaps[Tool_new].GetWidth(),
-        h = toolBarBitmaps[Tool_new].GetHeight();
-
-    if ( !m_smallToolbar )
-    {
-        w *= 2;
-        h *= 2;
-
-        for ( size_t n = Tool_new; n < WXSIZEOF(toolBarBitmaps); n++ )
-        {
-            toolBarBitmaps[n] =
-                wxBitmap(toolBarBitmaps[n].ConvertToImage().Scale(w, h));
-
-
-
-   */
-
+   mwxPosition = new wxStaticText ( btnsCtrlPanel, -1, _T(""));
+   btnsSizer->Add( mwxPosition );
+  
 
    btnsCtrlPanel->SetSizer(btnsSizer);
    sizer->Add ( btnsCtrlPanel, 0, wxLEFT | wxRIGHT | wxBOTTOM  //| wxGROW
                , 10 );
-
+   
    // Redirection of std::cout and std::cerr to mwxOutputText and printf
-    mRedirect_cout = 
-      new WxStreamRedirector(std::cout,mwxOutputText,*wxBLACK,true);
-    mRedirect_cerr = 
-      new WxStreamRedirector(std::cerr,mwxOutputText,*wxGREEN,true); 
-
-   SetSizer(sizer);
+   mRedirect_cout = 
+     new WxStreamRedirector(std::cout,mwxOutputText,*wxBLACK,true);
+   mRedirect_cerr = 
+     new WxStreamRedirector(std::cerr,mwxOutputText,*wxGREEN,true); 
+   
+   UpdatePosition();
+   mwxInputText->SetFocus();
    
+   SetSizer(sizer);
    SetAutoLayout(true);
    Layout();
   }
   //================================================================
-
- //================================================================
+  
 //================================================================
   WxEditor::~WxEditor()
   {
     delete mInterpreter;
@@ -270,7 +250,11 @@ namespace bbtk
 
 
   //================================================================  
-  void WxEditor::OnButtonOpen(wxCommandEvent& event) { Open(); } 
+  void WxEditor::OnButtonOpen(wxCommandEvent& event) 
+  { 
+    Open(); 
+    mwxInputText->SetFocus();
+  } 
   void WxEditor::Open()
   {
     std::cout << "-------------- OPEN ---------------"<<std::endl;
@@ -301,11 +285,16 @@ namespace bbtk
   {
     mwxInputText->LoadFile(std2wx(filename));
     mwxInputText->SetModified(false);
+    UpdatePosition();
   }
   //================================================================  
 
   //================================================================  
-  void WxEditor::OnButtonSave(wxCommandEvent& event) { Save(); } 
+  void WxEditor::OnButtonSave(wxCommandEvent& event) 
+  { 
+    Save(); 
+    mwxInputText->SetFocus();
+  } 
   void WxEditor::Save()
   {
     std::cout << "-------------- SAVE ---------------"<<std::endl;
@@ -328,7 +317,11 @@ namespace bbtk
   //================================================================  
 
   //================================================================  
-  void WxEditor::OnButtonQuit(wxCommandEvent& event) { Quit(); } 
+  void WxEditor::OnButtonQuit(wxCommandEvent& event) 
+  { 
+    Quit(); 
+    mwxInputText->SetFocus();
+  } 
   void WxEditor::Quit()
   {
     std::cout << "-------------- QUIT ---------------"<<std::endl;
@@ -338,13 +331,25 @@ namespace bbtk
 
 
   //================================================================  
-  void WxEditor::OnButtonRun(wxCommandEvent& event) { Run(); }
+  void WxEditor::OnButtonRun(wxCommandEvent& event) 
+  { 
+    Run(); 
+    mwxInputText->SetFocus();
+  }
   void WxEditor::Run()
   {
     std::cout << "-------------- RUN ---------------"<<std::endl;
+
+    if (!mwxSplit->IsSplit()) 
+      {
+       int size = -100;
+       int minsize = - (int)(mwxInputText->GetSize().GetHeight() / 2.);
+       if (size<minsize) size = minsize;
+       mwxSplit->SplitHorizontally( mwxInputText, mwxOutputText, size);
+      }
+
     std::stringstream* buffer = new std::stringstream(bbtk::wx2std(mwxInputText->GetValue()));
-    bool com;
-    mInterpreter->InterpretLine("reset",com);
+    mInterpreter->InterpretLine("reset");
     try 
       {
        mInterpreter->InterpretBuffer(buffer);
@@ -375,18 +380,57 @@ namespace bbtk
   //================================================================
 
   //================================================================  
-  void WxEditor::OnButtonNew(wxCommandEvent& event) { New(); }
+  void WxEditor::OnButtonNew(wxCommandEvent& event) 
+  { 
+    New(); 
+    mwxInputText->SetFocus();
+  }
   void WxEditor::New()
   {
     std::cout << "-------------- NEW ---------------" << std::endl;
     AskSave();
     mwxInputText->Clear();
+    UpdatePosition();
+  }
+  //================================================================
+
+  //================================================================
+  void WxEditor::UpdatePosition()
+  {
+
+    long line, column, pos;
+    pos = mwxInputText->GetInsertionPoint();
+    mwxInputText->PositionToXY(pos, &column, &line);
+    
+    
+     //                wxLogMessage(_T("Current position: %ld\nCurrent line, column: (%ld, %ld)\nNumber of lines: %ld\nCurrent line length: %ld\nTotal text length: %u (%ld)"),
+
+  
+     char mess[200];
+     sprintf(mess,"%ld:%ld/%ld:%ld",
+            line+1,column+1,
+            (long)mwxInputText->GetNumberOfLines(),
+            (long)mwxInputText->GetLineLength(line)+1);
+     //             pos+1,
+     //             (long)mwxInputText->GetValue().length())+1;
+
+     mwxPosition->SetLabel(wxString(mess));
+     mwxPosition->Show();
+    
+  }
+  //================================================================
+  //================================================================
+  void WxEditor::OnKeyUp(wxKeyEvent& event)
+  {
+    //  std::cout << "U" << std::endl;
+    UpdatePosition();
   }
   //================================================================
 
   //================================================================
-  void WxEditor::OnKeyPress(wxKeyEvent& event)
+  void WxEditor::OnKeyDown(wxKeyEvent& event)
   {
+    //    std::cout << "D" << std::endl;
     // std::cout << "Key="<<event.GetKeyCode()<<std::endl;
     if ( event.ControlDown() )
       {
@@ -449,7 +493,7 @@ namespace bbtk
   WxEditorWindow::WxEditorWindow( wxWindow *parent, wxString title, wxSize size)
     : wxFrame((wxFrame *)parent, -1, title, wxDefaultPosition, size)
   {    
-    WxEditor* mEditor = new WxEditor(this);
+    mEditor = new WxEditor(this);
  
     //wxFlexGridSizer *sizer= new wxFlexGridSizer(2);
     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);