X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8cdb648efa5ec88c29848311a589bec7ddd2ffb0..b63269cabe710bf0024bce483fa6ebf1331bc034:/contrib/samples/mmedia/mmboard.cpp diff --git a/contrib/samples/mmedia/mmboard.cpp b/contrib/samples/mmedia/mmboard.cpp index 8bdee6e9eb..3015dd5308 100644 --- a/contrib/samples/mmedia/mmboard.cpp +++ b/contrib/samples/mmedia/mmboard.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- #ifdef __GNUG__ - #pragma implementation "mmboard.cpp" + #pragma implementation "mmboard.h" #endif // For compilers that support precompilation, includes "wx/wx.h". @@ -28,7 +28,7 @@ #endif // for all others, include the necessary headers (this file is usually all you -// need because it includes almost all "standard" wxWindows headers +// need because it includes almost all "standard" wxWidgets headers #ifndef WX_PRECOMP #include "wx/wx.h" #endif @@ -37,7 +37,7 @@ // ressources // ---------------------------------------------------------------------------- // the application icon -#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) +#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) #include "mondrian.xpm" #endif @@ -75,7 +75,7 @@ public: MMBoardFrame(const wxString& title, const wxPoint& pos, const wxSize& size); // dtor ~MMBoardFrame(); - + // event handlers void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); @@ -86,28 +86,28 @@ public: void OnEject(wxCommandEvent& event); void OnRefreshInfo(wxEvent& event); void OnSetPosition(wxCommandEvent& event); - + void OpenVideoWindow(); void CloseVideoWindow(); - + private: - // any class wishing to process wxWindows events must use this macro + // any class wishing to process wxWidgets events must use this macro DECLARE_EVENT_TABLE() private: - void UpdateMMedInfo(); + void UpdateMMedInfo(); void UpdateInfoText(); - + MMBoardFile *m_opened_file; - + wxSlider *m_positionSlider; wxBitmapButton *m_playButton, *m_pauseButton, *m_stopButton, *m_ejectButton; wxStaticText *m_fileType, *m_infoText; wxWindow *m_video_window; - + wxPanel *m_panel; wxSizer *m_sizer; - + wxTimer *m_refreshTimer; }; @@ -132,7 +132,7 @@ enum }; // ---------------------------------------------------------------------------- -// event tables and other macros for wxWindows +// event tables and other macros for wxWidgets // ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(MMBoardFrame, wxFrame) @@ -142,7 +142,7 @@ BEGIN_EVENT_TABLE(MMBoardFrame, wxFrame) EVT_BUTTON(MMBoard_PlayButton, MMBoardFrame::OnPlay) EVT_BUTTON(MMBoard_StopButton, MMBoardFrame::OnStop) EVT_BUTTON(MMBoard_PauseButton, MMBoardFrame::OnPause) - EVT_BUTTON(MMBoard_EjectButton, MMBoardFrame::OnEject) + EVT_BUTTON(MMBoard_EjectButton, MMBoardFrame::OnEject) EVT_SLIDER(MMBoard_PositionSlider, MMBoardFrame::OnSetPosition) EVT_CUSTOM(wxEVT_TIMER, MMBoard_RefreshInfo, MMBoardFrame::OnRefreshInfo) END_EVENT_TABLE() @@ -164,48 +164,56 @@ IMPLEMENT_APP(MMBoardApp) bool MMBoardApp::OnInit() { // create the main application window - MMBoardFrame *frame = new MMBoardFrame("Multimedia Board", + MMBoardFrame *frame = new MMBoardFrame(_T("Multimedia Board"), wxPoint(50, 50), wxSize(450, 340)); // and show it (the frames, unlike simple controls, are not shown when // created initially) - frame->Show(TRUE); + frame->Show(); m_caps = TestMultimediaCaps(); if (!m_caps) { - wxMessageBox("Your system has no multimedia capabilities. We are exiting now.", "Major error !", wxOK | wxICON_ERROR, NULL); - return FALSE; + wxMessageBox(_T("Your system has no multimedia capabilities. We are exiting now."), _T("Major error !"), wxOK | wxICON_ERROR, NULL); + return false; } wxString msg; - msg.Printf("Detected : %s%s%s", (m_caps & MM_SOUND_OSS) ? "OSS " : "", - (m_caps & MM_SOUND_ESD) ? "ESD " : "", - (m_caps & MM_SOUND_WIN) ? "WIN" : ""); + msg.Printf(_T("Detected : %s%s%s"), (m_caps & MM_SOUND_OSS) ? _T("OSS ") : _T(""), + (m_caps & MM_SOUND_ESD) ? _T("ESD ") : _T(""), + (m_caps & MM_SOUND_WIN) ? _T("WIN") : _T("")); - wxMessageBox(msg, "Good !", wxOK | wxICON_INFORMATION, NULL); + wxMessageBox(msg, _T("Good !"), wxOK | wxICON_INFORMATION, NULL); // success: wxApp::OnRun() will be called which will enter the main message - // loop and the application will run. If we returned FALSE here, the + // loop and the application will run. If we returned false here, the // application would exit immediately. - return TRUE; + return true; } wxUint8 MMBoardApp::TestMultimediaCaps() { wxSoundStream *dev; wxUint8 caps; - + caps = 0; - -#ifdef __UNIX__ + +#ifdef __WIN32__ + // We test the Windows sound support. + + dev = new wxSoundStreamWin(); + if (dev->GetError() == wxSOUND_NOERROR) + caps |= MM_SOUND_WIN; + delete dev; + +#elif defined __UNIX__ // We now test the ESD support - + dev = new wxSoundStreamESD(); - if (dev->GetError() == wxSOUND_NOERROR) + if (dev->GetError() == wxSOUND_NOERROR) caps |= MM_SOUND_ESD; delete dev; - + // We test the OSS (Open Sound System) support. // WARNING: There is a conflict between ESD and ALSA. We may be interrested // in disabling the auto detection of OSS is ESD has been detected. @@ -222,16 +230,7 @@ wxUint8 MMBoardApp::TestMultimediaCaps() #endif #endif - -#ifdef __WIN32__ - // We test the Windows sound support. - dev = new wxSoundStreamWin(); - if (dev->GetError() == wxSOUND_NOERROR) - caps |= MM_SOUND_WIN; - delete dev; -#endif - return caps; } @@ -241,7 +240,7 @@ wxUint8 MMBoardApp::TestMultimediaCaps() // frame constructor MMBoardFrame::MMBoardFrame(const wxString& title, const wxPoint& pos, const wxSize& size) - : wxFrame((wxFrame *)NULL, -1, title, pos, size) + : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size) { #ifdef __WXMAC__ // we need this in order to allow the about menu relocation, since ABOUT is @@ -253,7 +252,7 @@ MMBoardFrame::MMBoardFrame(const wxString& title, const wxPoint& pos, const wxSi SetIcon(wxICON(mondrian)); // create a menu bar - wxMenu *menuFile = new wxMenu(wxT(""), wxMENU_TEAROFF); + wxMenu *menuFile = new wxMenu(wxEmptyString, wxMENU_TEAROFF); // the "About" item should be in the help menu wxMenu *helpMenu = new wxMenu; @@ -274,74 +273,82 @@ MMBoardFrame::MMBoardFrame(const wxString& title, const wxPoint& pos, const wxSi #if wxUSE_STATUSBAR // create a status bar just for fun (by default with 1 pane only) CreateStatusBar(3); - SetStatusText(wxT("Welcome to wxWindows!")); + SetStatusText(wxT("Welcome to wxWidgets!")); #endif // wxUSE_STATUSBAR // Misc variables m_opened_file = NULL; - m_panel = new wxPanel(this, -1); + m_panel = new wxPanel(this, wxID_ANY); // Initialize main slider m_positionSlider = new wxSlider( m_panel, MMBoard_PositionSlider, 0, 0, 60, - wxDefaultPosition, wxSize(300, -1), - wxSL_HORIZONTAL | wxSL_AUTOTICKS); + wxDefaultPosition, wxSize(300, wxDefaultCoord), + wxSL_HORIZONTAL | wxSL_AUTOTICKS); m_positionSlider->SetPageSize(60); // 60 secs - m_positionSlider->Enable(FALSE); - + m_positionSlider->Disable(); + // Initialize info panel - wxPanel *infoPanel = new wxPanel( m_panel, -1); + wxPanel *infoPanel = new wxPanel( m_panel, wxID_ANY); infoPanel->SetBackgroundColour(*wxBLACK); infoPanel->SetForegroundColour(*wxWHITE); wxBoxSizer *infoSizer = new wxBoxSizer(wxVERTICAL); - m_fileType = new wxStaticText(infoPanel, -1, wxT("")); - wxStaticLine *line = new wxStaticLine(infoPanel, -1); - m_infoText = new wxStaticText(infoPanel, -1, ""); + m_fileType = new wxStaticText(infoPanel, wxID_ANY, wxEmptyString); +#if wxUSE_STATLINE + wxStaticLine *line = new wxStaticLine(infoPanel, wxID_ANY); +#endif // wxUSE_STATLINE + m_infoText = new wxStaticText(infoPanel, wxID_ANY, wxEmptyString); UpdateInfoText(); infoSizer->Add(m_fileType, 0, wxGROW | wxALL, 1); +#if wxUSE_STATLINE infoSizer->Add(line, 0, wxGROW | wxCENTRE, 20); +#endif // wxUSE_STATLINE infoSizer->Add(m_infoText, 0, wxGROW | wxALL, 1); - + infoPanel->SetSizer(infoSizer); - infoPanel->SetAutoLayout(TRUE); // Bitmap button panel wxBoxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL); - - wxBitmap *play_bmp = new wxBitmap(play_back_xpm); - wxBitmap *stop_bmp = new wxBitmap(stop_back_xpm); - wxBitmap *eject_bmp = new wxBitmap(eject_xpm); - wxBitmap *pause_bmp = new wxBitmap(pause_xpm); - - m_playButton = new wxBitmapButton(m_panel, MMBoard_PlayButton, *play_bmp); - m_playButton->Enable(FALSE); - m_pauseButton = new wxBitmapButton(m_panel, MMBoard_PauseButton, *pause_bmp); - m_pauseButton->Enable(FALSE); - m_stopButton = new wxBitmapButton(m_panel, MMBoard_StopButton, *stop_bmp); - m_stopButton->Enable(FALSE); - m_ejectButton = new wxBitmapButton(m_panel, MMBoard_EjectButton, *eject_bmp); - m_ejectButton->Enable(FALSE); - + + wxBitmap play_bmp(play_back_xpm); + wxBitmap stop_bmp(stop_back_xpm); + wxBitmap eject_bmp(eject_xpm); + wxBitmap pause_bmp(pause_xpm); + + m_playButton = new wxBitmapButton(m_panel, MMBoard_PlayButton, play_bmp); + m_playButton->Disable(); + m_pauseButton = new wxBitmapButton(m_panel, MMBoard_PauseButton, pause_bmp); + m_pauseButton->Disable(); + m_stopButton = new wxBitmapButton(m_panel, MMBoard_StopButton, stop_bmp); + m_stopButton->Disable(); + m_ejectButton = new wxBitmapButton(m_panel, MMBoard_EjectButton, eject_bmp); + m_ejectButton->Disable(); + buttonSizer->Add(m_playButton, 0, wxALL, 2); - buttonSizer->Add(m_pauseButton, 0, wxALL, 2); + buttonSizer->Add(m_pauseButton, 0, wxALL, 2); buttonSizer->Add(m_stopButton, 0, wxALL, 2); buttonSizer->Add(m_ejectButton, 0, wxALL, 2); // Top sizer m_sizer = new wxBoxSizer(wxVERTICAL); - m_sizer->Add(new wxStaticLine(m_panel, -1), 0, wxGROW | wxCENTRE, 0); +#if wxUSE_STATLINE + m_sizer->Add(new wxStaticLine(m_panel, wxID_ANY), 0, wxGROW | wxCENTRE, 0); +#endif // wxUSE_STATLINE m_sizer->Add(m_positionSlider, 0, wxCENTRE | wxGROW | wxALL, 2); - m_sizer->Add(new wxStaticLine(m_panel, -1), 0, wxGROW | wxCENTRE, 0); +#if wxUSE_STATLINE + m_sizer->Add(new wxStaticLine(m_panel, wxID_ANY), 0, wxGROW | wxCENTRE, 0); +#endif // wxUSE_STATLINE m_sizer->Add(buttonSizer, 0, wxALL, 0); - m_sizer->Add(new wxStaticLine(m_panel, -1), 0, wxGROW | wxCENTRE, 0); +#if wxUSE_STATLINE + m_sizer->Add(new wxStaticLine(m_panel, wxID_ANY), 0, wxGROW | wxCENTRE, 0); +#endif // wxUSE_STATLINE m_sizer->Add(infoPanel, 1, wxCENTRE | wxGROW, 0); - + m_panel->SetSizer(m_sizer); - m_panel->SetAutoLayout(TRUE); m_sizer->Fit(this); m_sizer->SetSizeHints(this); @@ -359,7 +366,7 @@ MMBoardFrame::~MMBoardFrame() { if (m_opened_file) delete m_opened_file; - + delete m_refreshTimer; } @@ -368,7 +375,7 @@ void MMBoardFrame::OpenVideoWindow() if (m_video_window) return; - m_video_window = new wxWindow(m_panel, -1, wxDefaultPosition, wxSize(200, 200)); + m_video_window = new wxWindow(m_panel, wxID_ANY, wxDefaultPosition, wxSize(200, 200)); m_video_window->SetBackgroundColour(*wxBLACK); m_sizer->Prepend(m_video_window, 2, wxGROW | wxSHRINK | wxCENTRE, 1); @@ -379,11 +386,11 @@ void MMBoardFrame::CloseVideoWindow() { if (!m_video_window) return; - - m_sizer->Remove(m_video_window); + + m_sizer->Detach( m_video_window ); delete m_video_window; m_video_window = NULL; - + m_sizer->Fit(this); } @@ -391,24 +398,24 @@ void MMBoardFrame::CloseVideoWindow() void MMBoardFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { - // TRUE is to force the frame to close - Close(TRUE); + // true is to force the frame to close + Close(true); } void MMBoardFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxString msg; - msg.Printf( wxT("wxWindows Multimedia board v1.0a, wxMMedia v2.0a:\n") - wxT("an example of the capabilities of the wxWindows multimedia classes.\n") - wxT("Copyright 1999, 2000, Guilhem Lavaux.\n")); - - wxMessageBox(msg, "About MMBoard", wxOK | wxICON_INFORMATION, this); + msg.Printf( wxT("wxWidgets Multimedia board v1.0a, wxMMedia v2.0a:\n") + wxT("an example of the capabilities of the wxWidgets multimedia classes.\n") + wxT("Copyright 1999, 2000, Guilhem Lavaux.\n")); + + wxMessageBox(msg, _T("About MMBoard"), wxOK | wxICON_INFORMATION, this); } void MMBoardFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) { wxString selected_file; - + if (m_opened_file) { if (!m_opened_file->IsStopped()) { wxCommandEvent event2; @@ -416,33 +423,35 @@ void MMBoardFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) } delete m_opened_file; } - + // select a file to be opened - selected_file = wxLoadFileSelector("multimedia", "*", NULL, this); + selected_file = wxLoadFileSelector(_T("multimedia"), _T("*"), NULL, this); if (selected_file.IsNull()) return; - + m_opened_file = MMBoardManager::Open(selected_file); - + // Change the range values of the slider. MMBoardTime length; - + length = m_opened_file->GetLength(); m_positionSlider->SetRange(0, length.hours * 3600 + length.minutes * 60 + length.seconds); - + // Update misc info UpdateMMedInfo(); - + +#if wxUSE_STATUSBAR SetStatusText(selected_file, 2); - +#endif // wxUSE_STATUSBAR + // Update info text UpdateInfoText(); - + // Enable a few buttons - m_playButton->Enable(TRUE); - m_ejectButton->Enable(TRUE); - m_positionSlider->Enable(TRUE); - + m_playButton->Enable(); + m_ejectButton->Enable(); + m_positionSlider->Enable(); + if (m_opened_file->NeedWindow()) { OpenVideoWindow(); m_opened_file->SetWindow(m_video_window); @@ -453,27 +462,26 @@ void MMBoardFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) void MMBoardFrame::UpdateInfoText() { wxString infotext1, infotext2; - + if (m_opened_file) { infotext1 = wxT("File type:\n\t"); infotext1 += m_opened_file->GetStringType() + wxT("\n"); - + infotext2 = wxT("File informations:\n\n"); infotext2 += m_opened_file->GetStringInformation(); } else { infotext1 = wxT("File type: \n\tNo file opened"); infotext2 = wxT("File informations:\nNo information\n\n\n\n\n"); } - + m_fileType->SetLabel(infotext1); m_infoText->SetLabel(infotext2); } void MMBoardFrame::UpdateMMedInfo() { - wxString temp_string; MMBoardTime current, length; - + if (m_opened_file) { current = m_opened_file->GetPosition(); length = m_opened_file->GetLength(); @@ -482,11 +490,16 @@ void MMBoardFrame::UpdateMMedInfo() length = current; } +#if wxUSE_STATUSBAR // We refresh the status bar + wxString temp_string; temp_string.Printf(wxT("%02d:%02d / %02d:%02d"), current.hours * 60 + current.minutes, current.seconds, length.hours * 60 + length.minutes, length.seconds); SetStatusText(temp_string, 1); - +#else + wxUnusedVar(length); +#endif // wxUSE_STATUSBAR + // We set the slider position m_positionSlider->SetValue(current.hours * 3600 + current.minutes * 60 + current.seconds); } @@ -497,33 +510,35 @@ void MMBoardFrame::UpdateMMedInfo() void MMBoardFrame::OnRefreshInfo(wxEvent& WXUNUSED(event)) { UpdateMMedInfo(); - - if (m_opened_file->IsStopped()) { + + if (m_opened_file->IsStopped()) + { m_refreshTimer->Stop(); - m_playButton->Enable(TRUE); - m_stopButton->Enable(FALSE); - m_pauseButton->Enable(FALSE); + m_playButton->Enable(); + m_stopButton->Disable(); + m_pauseButton->Disable(); } } void MMBoardFrame::OnPlay(wxCommandEvent& WXUNUSED(event)) { - m_stopButton->Enable(TRUE); - m_pauseButton->Enable(TRUE); - m_playButton->Enable(FALSE); - - if (m_opened_file->IsPaused()) { + m_stopButton->Enable(); + m_pauseButton->Enable(); + m_playButton->Disable(); + + if (m_opened_file->IsPaused()) + { m_opened_file->Resume(); return; } - - m_refreshTimer->Start(1000, FALSE); - + + m_refreshTimer->Start(1000, false); + m_opened_file->Play(); - - m_stopButton->Enable(TRUE); - m_pauseButton->Enable(TRUE); - m_playButton->Enable(FALSE); + + m_stopButton->Enable(); + m_pauseButton->Enable(); + m_playButton->Disable(); } void MMBoardFrame::OnStop(wxCommandEvent& WXUNUSED(event)) @@ -531,18 +546,18 @@ void MMBoardFrame::OnStop(wxCommandEvent& WXUNUSED(event)) m_opened_file->Stop(); m_refreshTimer->Stop(); - m_stopButton->Enable(FALSE); - m_playButton->Enable(TRUE); - + m_stopButton->Disable(); + m_playButton->Enable(); + UpdateMMedInfo(); } void MMBoardFrame::OnPause(wxCommandEvent& WXUNUSED(event)) { m_opened_file->Pause(); - - m_playButton->Enable(TRUE); - m_pauseButton->Enable(FALSE); + + m_playButton->Enable(); + m_pauseButton->Disable(); } void MMBoardFrame::OnEject(wxCommandEvent& WXUNUSED(event)) @@ -551,12 +566,12 @@ void MMBoardFrame::OnEject(wxCommandEvent& WXUNUSED(event)) delete m_opened_file; m_opened_file = NULL; - - m_playButton->Enable(FALSE); - m_pauseButton->Enable(FALSE); - m_stopButton->Enable(FALSE); - m_ejectButton->Enable(FALSE); - m_positionSlider->Enable(FALSE); + + m_playButton->Disable(); + m_pauseButton->Disable(); + m_stopButton->Disable(); + m_ejectButton->Disable(); + m_positionSlider->Disable(); UpdateInfoText(); UpdateMMedInfo(); @@ -566,7 +581,7 @@ void MMBoardFrame::OnSetPosition(wxCommandEvent& WXUNUSED(event)) { wxUint32 itime; MMBoardTime btime; - + itime = m_positionSlider->GetValue(); btime.seconds = itime % 60; btime.minutes = (itime / 60) % 60;