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
void WxTextCtrlGettingKeyEvents::OnKeyUp(wxKeyEvent& event)
{
+ mWxEditor->OnKeyUp(event);
event.Skip();
}
void WxTextCtrlGettingKeyEvents::OnKeyDown(wxKeyEvent& event)
{
- mWxEditor->OnKeyPress(event);
+ mWxEditor->OnKeyDown(event);
event.Skip();
}
//================================================================
// 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,
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,
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);
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;
//================================================================
- void WxEditor::OnButtonOpen(wxCommandEvent& event) { Open(); }
+ void WxEditor::OnButtonOpen(wxCommandEvent& event)
+ {
+ Open();
+ mwxInputText->SetFocus();
+ }
void WxEditor::Open()
{
std::cout << "-------------- OPEN ---------------"<<std::endl;
{
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;
//================================================================
//================================================================
- void WxEditor::OnButtonQuit(wxCommandEvent& event) { Quit(); }
+ void WxEditor::OnButtonQuit(wxCommandEvent& event)
+ {
+ Quit();
+ mwxInputText->SetFocus();
+ }
void WxEditor::Quit()
{
std::cout << "-------------- QUIT ---------------"<<std::endl;
//================================================================
- 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);
//================================================================
//================================================================
- 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() )
{
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);