1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        fl_sample2.cpp
3 // Purpose:     Contrib. demo
4 // Author:      Aleksandras Gluchovas
5 // Modified by: Sebastian Haase (June 21, 2001)
6 // Created:     24/11/98
7 // RCS-ID:      $Id: fl_sample2.cpp 38477 2006-03-31 18:07:22Z ABX $
8 // Copyright:   (c) Aleksandras Gluchovas
9 // Licence:     wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11 
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
14 
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18 
19 #ifndef WX_PRECOMP
20 #include "wx/wx.h"
21 #endif
22 
23 #include "wx/textctrl.h"
24 
25 // fl headers
26 #include "wx/fl/controlbar.h"
27 
28 // plugins used
29 #include "wx/fl/barhintspl.h"
30 #include "wx/fl/hintanimpl.h"
31 
32 #define ID_LOAD  102
33 #define ID_STORE 103
34 #define ID_QUIT  104
35 
36 
37 class MyApp: public wxApp
38 {
39 public:
40     bool OnInit(void);
41 };
42 
43 class MyFrame: public wxFrame
44 {
45 protected:
46     wxFrameLayout* mpLayout;
47     wxWindow*      mpClientWnd;
48 
49     wxTextCtrl* CreateTextCtrl( const wxString& value );
50 
51 public:
52     MyFrame( wxWindow* parent, const wxChar *title );
53     ~MyFrame();
54 
55     void populateMyFrame();
56     void OnLoad( wxCommandEvent& event );
57     void OnStore( wxCommandEvent& event );
58     void OnQuit( wxCommandEvent& event );
59 
OnClose(void)60     bool OnClose(void) { return true; }
61 
62     DECLARE_EVENT_TABLE()
63 };
64 
65 /***** Implementation for class MyApp *****/
66 
IMPLEMENT_APP(MyApp)67 IMPLEMENT_APP    (MyApp)
68 
69 bool MyApp::OnInit(void)
70 {
71     // wxWidgets boiler-plate:
72 
73     MyFrame *frame = new MyFrame(NULL, _("wxFrameLayout sample"));
74 
75     wxMenu *file_menu = new wxMenu;
76 
77     file_menu->Append( ID_LOAD,  _("&Load layout")  );
78     file_menu->Append( ID_STORE, _("&Store layout")  );
79     file_menu->AppendSeparator();
80 
81     file_menu->Append( ID_QUIT, _("E&xit") );
82 
83     wxMenuBar *menu_bar = new wxMenuBar;
84 
85     menu_bar->Append(file_menu, _("&File"));
86 
87 #if wxUSE_STATUSBAR
88     frame->CreateStatusBar(3);
89 #endif // wxUSE_STATUSBAR
90     frame->SetMenuBar(menu_bar);
91 
92     frame->Show(true);
93     SetTopWindow(frame);
94     frame->populateMyFrame();
95 
96     return true;
97 }
98 
99 /***** Immlementation for class MyFrame *****/
100 
BEGIN_EVENT_TABLE(MyFrame,wxFrame)101 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
102     EVT_MENU( ID_LOAD,  MyFrame::OnLoad  )
103     EVT_MENU( ID_STORE, MyFrame::OnStore )
104     EVT_MENU( ID_QUIT,  MyFrame::OnQuit  )
105 END_EVENT_TABLE()
106 
107 MyFrame::MyFrame( wxWindow* parent, const wxChar *title )
108     : wxFrame( parent, wxID_ANY, title, wxDefaultPosition,
109           wxSize( 700, 500 ),
110           wxCLIP_CHILDREN | wxMINIMIZE_BOX | wxMAXIMIZE_BOX |
111           wxRESIZE_BORDER   | wxSYSTEM_MENU  | wxCAPTION | wxCLOSE_BOX,
112           wxT("freimas") )
113 {
114 }
115 
populateMyFrame()116 void MyFrame::populateMyFrame()
117 {
118     mpClientWnd = CreateTextCtrl( _("Client window") );
119 
120     mpLayout = new wxFrameLayout( this, mpClientWnd );
121 
122     ///  mpLayout->PushDefaultPlugins();
123     ///  mpLayout->AddPlugin( CLASSINFO( cbBarHintsPlugin ) ); // facny "X"es and beveal for barso
124     ///  //mpLayout->AddPlugin( CLASSINFO( cbHintAnimationPlugin ) );
125 
126     cbDimInfo sizes( 80,65,     // when docked horizontally
127                      80,165,    // when docked vertically
128                      180,30,    // when floated
129                      true,      // the bar is fixed-size
130                      5,         // vertical gap (bar border)
131                      5          // horizontal gap (bar border)
132                    );
133 
134     // drop-in 20 bars
135     for( int i = 1; i <= 10; ++i )
136     {
137         wxSleep(1);
138         wxYield(); // CHECK!
139 
140         wxChar buf[4];
141         wxSprintf( buf, wxT("%d"), i );
142         wxString name = wxString(wxT("Bar-"));
143         name += buf;
144 
145         //sizes.mIsFixed = i % 2 > 0; // every fifth bar is not fixed-size
146 
147         if ( !sizes.mIsFixed ) name += wxT(" (flexible)");
148         //      mpLayout->AddBar( CreateTextCtrl(name), // bar window
149         mpLayout->AddBar( new wxTextCtrl(this, wxID_ANY, name), // bar window
150                           sizes, i % MAX_PANES, // alignment ( 0-top,1-bottom, etc)
151                           0,                    // insert into 0th row (vert. position)
152                           0,                    // offset from the start of row (in pixels)
153                           name                  // name to refere in customization pop-ups
154                         );
155 
156         mpLayout->RecalcLayout(true);
157 
158         // Layout();
159         // Refresh();
160     }
161 }
162 
~MyFrame()163 MyFrame::~MyFrame()
164 {
165     // layout is not a window, should be released manually
166     if ( mpLayout )
167         delete mpLayout;
168 }
169 
CreateTextCtrl(const wxString & value)170 wxTextCtrl* MyFrame::CreateTextCtrl( const wxString& value )
171 {
172     wxTextCtrl* pCtrl = new wxTextCtrl( this, wxID_ANY, value,
173                                 wxPoint(0,0), wxSize(1,1), wxTE_MULTILINE );
174 
175     pCtrl->SetBackgroundColour( wxColour( 255,255,255 ) );
176 
177     return pCtrl;
178 }
179 
OnLoad(wxCommandEvent & WXUNUSED (event))180 void MyFrame::OnLoad( wxCommandEvent& WXUNUSED(event) )
181 {
182     wxMessageBox(wxT("Hey - you found a BIG question-mark !!"));
183 }
184 
OnStore(wxCommandEvent & WXUNUSED (event))185 void MyFrame::OnStore( wxCommandEvent& WXUNUSED(event) )
186 {
187     wxMessageBox(wxT("Hey - you found another BIG question-mark !!"));
188 }
189 
OnQuit(wxCommandEvent & WXUNUSED (event))190 void MyFrame::OnQuit( wxCommandEvent& WXUNUSED(event) )
191 {
192     Show( false ); // TRICK:: hide it, to avoid flickered destruction
193 
194     Close(true);
195 }
196