]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxGUITextEditor.cxx
a61de17e9a919d1610bd391a42414687c87ca537
[bbtk.git] / kernel / src / bbtkWxGUITextEditor.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkWxGUITextEditor.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/04/24 12:56:40 $
7   Version:   $Revision: 1.11 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*//**
18  * \brief Short description in one line
19  * 
20  * Long description which 
21  * can span multiple lines
22  */
23 /**
24  * \file 
25  * \brief 
26  */
27 /**
28  * \class bbtk::
29  * \brief 
30  */
31
32
33 #ifdef _USE_WXWIDGETS_
34
35 #include <iostream>     
36 #include "bbtkWxGUITextEditor.h"
37 #include "bbtkWxBlackBox.h"
38 #include "bbtkConfigurationFile.h"
39 #include "bbtkUtilities.h"
40
41 #include "icons/cc_new.xpm"
42 #include "icons/cc_open.xpm"
43 #include "icons/cc_stop.xpm"
44 #include "icons/cc_save.xpm"
45 #include "icons/cc_save_as.xpm"
46 #include "icons/cc_run.xpm"
47 #include "icons/cc_exit.xpm"
48
49 #include "../data/icons/wxart_new.xpm"
50 #include "../data/icons/wxart_fileopen.xpm"
51 #include "../data/icons/wxart_filesave.xpm"
52 #include "../data/icons/wxart_filesaveas.xpm"
53 #include "../data/icons/wxart_exefile.xpm"
54 #include "../data/icons/wxart_delete.xpm"
55 #include "../data/icons/wxart_down.xpm"
56 #include "../data/icons/wxart_eldel.xpm"
57
58 namespace bbtk
59 {
60
61
62   //================================================================
63   class WxTextCtrlGettingKeyEvents : public wxTextCtrl
64   {
65   public:
66     WxTextCtrlGettingKeyEvents(wxWindow *parent, wxWindowID id, const wxString &value,
67                                const wxPoint &pos, const wxSize &size, int style = 0)
68       : wxTextCtrl(parent, id, value, pos, size, style)
69     {
70     }
71     
72     void SetWxGUITextEditor(WxGUITextEditor* e) 
73     { mWxGUITextEditor = e; }
74     
75     void OnKeyDown(wxKeyEvent& event);
76     void OnKeyUp(wxKeyEvent& event);
77     void OnChar(wxKeyEvent& event);
78   private :
79     WxGUITextEditor* mWxGUITextEditor;
80     
81     DECLARE_EVENT_TABLE()
82       };
83   
84   BEGIN_EVENT_TABLE(WxTextCtrlGettingKeyEvents, wxTextCtrl)
85     EVT_KEY_DOWN(WxTextCtrlGettingKeyEvents::OnKeyDown)
86     EVT_KEY_UP(WxTextCtrlGettingKeyEvents::OnKeyUp)
87     EVT_CHAR(WxTextCtrlGettingKeyEvents::OnChar)
88     END_EVENT_TABLE()
89     
90     
91     void WxTextCtrlGettingKeyEvents::OnChar(wxKeyEvent& event)
92   {
93     event.Skip();
94   }
95   
96   void WxTextCtrlGettingKeyEvents::OnKeyUp(wxKeyEvent& event)
97   {
98     mWxGUITextEditor->OnKeyUp(event);
99     event.Skip();
100   }
101   
102   void WxTextCtrlGettingKeyEvents::OnKeyDown(wxKeyEvent& event)
103   {
104     mWxGUITextEditor->OnKeyDown(event);
105     event.Skip();
106   }
107   //================================================================
108   
109   
110
111   //================================================================  
112   /*  BEGIN_EVENT_TABLE(WxGUITextEditorPage, wxPanel)
113     EVT_CLOSE(WxGUITextEditorPage::OnClose)
114     END_EVENT_TABLE()
115   */
116  
117   //================================================================
118   WxGUITextEditorPage::WxGUITextEditorPage(wxWindow* parent,
119                                                WxGUITextEditor* editor)
120     : wxPanel(parent,-1),
121       mEditor(editor),
122       mName(""),
123       mAskFilename(true)
124   {  
125     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
126  
127     mwxInputText = 
128       new WxTextCtrlGettingKeyEvents(this,
129                                      -1, //ID_InputText,
130                                      _T(""),
131                                      wxDefaultPosition,
132                                      wxDefaultSize,
133                                      wxTE_MULTILINE 
134                                      //    |wxTE_PROCESS_ENTER
135                                      | wxTE_PROCESS_TAB 
136                                      //             | wxWANTS_CHARS 
137                                      |  wxTAB_TRAVERSAL
138                                      );
139     mwxInputText->SetWxGUITextEditor(mEditor);
140     
141     wxFont* FixedFont = new wxFont(10,
142                                    wxFONTFAMILY_MODERN,
143                                    wxFONTSTYLE_NORMAL,
144                                    wxFONTWEIGHT_NORMAL,
145                                    false);
146     
147     mwxInputTextAttr = new wxTextAttr;
148     mwxInputTextAttr->SetFont(*FixedFont);
149    
150     sizer->Add(mwxInputText,1,wxGROW);
151     SetSizer(sizer);
152     SetAutoLayout(true);
153     Layout();
154   }
155   //================================================================
156
157   //================================================================
158   WxGUITextEditorPage::~WxGUITextEditorPage()
159   {
160   }
161   //================================================================
162
163   bool WxGUITextEditorPage::IsModified()
164    { return mwxInputText->IsModified(); }
165
166   std::string WxGUITextEditorPage::GetText()
167   {
168     return wx2std(GetTextCtrl()->GetValue());
169   }
170
171   //================================================================
172   void WxGUITextEditorPage::Load(const std::string& filename)
173   {
174     //    std::cout << "-------------- LOAD ---------------"<<std::endl;
175     //    std::cout << "'" << filename << "'"<<std::endl;
176     //std::string oldFilename = mFilename;
177     mName = filename;
178     mAskFilename = false;
179     mwxInputText->LoadFile(std2wx(mName));
180   }
181   //================================================================
182
183   //================================================================
184   void WxGUITextEditorPage::Save(const std::string& filter)
185   {
186     //    std::cout << "-------------- SAVE ---------------"<<std::endl;
187     if (mAskFilename)
188       {
189         wxFileDialog* fd = new wxFileDialog(this,_T("Save file"),_T(""),
190                                             _T(""),std2wx(filter),
191                                             wxSAVE | wxOVERWRITE_PROMPT );
192         fd->ShowModal();
193     
194         if (fd->GetReturnCode()==wxID_OK)
195           {
196             mName = wx2std(fd->GetPath());
197             mAskFilename = false;
198           }
199         else 
200           {
201             //      std::cout << "-------------- CANCELLED ---------------"
202             //                <<std::endl;
203             return;
204           } 
205       }
206     //    std::cout << "file [" << mName << "]" <<std::endl;
207     mwxInputText->SaveFile(std2wx(mName));
208     mwxInputText->SetModified(false);
209   }
210   //================================================================
211   
212   //================================================================
213   WxGUITextEditor::WxGUITextEditor( wxWindow *parent,
214                                     WxGUITextEditorUser* user )
215     : wxPanel(parent, -1),
216       mUser(user),
217       mFileNameFilter("*.*")
218   {
219     //    std::cout << "WxGUITextEditor::WxGUITextEditor"<<std::endl;
220     //    mInterpreter = new bbtk::Interpreter();
221     //mInterpreter->SetWxGUITextEditor(this);
222     //  mInterpreter->SetCommandLine(true);
223     m_mgr.SetManagedWindow(this);
224     
225     //==============
226     // Menu
227     wxInitAllImageHandlers();
228     
229     
230     //    wxFlexGridSizer *sizer= new wxFlexGridSizer(2);
231     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
232     
233     mwxNotebook = new wxAuiNotebook(this,  
234                                     -1,
235                                     wxPoint(0, 0),
236                                     wxSize(500,500),
237                                     wxAUI_NB_TAB_SPLIT 
238                                     | wxAUI_NB_TAB_MOVE
239                                     | wxAUI_NB_TAB_EXTERNAL_MOVE
240                                     | wxAUI_NB_WINDOWLIST_BUTTON
241                                     |wxAUI_NB_SCROLL_BUTTONS
242                                     // | wxAUI_NB_CLOSE_BUTTON 
243                                     | wxAUI_NB_CLOSE_ON_ACTIVE_TAB
244                                     //| wxAUI_NB_CLOSE_ON_ALL_TABS
245                                     | wxNO_BORDER);
246     
247     sizer->Add(mwxNotebook,1,wxGROW);
248
249
250     // BUTTONS
251     wxPanel *btnsCtrlPanel = new wxPanel(this,-1);
252     wxBoxSizer *btnsSizer  = new wxBoxSizer(wxHORIZONTAL);
253  
254     /*   
255     wxBitmap bmp_new(cc_new_xpm);
256     wxBitmap bmp_open(cc_open_xpm);
257     wxBitmap bmp_close(cc_stop_xpm);
258     wxBitmap bmp_save(cc_save_xpm);
259     wxBitmap bmp_saveas(cc_save_as_xpm);
260     wxBitmap bmp_run(cc_run_xpm);
261     */
262     wxBitmap bmp_new(new_xpm);
263     wxBitmap bmp_open(fileopen_xpm);
264     wxBitmap bmp_close(eldel_xpm);
265     wxBitmap bmp_save(filesave_xpm);
266     wxBitmap bmp_saveas(filesaveas_xpm);
267     wxBitmap bmp_run(down_xpm);
268
269
270     wxSize btn_size(32,32);
271     mwxButtonNew = new wxBitmapButton( btnsCtrlPanel,ID_ButtonNew,bmp_new
272                                        ,wxDefaultPosition, btn_size);
273     btnsSizer->Add( mwxButtonNew );
274
275     mwxButtonOpen = new wxBitmapButton( btnsCtrlPanel,ID_ButtonOpen,bmp_open ,wxDefaultPosition, btn_size);//,_T("Open")  );
276     btnsSizer->Add( mwxButtonOpen );
277
278     mwxButtonClose = new wxBitmapButton( btnsCtrlPanel,ID_ButtonClose,bmp_close ,wxDefaultPosition, btn_size);//,_T("Open")  );
279     btnsSizer->Add( mwxButtonClose );
280
281     mwxButtonSave = new wxBitmapButton( btnsCtrlPanel,ID_ButtonSave,bmp_save ,wxDefaultPosition, btn_size);//_T("Save")  );
282     btnsSizer->Add( mwxButtonSave );
283
284     mwxButtonSaveAs = new wxBitmapButton( btnsCtrlPanel,ID_ButtonSaveAs,bmp_saveas ,wxDefaultPosition, btn_size);//_T("Save")  );
285     btnsSizer->Add( mwxButtonSaveAs );
286
287
288     mwxButtonRun = new wxBitmapButton( btnsCtrlPanel,ID_ButtonRun,bmp_run ,wxDefaultPosition, btn_size);//_T("Run")  );
289     btnsSizer->Add( mwxButtonRun );
290     /*
291     wxBitmap bmp_quit(cc_exit_xpm);
292     mwxButtonQuit = new wxBitmapButton( btnsCtrlPanel,ID_ButtonQuit,bmp_quit);//_T("Quit")  );
293     btnsSizer->Add( mwxButtonQuit );
294     */    
295     
296     mwxPosition = new wxStaticText ( btnsCtrlPanel, -1, _T(""));
297     btnsSizer->Add( mwxPosition );
298     
299     btnsCtrlPanel->SetSizer(btnsSizer);
300     btnsCtrlPanel->SetAutoLayout(true);
301     btnsCtrlPanel->Layout();
302
303     sizer->Add ( btnsCtrlPanel, 0, wxLEFT | wxRIGHT | wxBOTTOM  //| wxGROW
304                  , 10 );
305        
306
307     NewPage("");
308     UpdateInfo();
309     
310     SetSizer(sizer);
311     SetAutoLayout(true);
312     Layout();
313   }
314   //================================================================
315   
316   //================================================================
317   WxGUITextEditor::~WxGUITextEditor()
318   {
319     m_mgr.UnInit();
320
321     //    delete mInterpreter;
322   }
323   //================================================================
324
325   //================================================================
326   void WxGUITextEditor::NewPage(const std::string& filename)
327   {
328    WxGUITextEditorPage* page = 
329       new WxGUITextEditorPage(mwxNotebook,this);
330     std::string name("untitled");
331     if (filename.size()!=0) 
332       {
333         name = filename;
334         page->Load(name);
335       }
336     page->SetPageName(name);
337     std::string fname = Utilities::get_file_name(name);
338     mwxNotebook->AddPage(page,std2wx(fname),true);
339     FocusOnCurrentPage();
340   }
341   //================================================================
342
343   //================================================================
344   WxGUITextEditorPage* WxGUITextEditor::GetCurrentPage()
345   {
346     return (WxGUITextEditorPage*)
347       mwxNotebook->GetPage(mwxNotebook->GetSelection());
348   }
349   //================================================================
350
351   //================================================================
352   void WxGUITextEditor::FocusOnCurrentPage()
353   {
354     if (mwxNotebook->GetPageCount()==0) return;
355     GetCurrentPage()->SetFocus();    
356   }
357   //================================================================
358
359   //================================================================  
360   void WxGUITextEditor::OnButtonOpen(wxCommandEvent& event) 
361   { 
362     Open(); 
363     FocusOnCurrentPage();
364   } 
365   void WxGUITextEditor::Open()
366   {
367     //    std::cout << "-------------- OPEN ---------------"<<std::endl;
368
369     wxFileDialog* fd = new wxFileDialog(this,_T("Open file"),_T(""),
370                                         _T(""),std2wx(mFileNameFilter),
371                                         wxOPEN | wxFILE_MUST_EXIST );
372     fd->ShowModal();
373     
374     if (fd->GetReturnCode()==wxID_OK)
375       {
376         std::string filename = wx2std(fd->GetPath());
377         std::cout << "file [" << filename << "]" <<std::endl;
378         Open(filename);
379       }
380     else 
381       {
382         //      std::cout << "-------------- CANCELLED ---------------"<<std::endl;
383       }
384   }
385   //================================================================  
386   
387   //================================================================  
388   void WxGUITextEditor::Open(const std::string& filename)
389   {
390     NewPage(filename);
391     UpdateInfo();
392   }
393   //================================================================  
394
395   //================================================================  
396   void WxGUITextEditor::OnButtonClose(wxCommandEvent& event) 
397   { 
398     CloseCurrentPage();
399   } 
400   //================================================================  
401
402   //================================================================  
403   bool WxGUITextEditor::CloseCurrentPage()
404   {
405     //    std::cout << "-------------- CLOSE ---------------"<<std::endl;
406     if (mwxNotebook->GetPageCount()==0) return true;
407     if (GetCurrentPage()->IsModified()) 
408       {
409         wxString mess = std2wx(GetCurrentPage()->GetPageName());
410         mess += _T(" modified. Save it ?");
411         wxMessageDialog* d = 
412           new wxMessageDialog(this,
413                               mess, 
414                               _T("Save buffer"), 
415                               wxYES_NO | wxCANCEL | wxICON_QUESTION);
416         switch (d->ShowModal())
417           {
418           case wxID_CANCEL : 
419             return false;
420             break;
421           case wxID_YES : 
422             GetCurrentPage()->Save(mFileNameFilter); 
423             break;
424           case wxID_NO : ;
425           }       
426       } 
427     mwxNotebook->DeletePage(mwxNotebook->GetSelection());
428     FocusOnCurrentPage();
429     return true;
430   }
431   //================================================================  
432
433   //================================================================  
434   bool WxGUITextEditor::CloseAllPages()
435   {
436     bool ok = true;
437     while (mwxNotebook->GetPageCount()!=0)
438       {
439         if (!CloseCurrentPage()) 
440           {
441             ok = false;
442             break;
443           }
444       }
445     return ok;
446   }
447   //================================================================  
448
449   //================================================================  
450   void WxGUITextEditor::OnButtonSave(wxCommandEvent& event) 
451   { 
452     SaveCurrentPage();
453   } 
454   void WxGUITextEditor::SaveCurrentPage()
455   {
456     if (mwxNotebook->GetPageCount()==0) return;  
457     GetCurrentPage()->Save(mFileNameFilter);
458     mwxNotebook->SetPageText(mwxNotebook->GetSelection(),
459                              std2wx(GetCurrentPage()->GetPageName()));
460   }
461   //================================================================  
462
463   //================================================================  
464   void WxGUITextEditor::OnButtonSaveAs(wxCommandEvent& event) 
465   { 
466     if (mwxNotebook->GetPageCount()==0) return;  
467     GetCurrentPage()->SetAskFilename(true);
468     SaveCurrentPage();
469   } 
470   //================================================================  
471
472   //================================================================  
473   void WxGUITextEditor::OnPageClose(wxAuiNotebookEvent& evt)
474   {
475     //    std::cout << "-------------- CLOSE ---------------"<<std::endl;
476     if (!CloseCurrentPage()) evt.Veto();
477
478     /*
479     if (mwxNotebook->GetPageCount()==0) return;
480     if (GetCurrentPage()->IsModified()) 
481       {
482         wxMessageDialog* d = 
483           new wxMessageDialog(this,
484                               _T("Buffer modified. Save it ?"), 
485                               _T("Save buffer"), 
486                               wxYES_NO | wxCANCEL | wxICON_QUESTION);
487         switch (d->ShowModal())
488           {
489           case wxID_CANCEL : 
490             evt.Veto(); 
491             break;
492           case wxID_YES : 
493             GetCurrentPage()->Save(mFileNameFilter); 
494             break;
495           case wxID_NO : ;
496           }       
497       }
498     */
499   }
500   //================================================================
501
502
503
504   /*
505   //================================================================  
506   void WxGUITextEditor::OnButtonQuit(wxCommandEvent& event) 
507   { 
508     Quit(); 
509     FocusOnCurrentPage();
510   }
511   void WxGUITextEditor::Quit()
512   {
513     std::cout << "-------------- QUIT ---------------"<<std::endl;
514     if (AskSave()) GetParent()->Close();
515   }
516   //================================================================  
517   */
518
519   //================================================================  
520   void WxGUITextEditor::OnButtonRun(wxCommandEvent& event) 
521   { 
522     if ((mUser!=0) && (mwxNotebook->GetPageCount()>0)) 
523       mUser->WxGUITextEditorRun();
524     FocusOnCurrentPage();
525   }
526
527   /*
528   void WxGUITextEditor::Run()
529   {
530     std::cout << "-------------- RUN ---------------"<<std::endl;
531
532     if (!mwxSplit->IsSplit()) 
533       {
534         int size = -100;
535         int minsize = - (int)(mwxInputText->GetSize().GetHeight() / 2.);
536         if (size<minsize) size = minsize;
537         mwxSplit->SplitHorizontally( mwxInputText, mwxOutputText, size);
538       }
539
540     std::stringstream* buffer = new std::stringstream(bbtk::wx2std(mwxInputText->GetValue()));
541     mInterpreter->InterpretLine("reset");
542     try 
543       {
544         mInterpreter->InterpretBuffer(buffer);
545       }
546     catch (...)
547       {
548       }
549   } 
550   //================================================================  
551 */
552   
553  
554   
555   //================================================================
556   
557   //================================================================  
558   void WxGUITextEditor::OnButtonNew(wxCommandEvent& event) 
559   { 
560     New(); 
561     FocusOnCurrentPage();
562   }
563   void WxGUITextEditor::New()
564   {
565     ///    std::cout << "-------------- NEW ---------------" << std::endl;
566     NewPage("");
567     UpdateInfo();
568   }
569   //================================================================
570
571   //================================================================
572   void WxGUITextEditor::UpdateInfo()
573   {
574     if (mwxNotebook->GetPageCount()==0) return;
575     WxTextCtrlGettingKeyEvents* text = GetCurrentPage()->GetTextCtrl();
576     
577     long line, column, pos;
578     pos = text->GetInsertionPoint();
579     text->PositionToXY(pos, &column, &line);
580     
581     
582     //                wxLogMessage(_T("Current position: %ld\nCurrent line, column: (%ld, %ld)\nNumber of lines: %ld\nCurrent line length: %ld\nTotal text length: %u (%ld)"),
583     
584     
585     char mess[200];
586     sprintf(mess,"%ld:%ld/%ld:%ld",
587             line+1,column+1,
588             (long)text->GetNumberOfLines(),
589             (long)text->GetLineLength(line)+1);
590     //       pos+1,
591     //       (long)mwxInputText->GetValue().length())+1;
592     
593    // mwxPosition->SetLabel(wxString(mess));
594     mwxPosition->SetLabel(std2wx(mess));    
595     mwxPosition->Show();
596     
597     if (text->IsModified()) 
598       {
599         std::string title("*");
600         title += GetCurrentPage()->GetPageName();
601         mwxNotebook->SetPageText(mwxNotebook->GetSelection(),std2wx(title));
602       }
603   }
604   //================================================================
605   //================================================================
606   void WxGUITextEditor::OnKeyUp(wxKeyEvent& event)
607   {
608     //  std::cout << "U" << std::endl;
609     UpdateInfo();
610   }
611   //================================================================
612
613   //================================================================
614   void WxGUITextEditor::OnKeyDown(wxKeyEvent& event)
615   {
616     //    std::cout << "D" << std::endl;
617     // std::cout << "Key="<<event.GetKeyCode()<<std::endl;
618     if ( event.ControlDown() )
619       {
620         switch (event.GetKeyCode())
621           {
622           case 'n': case 'N' : New(); break;
623           case 's': case 'S' : SaveCurrentPage(); break;
624           case 'o': case 'O' : Open(); break;
625             //    case 'r': case 'R' : Run(); break;
626             //    case 'q': case 'Q' : Quit(); break;
627           }
628       }
629   }
630   //================================================================
631   
632   //================================================================  
633   BEGIN_EVENT_TABLE(WxGUITextEditor, wxPanel)
634   //    EVT_CHAR(WxGUITextEditor::OnKeyPress)
635     EVT_BUTTON(WxGUITextEditor::ID_ButtonNew, WxGUITextEditor::OnButtonNew)
636     EVT_BUTTON(WxGUITextEditor::ID_ButtonOpen, WxGUITextEditor::OnButtonOpen)
637     EVT_BUTTON(WxGUITextEditor::ID_ButtonClose, WxGUITextEditor::OnButtonClose)
638     EVT_BUTTON(WxGUITextEditor::ID_ButtonSave, WxGUITextEditor::OnButtonSave)
639     EVT_BUTTON(WxGUITextEditor::ID_ButtonSaveAs, WxGUITextEditor::OnButtonSaveAs)
640     EVT_BUTTON(WxGUITextEditor::ID_ButtonRun, WxGUITextEditor::OnButtonRun)
641   //    EVT_BUTTON(WxGUITextEditor::ID_ButtonQuit, WxGUITextEditor::OnButtonQuit)
642     EVT_AUINOTEBOOK_PAGE_CLOSE(wxID_ANY, WxGUITextEditor::OnPageClose)
643     END_EVENT_TABLE()
644   //================================================================
645     
646
647
648
649   
650   //================================================================
651   WxGUITextEditorWindow::WxGUITextEditorWindow( wxWindow *parent, 
652                                                     wxString title, 
653                                                     wxSize size)
654     : wxFrame((wxFrame *)parent, -1, title, wxDefaultPosition, size)
655   {     
656     
657     
658     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
659
660     mEditor = new WxGUITextEditor(this);
661     sizer->Add(mEditor,1,wxGROW);
662     
663     //    WxGUICommand* com = new WxGUICommand(this,this);
664     //    sizer->Add(com);
665     
666     SetSizer(sizer);
667
668     // Creates the parent window of all bbtk windows as a child of this
669     Wx::CreateTopWindow(this);
670     // Add the method OnWxSignal as a Wx::Signal observer 
671     //bbtkAddWxSignalObserver(WxGUITextEditorWindow::OnWxSignal);
672     
673    
674     SetAutoLayout(true);
675     Layout();
676   }
677   //================================================================
678
679   //================================================================
680   WxGUITextEditorWindow::~WxGUITextEditorWindow()
681   {
682   }
683   //================================================================
684
685
686 } // namespace bbtk
687
688
689 #endif //_USE_WXWIDGETS_