X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/735655319a79a2f164758aa1170d471927d77515..11e3c6ef36393fb5863ea2f9601d8facd73acb12:/samples/animate/anitest.cpp?ds=inline diff --git a/samples/animate/anitest.cpp b/samples/animate/anitest.cpp index f026946c0f..e958d585a2 100644 --- a/samples/animate/anitest.cpp +++ b/samples/animate/anitest.cpp @@ -28,12 +28,22 @@ #include "wx/wx.h" #endif -#ifndef __WXMSW__ - #include "mondrian.xpm" +#ifndef wxHAS_IMAGES_IN_RESOURCES + #include "../sample.xpm" #endif +#include "wx/aboutdlg.h" +#include "wx/artprov.h" +#include "wx/colordlg.h" +#include "wx/wfstream.h" + #include "anitest.h" +#if !wxUSE_ANIMATIONCTRL + #error Cannot compile this sample if wxAnimationCtrl is not enabled +#endif + + IMPLEMENT_APP(MyApp) // --------------------------------------------------------------------------- @@ -46,11 +56,20 @@ IMPLEMENT_APP(MyApp) enum { - wxID_PLAY + ID_PLAY = 1, + ID_SET_NULL_ANIMATION, + ID_SET_INACTIVE_BITMAP, + ID_SET_NO_AUTO_RESIZE, + ID_SET_BGCOLOR }; BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(wxID_PLAY, MyFrame::OnPlay) + EVT_MENU(ID_PLAY, MyFrame::OnPlay) + EVT_MENU(ID_SET_NULL_ANIMATION, MyFrame::OnSetNullAnimation) + EVT_MENU(ID_SET_INACTIVE_BITMAP, MyFrame::OnSetInactiveBitmap) + EVT_MENU(ID_SET_NO_AUTO_RESIZE, MyFrame::OnSetNoAutoResize) + EVT_MENU(ID_SET_BGCOLOR, MyFrame::OnSetBgColor) + EVT_MENU(wxID_STOP, MyFrame::OnStop) EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) EVT_MENU(wxID_EXIT, MyFrame::OnQuit) @@ -73,78 +92,85 @@ END_EVENT_TABLE() // Initialise this in OnInit, not statically bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + // Create the main frame window - MyFrame* frame = new MyFrame((wxFrame *)NULL, -1, _T("Animation Demo"), - wxPoint(-1, -1), wxSize(500, 400), - wxDEFAULT_FRAME_STYLE); + MyFrame* frame = new MyFrame((wxFrame *)NULL, wxID_ANY, wxT("Animation Demo"), + wxDefaultPosition, wxSize(500, 400), + wxDEFAULT_FRAME_STYLE); + frame->Show(true); + + return true; +} - // Give it an icon - frame->SetIcon(wxICON(sample)); +// --------------------------------------------------------------------------- +// MyFrame +// --------------------------------------------------------------------------- + +// 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) +{ + SetIcon(wxICON(sample)); // 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")); + file_menu->Append(wxID_OPEN, wxT("&Open Animation...\tCtrl+O"), wxT("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")); + play_menu->Append(ID_PLAY, wxT("Play\tCtrl+P"), wxT("Play the animation")); + play_menu->Append(wxID_STOP, wxT("Stop\tCtrl+S"), wxT("Stop the animation")); + play_menu->AppendSeparator(); + play_menu->Append(ID_SET_NULL_ANIMATION, wxT("Set null animation"), + wxT("Sets the empty animation in the control")); + play_menu->AppendCheckItem(ID_SET_INACTIVE_BITMAP, wxT("Set inactive bitmap"), + wxT("Sets an inactive bitmap for the control")); + play_menu->AppendCheckItem(ID_SET_NO_AUTO_RESIZE, wxT("Set no autoresize"), + wxT("Tells the control not to resize automatically")); + play_menu->Append(ID_SET_BGCOLOR, wxT("Set background colour..."), + wxT("Sets the background colour of the control")); 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")); + menu_bar->Append(file_menu, wxT("&File")); + menu_bar->Append(play_menu, wxT("&Animation")); + menu_bar->Append(help_menu, wxT("&Help")); - // Associate the menu bar with the frame - frame->SetMenuBar(menu_bar); + // Associate the menu bar with this frame + SetMenuBar(menu_bar); #if wxUSE_STATUSBAR - frame->CreateStatusBar(); + 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); + // use a wxBoxSizer otherwise wxFrame will automatically + // resize the m_animationCtrl to fill its client area on + // user resizes + wxSizer *sz = new wxBoxSizer(wxVERTICAL); + sz->Add(new wxStaticText(this, wxID_ANY, wxT("wxAnimationCtrl:")), + wxSizerFlags().Centre().Border()); - m_animationCtrl = new wxAnimationCtrl(this, wxID_ANY, wxNullAnimation, - wxPoint(0,0),wxSize(100,100)); + m_animationCtrl = new wxAnimationCtrl(this, wxID_ANY); if (m_animationCtrl->LoadFile(wxT("throbber.gif"))) m_animationCtrl->Play(); - //sz->Add(m_animationCtrl, 1, wxGROW); - - //SetSizer(sz); + sz->Add(m_animationCtrl, wxSizerFlags().Centre().Border()); + SetSizer(sz); } MyFrame::~MyFrame() @@ -154,7 +180,9 @@ MyFrame::~MyFrame() void MyFrame::OnPlay(wxCommandEvent& WXUNUSED(event)) { if (!m_animationCtrl->Play()) + { wxLogError(wxT("Invalid animation")); + } } void MyFrame::OnStop(wxCommandEvent& WXUNUSED(event)) @@ -162,6 +190,62 @@ void MyFrame::OnStop(wxCommandEvent& WXUNUSED(event)) m_animationCtrl->Stop(); } +void MyFrame::OnSetNullAnimation(wxCommandEvent& WXUNUSED(event)) +{ + m_animationCtrl->SetAnimation(wxNullAnimation); +} + +void MyFrame::OnSetInactiveBitmap(wxCommandEvent& event) +{ + if (event.IsChecked()) + { + // set a dummy bitmap as the inactive bitmap + wxBitmap bmp = wxArtProvider::GetBitmap(wxART_MISSING_IMAGE); + m_animationCtrl->SetInactiveBitmap(bmp); + } + else + m_animationCtrl->SetInactiveBitmap(wxNullBitmap); +} + +void MyFrame::OnSetNoAutoResize(wxCommandEvent& event) +{ + // recreate the control with the new flag if necessary + long style = wxAC_DEFAULT_STYLE | + (event.IsChecked() ? wxAC_NO_AUTORESIZE : 0); + + if (style != m_animationCtrl->GetWindowStyle()) + { + // save status of the control before destroying it + wxAnimation curr = m_animationCtrl->GetAnimation(); + wxBitmap inactive = m_animationCtrl->GetInactiveBitmap(); + wxColour bg = m_animationCtrl->GetBackgroundColour(); + + // destroy & rebuild + wxAnimationCtrl *old = m_animationCtrl; + m_animationCtrl = new wxAnimationCtrl(this, wxID_ANY, curr, + wxDefaultPosition, wxDefaultSize, + style); + + GetSizer()->Replace(old, m_animationCtrl); + delete old; + + // load old status in new control + m_animationCtrl->SetInactiveBitmap(inactive); + m_animationCtrl->SetBackgroundColour(bg); + + GetSizer()->Layout(); + } +} + +void MyFrame::OnSetBgColor(wxCommandEvent& WXUNUSED(event)) +{ + wxColour clr = wxGetColourFromUser(this, m_animationCtrl->GetBackgroundColour(), + wxT("Choose the background colour")); + + if (clr.IsOk()) + m_animationCtrl->SetBackgroundColour(clr); +} + void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(); @@ -169,22 +253,22 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) 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 + wxAboutDialogInfo info; + info.SetName(_("wxAnimationCtrl and wxAnimation sample")); + info.SetDescription(_("This sample program demonstrates the usage of wxAnimationCtrl")); + info.SetCopyright(wxT("(C) 2006 Julian Smart")); - */ + info.AddDeveloper(wxT("Julian Smart")); + info.AddDeveloper(wxT("Guillermo Rodriguez Garcia")); + info.AddDeveloper(wxT("Francesco Montorsi")); - (void)wxMessageBox(_T("wxWidgets 2 Animation Demo\n") - _T("Author: Julian Smart (c) 2001\n"), - _T("About Animation Demo")); + wxAboutBox(info); } #if wxUSE_FILEDLG void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) { - wxFileDialog dialog(this, _T("Please choose an animation"), + wxFileDialog dialog(this, wxT("Please choose an animation"), wxEmptyString, wxEmptyString, wxT("*.gif;*.ani"), wxFD_OPEN); if (dialog.ShowModal() == wxID_OK) { @@ -195,7 +279,7 @@ void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) if (m_animationCtrl->LoadFile(filename)) m_animationCtrl->Play(); else - wxMessageBox(_T("Sorry, this animation is not a valid format for wxAnimation.")); + wxMessageBox(wxT("Sorry, this animation is not a valid format for wxAnimation.")); #else #if 0 wxAnimation temp; @@ -209,7 +293,7 @@ void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) m_animationCtrl->Play(); #else wxFileInputStream stream(filename); - if (!stream.Ok()) + if (!stream.IsOk()) { wxLogError(wxT("Sorry, this animation is not a valid format for wxAnimation.")); return; @@ -226,6 +310,8 @@ void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) m_animationCtrl->Play(); #endif #endif + + GetSizer()->Layout(); } } #endif // wxUSE_FILEDLG @@ -233,30 +319,7 @@ void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnUpdateUI(wxUpdateUIEvent& WXUNUSED(event) ) { GetMenuBar()->FindItem(wxID_STOP)->Enable(m_animationCtrl->IsPlaying()); - GetMenuBar()->FindItem(wxID_PLAY)->Enable(!m_animationCtrl->IsPlaying()); + GetMenuBar()->FindItem(ID_PLAY)->Enable(!m_animationCtrl->IsPlaying()); + GetMenuBar()->FindItem(ID_SET_NO_AUTO_RESIZE)->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"), -}