#include "wx/wx.h"
#endif
-#ifndef __WXMSW__
- #include "sample.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)
// ---------------------------------------------------------------------------
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)
// 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, wxID_ANY, _T("Animation Demo"));
+ 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(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->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()
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::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();
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)
{
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;
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;
m_animationCtrl->Play();
#endif
#endif
+
+ GetSizer()->Layout();
}
}
#endif // wxUSE_FILEDLG
{
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());
}
-// ---------------------------------------------------------------------------
-// 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, wxID_ANY, 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"),
-}