]> git.saurik.com Git - wxWidgets.git/blame - utils/framelayout/samples/sample/fl_sample.cpp
fixed a canonical example of Stupid Bug(tm)
[wxWidgets.git] / utils / framelayout / samples / sample / fl_sample.cpp
CommitLineData
bd9396d5
HH
1/////////////////////////////////////////////////////////////////////////////
2// Name: main.cpp
3// Purpose: Contrib. demo
4// Author: Aleksandras Gluchovas
5// Modified by:
6// Created: 24/11/98
7// RCS-ID: $Id$
8// Copyright: (c) Aleksandras Gluchovas
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "fl_sample.cpp"
14#pragma interface "fl_sample.cpp"
15#endif
16
17// For compilers that support precompilation, includes "wx/wx.h".
18#include "wx/wxprec.h"
19
20#ifdef __BORLANDC__
21#pragma hdrstop
22#endif
23
24#ifndef WX_PRECOMP
25#include "wx/wx.h"
26#endif
27
28#include "controlbar.h"
bd9396d5
HH
29
30// plugins used
31#include "barhintspl.h"
32#include "hintanimpl.h"
33
34#include "wx/textctrl.h"
35
36// ADDED by alex (linker complaints...):
299d04bc 37#ifndef wxDUMMY_OBJ_INCLUDED
bd9396d5 38char wxDummyChar=0;
299d04bc 39#endif
bd9396d5
HH
40
41#define ID_LOAD 102
42#define ID_STORE 103
43#define ID_QUIT 104
44
45#define LAYOUT_FILE "layouts.dat"
46
47class MyApp: public wxApp
48{
49public:
50 bool OnInit(void);
51};
52
53class MyFrame: public wxFrame
54{
55protected:
56 wxFrameLayout* mpLayout;
57 wxWindow* mpClientWnd;
58 wxPanel* mpInternalFrm;
59
bd9396d5
HH
60
61 wxTextCtrl* CreateTextCtrl( const wxString& value );
62
63
64public:
65 MyFrame( wxWindow* parent, char *title );
66 ~MyFrame();
67
bd9396d5
HH
68 void OnQuit( wxCommandEvent& event );
69
70 bool OnClose(void) { return TRUE; }
71
72 DECLARE_EVENT_TABLE()
73};
74
75/***** Implementation for class MyApp *****/
76
77IMPLEMENT_APP (MyApp)
78
79bool MyApp::OnInit(void)
80{
81 // wxWindows boiler-plate:
82
83 MyFrame *frame = new MyFrame(NULL, "wxFrameLayout sample");
84
85 wxMenu *file_menu = new wxMenu;
86
87 file_menu->Append( ID_LOAD, "&Load layout" );
88 file_menu->Append( ID_STORE, "&Store layout" );
89 file_menu->AppendSeparator();
90
91 file_menu->Append( ID_QUIT, "E&xit" );
92
93 wxMenuBar *menu_bar = new wxMenuBar;
94
95 menu_bar->Append(file_menu, "&File");
96
97 frame->CreateStatusBar(3);
98 frame->SetMenuBar(menu_bar);
99
100 frame->Show(TRUE);
101
102 SetTopWindow(frame);
103
104 return TRUE;
105}
106
107/***** Immlementation for class MyFrame *****/
108
109BEGIN_EVENT_TABLE(MyFrame, wxFrame)
110
bd9396d5
HH
111 EVT_MENU( ID_QUIT, MyFrame::OnQuit )
112
113END_EVENT_TABLE()
114
115MyFrame::MyFrame( wxWindow* parent, char *title )
116
117 : wxFrame( parent, -1, "NewTest-II", wxDefaultPosition,
118 wxSize( 700, 500 ),
119 wxCLIP_CHILDREN | wxMINIMIZE_BOX | wxMAXIMIZE_BOX |
120 wxTHICK_FRAME | wxSYSTEM_MENU | wxCAPTION,
121 "freimas" )
122{
123#ifdef __WXMSW__
124 mpInternalFrm = (wxPanel*)this;
125#else
126 mpInternalFrm = new wxPanel( this, -1 );
127#endif
128
129 mpClientWnd = CreateTextCtrl( "Client window" );
130
131 // btw, creation of internal frame is needed for wxGtk version
132 // to act correctly (since menu-bar is a separate window there..)
133
134 mpLayout = new wxFrameLayout( mpInternalFrm, mpClientWnd );
135
136#ifdef __WXGTK__
137
138 // real-time dosn't work well under wxGtk yet
139 cbCommonPaneProperties props;
140 mpLayout->GetPaneProperties( props );
141
142 props.mRealTimeUpdatesOn = FALSE; // off
143
144 mpLayout->SetPaneProperties( props, wxALL_PANES );
145
146#endif
147
148 mpLayout->PushDefaultPlugins();
149 mpLayout->AddPlugin( CLASSINFO( cbBarHintsPlugin ) ); // facny "X"es and beveal for barso
150 //mpLayout->AddPlugin( CLASSINFO( cbHintAnimationPlugin ) );
151
152 cbDimInfo sizes( 80,65, // when docked horizontally
153 80,65, // when docked vertically
154 80,30, // when floated
155 TRUE, // the bar is fixed-size
156 5, // vertical gap (bar border)
157 5 // horizontal gap (bar border)
158 );
159
160 // drop-in 20 bars
161
162 for( int i = 1; i <= 10; ++i )
163 {
164 char buf[4];
165 sprintf( buf, "%d", i );
166 wxString name = wxString("Bar-");
167 name += buf;
168
169 sizes.mIsFixed = i % 5 > 0; // every fifth bar is not fixed-size
170
171 if ( !sizes.mIsFixed ) name += " (flexible)";
172
173 mpLayout->AddBar( CreateTextCtrl(name),// bar window
174 sizes, i % MAX_PANES,// alignment ( 0-top,1-bottom, etc)
175 0, // insert into 0th row (vert. position)
176 0, // offset from the start of row (in pixels)
177 name // name to refere in customization pop-ups
178 );
179 }
180}
181
182MyFrame::~MyFrame()
183{
184 // layout is not a window, should be released manually
185
186 if ( mpLayout ) delete mpLayout;
187}
188
189wxTextCtrl* MyFrame::CreateTextCtrl( const wxString& value )
190{
191 wxTextCtrl* pCtrl =
192
193 new wxTextCtrl( mpInternalFrm, -1, value,
194 wxPoint(0,0), wxSize(1,1), wxTE_MULTILINE );
195
196 pCtrl->SetBackgroundColour( wxColour( 255,255,255 ) );
197
198 return pCtrl;
199}
200
bd9396d5
HH
201void MyFrame::OnQuit( wxCommandEvent& event )
202{
203 Show( FALSE ); // TRICK:: hide it, to avoid flickered destruction
204
205 Close(TRUE);
206}
207
bd9396d5
HH
208#ifdef __HACK_MY_MSDEV40__
209
210////////////// new 2.0-magic (linker errors...) ////////////////
211
212wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
213{
214 wxCHECK_MSG( m_frameToolBar == NULL, FALSE,
215 "recreating toolbar in wxFrame" );
216
217 wxToolBar* toolBar = OnCreateToolBar(style, id, name);
218 if (toolBar)
219 {
220 SetToolBar(toolBar);
221 PositionToolBar();
222 return toolBar;
223 }
224 else
225 {
226 return NULL;
227 }
228}
229
230wxToolBar* wxFrame::OnCreateToolBar(long style, wxWindowID id, const wxString& name)
231{
232 return new wxToolBar(this, id, wxDefaultPosition, wxDefaultSize, style, name);
233}
234
235#endif