]> git.saurik.com Git - wxWidgets.git/blob - contrib/samples/animate/anitest.cpp
GTK+ headers aren't needed anymore
[wxWidgets.git] / contrib / samples / animate / anitest.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: anitest.cpp
3 // Purpose: Animation sample
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 02/07/2001
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 #ifndef WX_PRECOMP
28 #include "wx/wx.h"
29 #endif
30
31 #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
32 #include "mondrian.xpm"
33 #endif
34
35 #include "anitest.h"
36
37 IMPLEMENT_APP(MyApp)
38
39 // ---------------------------------------------------------------------------
40 // global variables
41 // ---------------------------------------------------------------------------
42
43 // ---------------------------------------------------------------------------
44 // event tables
45 // ---------------------------------------------------------------------------
46
47 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
48 EVT_MENU(ANITEST_ABOUT, MyFrame::OnAbout)
49 EVT_MENU(ANITEST_QUIT, MyFrame::OnQuit)
50 EVT_MENU(ANITEST_OPEN, MyFrame::OnOpen)
51
52 EVT_SIZE(MyFrame::OnSize)
53 END_EVENT_TABLE()
54
55 // ===========================================================================
56 // implementation
57 // ===========================================================================
58
59 // ---------------------------------------------------------------------------
60 // MyApp
61 // ---------------------------------------------------------------------------
62
63 // Initialise this in OnInit, not statically
64 bool MyApp::OnInit()
65 {
66 // Create the main frame window
67
68 MyFrame* frame = new MyFrame((wxFrame *)NULL, -1, _T("Animation Demo"),
69 wxPoint(-1, -1), wxSize(500, 400),
70 wxDEFAULT_FRAME_STYLE);
71
72 // Give it an icon
73 #ifdef __WXMSW__
74 frame->SetIcon(wxIcon(_T("mdi_icn")));
75 #else
76 frame->SetIcon(wxIcon( mondrian_xpm ));
77 #endif
78
79 // Make a menubar
80 wxMenu *file_menu = new wxMenu;
81
82 file_menu->Append(ANITEST_OPEN, _T("&Open Animation...\tCtrl+O"), _T("Open a GIF animation"));
83 file_menu->Append(ANITEST_QUIT, _T("&Exit\tAlt+X"), _T("Quit the program"));
84
85 wxMenu *help_menu = new wxMenu;
86 help_menu->Append(ANITEST_ABOUT, _T("&About\tF1"));
87
88 wxMenuBar *menu_bar = new wxMenuBar;
89
90 menu_bar->Append(file_menu, _T("&File"));
91 menu_bar->Append(help_menu, _T("&Help"));
92
93 // Associate the menu bar with the frame
94 frame->SetMenuBar(menu_bar);
95
96 #if wxUSE_STATUSBAR
97 frame->CreateStatusBar();
98 #endif // wxUSE_STATUSBAR
99
100 frame->Show(TRUE);
101
102 SetTopWindow(frame);
103
104 return TRUE;
105 }
106
107 // ---------------------------------------------------------------------------
108 // MyFrame
109 // ---------------------------------------------------------------------------
110
111 // Define my frame constructor
112 MyFrame::MyFrame(wxWindow *parent,
113 const wxWindowID id,
114 const wxString& title,
115 const wxPoint& pos,
116 const wxSize& size,
117 const long style)
118 : wxFrame(parent, id, title, pos, size,
119 style | wxNO_FULL_REPAINT_ON_RESIZE)
120 {
121 // m_animation = NULL;
122 m_canvas = new MyCanvas(this, wxPoint(0, 0), wxSize(-1, -1));
123 #if 0
124 m_player.SetDestroyAnimation(FALSE);
125 m_player.SetWindow(m_canvas);
126 m_player.SetPosition(wxPoint(0, 0));
127 #endif
128 m_animationCtrl = new wxGIFAnimationCtrl(m_canvas, -1, wxEmptyString,
129 wxPoint(0, 0), wxSize(200, 200));
130 }
131
132 MyFrame::~MyFrame()
133 {
134 // m_player.Stop();
135 }
136
137 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
138 {
139 Close();
140 }
141
142 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
143 {
144 (void)wxMessageBox(_T("wxWidgets 2 Animation Demo\n")
145 _T("Author: Julian Smart (c) 2001\n"),
146 _T("About Animation Demo"));
147 }
148
149 void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
150 {
151 wxFileDialog dialog(this, _T("Please choose an animated GIF"),
152 wxEmptyString, wxEmptyString, wxT("*.gif"), wxOPEN);
153 if (dialog.ShowModal() == wxID_OK)
154 {
155 wxString filename(dialog.GetPath());
156
157 m_animationCtrl->Stop();
158 if (m_animationCtrl->LoadFile(filename))
159 {
160 m_animationCtrl->Play();
161 }
162 else
163 {
164 wxMessageBox(_T("Sorry, this animation was not a valid animated GIF."));
165 }
166 }
167 }
168
169
170 // ---------------------------------------------------------------------------
171 // MyCanvas
172 // ---------------------------------------------------------------------------
173
174 BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
175 EVT_PAINT(MyCanvas::OnPaint)
176 END_EVENT_TABLE()
177
178 // Define a constructor for my canvas
179 MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size)
180 : wxScrolledWindow(parent, -1, pos, size,
181 wxSUNKEN_BORDER |
182 wxNO_FULL_REPAINT_ON_RESIZE |
183 wxVSCROLL | wxHSCROLL)
184 {
185 SetBackgroundColour(wxColour(_T("YELLOW")));
186 }
187
188 void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
189 {
190 wxPaintDC dc(this);
191 #if 0
192 MyFrame* frame = (MyFrame*) GetParent();
193 if (frame->GetPlayer().IsPlaying())
194 {
195 frame->GetPlayer().Draw(dc);
196 }
197 #endif
198 }
199