]> git.saurik.com Git - wxWidgets.git/blame - contrib/samples/gizmos/led/led.cpp
Cleaned up some comments, reorganized some code
[wxWidgets.git] / contrib / samples / gizmos / led / led.cpp
CommitLineData
2b5f62a0
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: led.cpp
3// Purpose: LED sample
4// Author: Julian Smart
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20// For compilers that support precompilation, includes "wx/wx.h".
21#include "wx/wxprec.h"
22
23#ifdef __BORLANDC__
24 #pragma hdrstop
25#endif
26
27// for all others, include the necessary headers (this file is usually all you
28// need because it includes almost all "standard" wxWindows headers)
29#ifndef WX_PRECOMP
30 #include "wx/wx.h"
31#endif
32
33#include "../../../include/wx/gizmos/ledctrl.h"
34#include "wx/sizer.h"
35#include "wx/panel.h"
36
37// ----------------------------------------------------------------------------
38// private classes
39// ----------------------------------------------------------------------------
40
41class MyPanel : public wxPanel
42{
43public:
44 MyPanel(wxFrame *frame);
45
46 void OnIncrement();
47 void OnDecrement();
48 void OnSetValue();
49 void OnAlignLeft();
50 void OnAlignCenter();
51 void OnAlignRight();
52 void OnDrawFaded();
53
54private:
55 wxLEDNumberCtrl *m_led;
56};
57
58// Define a new application type, each program should derive a class from wxApp
59class MyApp : public wxApp
60{
61public:
62 // override base class virtuals
63 // ----------------------------
64
65 // this one is called on application startup and is a good place for the app
66 // initialization (doing it here and not in the ctor allows to have an error
67 // return: if OnInit() returns false, the application terminates)
68 virtual bool OnInit();
69};
70
71// Define a new frame type: this is going to be our main frame
72class MyFrame : public wxFrame
73{
74public:
75 // ctor(s)
76 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
77 long style = wxDEFAULT_FRAME_STYLE);
78
79 // event handlers (these functions should _not_ be virtual)
80 void OnQuit(wxCommandEvent& event);
81 void OnIncrement(wxCommandEvent& event);
82 void OnDecrement(wxCommandEvent& event);
83 void OnSetValue(wxCommandEvent& event);
84 void OnAlignLeft(wxCommandEvent& event);
85 void OnAlignCenter(wxCommandEvent& event);
86 void OnAlignRight(wxCommandEvent& event);
87 void OnDrawFaded(wxCommandEvent& event);
88 void OnAbout(wxCommandEvent& event);
89
90private:
91 MyPanel *m_panel;
92
93 // any class wishing to process wxWindows events must use this macro
94 DECLARE_EVENT_TABLE()
95};
96
97// ----------------------------------------------------------------------------
98// constants
99// ----------------------------------------------------------------------------
100
101// IDs for the controls and the menu commands
102enum
103{
104 // menu items
105 LED_Quit = 1,
106
107 LED_Edit_Increment,
108 LED_Edit_Decrement,
109 LED_Edit_SetValue,
110 LED_Edit_AlignLeft,
111 LED_Edit_AlignCenter,
112 LED_Edit_AlignRight,
113 LED_Edit_DrawFaded,
114
115 // it is important for the id corresponding to the "About" command to have
116 // this standard value as otherwise it won't be handled properly under Mac
117 // (where it is special and put into the "Apple" menu)
118 LED_About = wxID_ABOUT,
119
120 MY_PANEL,
121 MY_LED
122};
123
124// ----------------------------------------------------------------------------
125// event tables and other macros for wxWindows
126// ----------------------------------------------------------------------------
127
128// the event tables connect the wxWindows events with the functions (event
129// handlers) which process them. It can be also done at run-time, but for the
130// simple menu events like this the static method is much simpler.
131BEGIN_EVENT_TABLE(MyFrame, wxFrame)
132 EVT_MENU(LED_Quit, MyFrame::OnQuit)
133 EVT_MENU(LED_Edit_Increment, MyFrame::OnIncrement)
134 EVT_MENU(LED_Edit_Decrement, MyFrame::OnDecrement)
135 EVT_MENU(LED_Edit_SetValue, MyFrame::OnSetValue)
136 EVT_MENU(LED_Edit_AlignLeft, MyFrame::OnAlignLeft)
137 EVT_MENU(LED_Edit_AlignCenter, MyFrame::OnAlignCenter)
138 EVT_MENU(LED_Edit_AlignRight, MyFrame::OnAlignRight)
139 EVT_MENU(LED_Edit_DrawFaded, MyFrame::OnDrawFaded)
140 EVT_MENU(LED_About, MyFrame::OnAbout)
141END_EVENT_TABLE()
142
143// Create a new application object: this macro will allow wxWindows to create
144// the application object during program execution (it's better than using a
145// static object for many reasons) and also declares the accessor function
146// wxGetApp() which will return the reference of the right type (i.e. MyApp and
147// not wxApp)
148IMPLEMENT_APP(MyApp)
149
150// ============================================================================
151// implementation
152// ============================================================================
153
154// ----------------------------------------------------------------------------
155// the application class
156// ----------------------------------------------------------------------------
157
158// 'Main program' equivalent: the program execution "starts" here
159bool MyApp::OnInit()
160{
161 // create the main application window
162 MyFrame *frame = new MyFrame(_T("LED App"),
163 wxPoint(50, 50), wxSize(450, 340));
164
165 // and show it (the frames, unlike simple controls, are not shown when
166 // created initially)
167 frame->Show(TRUE);
168
169 // success: wxApp::OnRun() will be called which will enter the main message
170 // loop and the application will run. If we returned FALSE here, the
171 // application would exit immediately.
172 return TRUE;
173}
174
175// ----------------------------------------------------------------------------
176// main frame
177// ----------------------------------------------------------------------------
178
179// frame constructor
180MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, long style)
181 : wxFrame(NULL, -1, title, pos, size, style)
182{
183#if wxUSE_MENUS
184 // create a menu bar
185 wxMenu *menuFile = new wxMenu;
186
187 // the "About" item should be in the help menu
188 wxMenu *helpMenu = new wxMenu;
189 helpMenu->Append(LED_About, _T("&About...\tF1"), _T("Show about dialog"));
190
191 menuFile->Append(LED_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
192
193 wxMenu *editMenu = new wxMenu;
194 editMenu->Append(LED_Edit_Increment, _T("&Increment LED\tCtrl-I"));
195 editMenu->Append(LED_Edit_Decrement, _T("&Decrement LED\tCtrl-D"));
196 editMenu->Append(LED_Edit_SetValue, _T("&Set LED Value...\tCtrl-S"));
197 editMenu->AppendSeparator();
198 editMenu->AppendRadioItem(LED_Edit_AlignLeft, _T("Align &Left"));
199 editMenu->AppendRadioItem(LED_Edit_AlignCenter, _T("Align &Center"));
200 editMenu->AppendRadioItem(LED_Edit_AlignRight, _T("Align &Right"));
201 editMenu->AppendSeparator();
202 editMenu->AppendCheckItem(LED_Edit_DrawFaded, _T("Draw &Faded\tCtrl-F"));
203
204 editMenu->Check(LED_Edit_DrawFaded, TRUE);
205
206 // now append the freshly created menu to the menu bar...
207 wxMenuBar *menuBar = new wxMenuBar();
208 menuBar->Append(menuFile, _T("&File"));
209 menuBar->Append(editMenu, _T("&Edit"));
210 menuBar->Append(helpMenu, _T("&Help"));
211
212 // ... and attach this menu bar to the frame
213 SetMenuBar(menuBar);
214#endif // wxUSE_MENUS
215
216 m_panel = new MyPanel(this);
217}
218
219
220// event handlers
221
222void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
223{
224 // TRUE is to force the frame to close
225 Close(TRUE);
226}
227
228void MyFrame::OnIncrement(wxCommandEvent& event)
229{
230 m_panel->OnIncrement();
231}
232
233void MyFrame::OnDecrement(wxCommandEvent& event)
234{
235 m_panel->OnDecrement();
236}
237
238void MyFrame::OnSetValue(wxCommandEvent& event)
239{
240 m_panel->OnSetValue();
241}
242
243void MyFrame::OnAlignLeft(wxCommandEvent& event)
244{
245 m_panel->OnAlignLeft();
246}
247
248void MyFrame::OnAlignCenter(wxCommandEvent& event)
249{
250 m_panel->OnAlignCenter();
251}
252
253void MyFrame::OnAlignRight(wxCommandEvent& event)
254{
255 m_panel->OnAlignRight();
256}
257
258void MyFrame::OnDrawFaded(wxCommandEvent& event)
259{
260 m_panel->OnDrawFaded();
261}
262
263void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
264{
265 wxString msg;
266 msg.Printf( _T("This is the About dialog of the LED sample.\n")
267 _T("Welcome to %s"), wxVERSION_STRING);
268
269 wxMessageBox(msg, _T("About LED"), wxOK | wxICON_INFORMATION, this);
270}
271
272// --------------------------------------------------------------------------
273// MyPanel
274// --------------------------------------------------------------------------
275
276MyPanel::MyPanel(wxFrame *frame)
277 : wxPanel(frame, MY_PANEL)
278{
279 m_led = new wxLEDNumberCtrl(this, MY_LED,
280 wxPoint(20, 20), wxSize(300, 200),
281 wxLED_ALIGN_LEFT | wxLED_DRAW_FADED);
282
283 m_led->SetValue(_T("50"));
284}
285
286void MyPanel::OnIncrement()
287{
288 wxString strValue = m_led->GetValue();
289 if ( strValue == _T("99") )
290 return;
291
292 long lValue;
293 strValue.ToLong(&lValue);
294 ++lValue;
295 m_led->SetValue(wxString::Format(_T("%ld"), lValue));
296}
297
298void MyPanel::OnDecrement()
299{
300 wxString strValue = m_led->GetValue();
301
302 long lValue;
303 strValue.ToLong(&lValue);
304 if (lValue == 0)
305 return;
306
307 --lValue;
308 m_led->SetValue(wxString::Format(_T("%ld"), lValue));
309}
310
311void MyPanel::OnSetValue()
312{
313 wxString strValue = m_led->GetValue();
314
315 long lValue;
316 strValue.ToLong(&lValue);
317 lValue = ::wxGetNumberFromUser(_T("Please enter a number between 0 and 99"), _T(""), _T("Please enter a number"), lValue, 0, 99, this);
318
319 if (lValue != -1)
320 m_led->SetValue(wxString::Format(_T("%ld"), lValue));
321}
322
323void MyPanel::OnAlignLeft()
324{
325 m_led->SetAlignment(wxLED_ALIGN_LEFT);
326}
327
328void MyPanel::OnAlignCenter()
329{
330 m_led->SetAlignment(wxLED_ALIGN_CENTER);
331}
332
333void MyPanel::OnAlignRight()
334{
335 m_led->SetAlignment(wxLED_ALIGN_RIGHT);
336}
337
338void MyPanel::OnDrawFaded()
339{
340 m_led->SetDrawFaded(!(m_led->GetDrawFaded()));
341}