| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        anitest.cpp
 
- // Purpose:     Animation sample
 
- // Author:      Julian Smart
 
- // Modified by: Francesco Montorsi
 
- // Created:     02/07/2001
 
- // 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 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)
 
- // ---------------------------------------------------------------------------
 
- // global variables
 
- // ---------------------------------------------------------------------------
 
- // ---------------------------------------------------------------------------
 
- // event tables
 
- // ---------------------------------------------------------------------------
 
- enum
 
- {
 
-     ID_PLAY = 1,
 
-     ID_SET_NULL_ANIMATION,
 
-     ID_SET_INACTIVE_BITMAP,
 
-     ID_SET_NO_AUTO_RESIZE,
 
-     ID_SET_BGCOLOR
 
- };
 
- wxBEGIN_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)
 
- #if wxUSE_FILEDLG
 
-     EVT_MENU(wxID_OPEN, MyFrame::OnOpen)
 
- #endif // wxUSE_FILEDLG
 
-     EVT_SIZE(MyFrame::OnSize)
 
-     EVT_UPDATE_UI(wxID_ANY, MyFrame::OnUpdateUI)
 
- wxEND_EVENT_TABLE()
 
- // ===========================================================================
 
- // implementation
 
- // ===========================================================================
 
- // ---------------------------------------------------------------------------
 
- // MyApp
 
- // ---------------------------------------------------------------------------
 
- // 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, wxT("Animation Demo"),
 
-                                  wxDefaultPosition, wxSize(500, 400),
 
-                                  wxDEFAULT_FRAME_STYLE);
 
-     frame->Show(true);
 
-     return true;
 
- }
 
- // ---------------------------------------------------------------------------
 
- // 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, 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, 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, wxT("&File"));
 
-     menu_bar->Append(play_menu, wxT("&Animation"));
 
-     menu_bar->Append(help_menu, wxT("&Help"));
 
-     // Associate the menu bar with this frame
 
-     SetMenuBar(menu_bar);
 
- #if wxUSE_STATUSBAR
 
-     CreateStatusBar();
 
- #endif // wxUSE_STATUSBAR
 
-     // 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()
 
- {
 
- }
 
- 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) )
 
- {
 
-     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"));
 
-     wxAboutBox(info);
 
- }
 
- #if wxUSE_FILEDLG
 
- void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     wxFileDialog dialog(this, wxT("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(wxT("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.IsOk())
 
-         {
 
-             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
 
-         GetSizer()->Layout();
 
-     }
 
- }
 
- #endif // wxUSE_FILEDLG
 
- 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());
 
- }
 
 
  |