wxWidgets/samples/animate/anitest.cpp
Vadim Zeitlin 72045d5768 added wxAnimationCtrl (patch 1570325)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-10-09 17:51:07 +00:00

267 lines
7.4 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: anitest.cpp
// Purpose: Animation sample
// Author: Julian Smart
// Modified by: Francesco Montorsi
// Created: 02/07/2001
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ===========================================================================
// declarations
// ===========================================================================
// ---------------------------------------------------------------------------
// headers
// ---------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#ifndef __WXMSW__
#include "mondrian.xpm"
#endif
#include "anitest.h"
IMPLEMENT_APP(MyApp)
// ---------------------------------------------------------------------------
// global variables
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// event tables
// ---------------------------------------------------------------------------
enum
{
wxID_PLAY
};
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(wxID_PLAY, MyFrame::OnPlay)
EVT_MENU(wxID_STOP, MyFrame::OnStop)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
#if wxUSE_FILEDLG
EVT_MENU(wxID_OPEN, MyFrame::OnOpen)
#endif // wxUSE_FILEDLG
EVT_SIZE(MyFrame::OnSize)
EVT_UPDATE_UI(wxID_ANY, MyFrame::OnUpdateUI)
END_EVENT_TABLE()
// ===========================================================================
// implementation
// ===========================================================================
// ---------------------------------------------------------------------------
// MyApp
// ---------------------------------------------------------------------------
// Initialise this in OnInit, not statically
bool MyApp::OnInit()
{
// Create the main frame window
MyFrame* frame = new MyFrame((wxFrame *)NULL, -1, _T("Animation Demo"),
wxPoint(-1, -1), wxSize(500, 400),
wxDEFAULT_FRAME_STYLE);
// Give it an icon
#ifdef __WXMSW__
frame->SetIcon(wxIcon(_T("mdi_icn")));
#else
frame->SetIcon(wxIcon( mondrian_xpm ));
#endif
// Make a menubar
wxMenu *file_menu = new wxMenu;
#if wxUSE_FILEDLG
file_menu->Append(wxID_OPEN, _T("&Open Animation...\tCtrl+O"), _T("Loads an animation"));
#endif // wxUSE_FILEDLG
file_menu->Append(wxID_EXIT);
wxMenu *play_menu = new wxMenu;
play_menu->Append(wxID_PLAY, _T("Play\tCtrl+P"), _T("Play the animation"));
play_menu->Append(wxID_STOP, _T("Stop\tCtrl+P"), _T("Stop the animation"));
wxMenu *help_menu = new wxMenu;
help_menu->Append(wxID_ABOUT);
wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append(file_menu, _T("&File"));
menu_bar->Append(play_menu, _T("&Animation"));
menu_bar->Append(help_menu, _T("&Help"));
// Associate the menu bar with the frame
frame->SetMenuBar(menu_bar);
#if wxUSE_STATUSBAR
frame->CreateStatusBar();
#endif // wxUSE_STATUSBAR
frame->Show(true);
SetTopWindow(frame);
return true;
}
// ---------------------------------------------------------------------------
// MyFrame
// ---------------------------------------------------------------------------
#include "wx/wfstream.h"
// Define my frame constructor
MyFrame::MyFrame(wxWindow *parent,
const wxWindowID id,
const wxString& title,
const wxPoint& pos,
const wxSize& size,
const long style)
: wxFrame(parent, id, title, pos, size,
style | wxNO_FULL_REPAINT_ON_RESIZE)
{
//m_canvas = new MyCanvas(this, wxPoint(0, 0), wxDefaultSize);
//wxSizer *sz = new wxBoxSizer(wxVERTICAL);
m_animationCtrl = new wxAnimationCtrl(this, wxID_ANY, wxNullAnimation,
wxPoint(0,0),wxSize(100,100));
if (m_animationCtrl->LoadFile(wxT("throbber.gif")))
m_animationCtrl->Play();
//sz->Add(m_animationCtrl, 1, wxGROW);
//SetSizer(sz);
}
MyFrame::~MyFrame()
{
}
void MyFrame::OnPlay(wxCommandEvent& WXUNUSED(event))
{
if (!m_animationCtrl->Play())
wxLogError(wxT("Invalid animation"));
}
void MyFrame::OnStop(wxCommandEvent& WXUNUSED(event))
{
m_animationCtrl->Stop();
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close();
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
{
/*
FIXME: on wxGTK at least using File->About command it shows
the message dialog but does not focus it
*/
(void)wxMessageBox(_T("wxWidgets 2 Animation Demo\n")
_T("Author: Julian Smart (c) 2001\n"),
_T("About Animation Demo"));
}
#if wxUSE_FILEDLG
void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
{
wxFileDialog dialog(this, _T("Please choose an animation"),
wxEmptyString, wxEmptyString, wxT("*.gif;*.ani"), wxFD_OPEN);
if (dialog.ShowModal() == wxID_OK)
{
wxString filename(dialog.GetPath());
// enable one of the two chunk of codes to test different parts of wxAnimation/wxAnimationCtrl
#if 0
if (m_animationCtrl->LoadFile(filename))
m_animationCtrl->Play();
else
wxMessageBox(_T("Sorry, this animation is not a valid format for wxAnimation."));
#else
#if 0
wxAnimation temp;
if (!temp.LoadFile(filename))
{
wxLogError(wxT("Sorry, this animation is not a valid format for wxAnimation."));
return;
}
m_animationCtrl->SetAnimation(temp);
m_animationCtrl->Play();
#else
wxFileInputStream stream(filename);
if (!stream.Ok())
{
wxLogError(wxT("Sorry, this animation is not a valid format for wxAnimation."));
return;
}
wxAnimation temp;
if (!temp.Load(stream))
{
wxLogError(wxT("Sorry, this animation is not a valid format for wxAnimation."));
return;
}
m_animationCtrl->SetAnimation(temp);
m_animationCtrl->Play();
#endif
#endif
}
}
#endif // wxUSE_FILEDLG
void MyFrame::OnUpdateUI(wxUpdateUIEvent& WXUNUSED(event) )
{
GetMenuBar()->FindItem(wxID_STOP)->Enable(m_animationCtrl->IsPlaying());
GetMenuBar()->FindItem(wxID_PLAY)->Enable(!m_animationCtrl->IsPlaying());
}
// ---------------------------------------------------------------------------
// MyCanvas
// ---------------------------------------------------------------------------
BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
//EVT_PAINT(MyCanvas::OnPaint)
END_EVENT_TABLE()
// Define a constructor for my canvas
MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size)
: wxScrolledWindow(parent, -1, pos, size,
wxSUNKEN_BORDER |
wxNO_FULL_REPAINT_ON_RESIZE |
wxVSCROLL | wxHSCROLL)
{
SetBackgroundColour(wxColour(_T("YELLOW")));
}
void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
{
//wxPaintDC dc(this);
//dc.DrawRotatedText(wxT("Background"),
}