From cf46511d2caa2b6a7cde5f6cc58ae125db3ccf9b Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 17 Nov 2006 18:15:44 +0000 Subject: [PATCH] added tests for background colour, static bitmap &c (part of patch 1598005) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43476 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/animate/anitest.cpp | 98 +++++++++++++++++++++++++++++++++++-- samples/animate/anitest.h | 4 ++ 2 files changed, 97 insertions(+), 5 deletions(-) diff --git a/samples/animate/anitest.cpp b/samples/animate/anitest.cpp index cc45359a33..73bc017306 100644 --- a/samples/animate/anitest.cpp +++ b/samples/animate/anitest.cpp @@ -33,6 +33,8 @@ #endif #include "wx/aboutdlg.h" +#include "wx/artprov.h" +#include "wx/colordlg.h" #include "anitest.h" #if !wxUSE_ANIMATIONCTRL @@ -52,11 +54,20 @@ IMPLEMENT_APP(MyApp) enum { - ID_PLAY = 1 + 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(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) @@ -82,8 +93,8 @@ bool MyApp::OnInit() // Create the main frame window MyFrame* frame = new MyFrame((wxFrame *)NULL, wxID_ANY, _T("Animation Demo"), - wxDefaultPosition, wxSize(500, 400), - wxDEFAULT_FRAME_STYLE); + wxDefaultPosition, wxSize(500, 400), + wxDEFAULT_FRAME_STYLE); // Give it an icon frame->SetIcon(wxICON(sample)); @@ -99,6 +110,15 @@ bool MyApp::OnInit() wxMenu *play_menu = new wxMenu; play_menu->Append(ID_PLAY, _T("Play\tCtrl+P"), _T("Play the animation")); play_menu->Append(wxID_STOP, _T("Stop\tCtrl+P"), _T("Stop the animation")); + play_menu->AppendSeparator(); + play_menu->Append(ID_SET_NULL_ANIMATION, _T("Set null animation"), + _T("Sets the empty animation in the control")); + play_menu->AppendCheckItem(ID_SET_INACTIVE_BITMAP, _T("Set inactive bitmap"), + _T("Sets an inactive bitmap for the control")); + play_menu->AppendCheckItem(ID_SET_NO_AUTO_RESIZE, _T("Set no autoresize"), + _T("Tells the control not to resize automatically")); + play_menu->Append(ID_SET_BGCOLOR, _T("Set background colour..."), + _T("Sets the background colour of the control")); wxMenu *help_menu = new wxMenu; help_menu->Append(wxID_ABOUT); @@ -139,10 +159,19 @@ MyFrame::MyFrame(wxWindow *parent, : wxFrame(parent, id, title, pos, size, style | wxNO_FULL_REPAINT_ON_RESIZE) { - m_animationCtrl = new wxAnimationCtrl(this, wxID_ANY, wxNullAnimation, - wxPoint(0,0),wxSize(100,100)); + // 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); if (m_animationCtrl->LoadFile(wxT("throbber.gif"))) m_animationCtrl->Play(); + + sz->Add(m_animationCtrl, wxSizerFlags().Centre().Border()); + SetSizer(sz); } MyFrame::~MyFrame() @@ -160,6 +189,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(); @@ -224,6 +309,8 @@ void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) m_animationCtrl->Play(); #endif #endif + + GetSizer()->Layout(); } } #endif // wxUSE_FILEDLG @@ -232,5 +319,6 @@ void MyFrame::OnUpdateUI(wxUpdateUIEvent& WXUNUSED(event) ) { GetMenuBar()->FindItem(wxID_STOP)->Enable(m_animationCtrl->IsPlaying()); GetMenuBar()->FindItem(ID_PLAY)->Enable(!m_animationCtrl->IsPlaying()); + GetMenuBar()->FindItem(ID_SET_NO_AUTO_RESIZE)->Enable(!m_animationCtrl->IsPlaying()); } diff --git a/samples/animate/anitest.h b/samples/animate/anitest.h index 95f5526d3a..37c32e4f6e 100644 --- a/samples/animate/anitest.h +++ b/samples/animate/anitest.h @@ -31,6 +31,10 @@ public: void OnQuit(wxCommandEvent& event); void OnPlay(wxCommandEvent& event); + void OnSetNullAnimation(wxCommandEvent& event); + void OnSetInactiveBitmap(wxCommandEvent& event); + void OnSetNoAutoResize(wxCommandEvent& event); + void OnSetBgColor(wxCommandEvent& event); void OnStop(wxCommandEvent& event); void OnUpdateUI(wxUpdateUIEvent& event); -- 2.45.2