📄 mmboard.cpp
字号:
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); // Bitmap button panel wxBoxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL); 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_stopButton, 0, wxALL, 2); buttonSizer->Add(m_ejectButton, 0, wxALL, 2); // Top sizer m_sizer = new wxBoxSizer(wxVERTICAL);#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);#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);#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_sizer->Fit(this); m_sizer->SetSizeHints(this); // Timer m_refreshTimer = new wxTimer(this, MMBoard_RefreshInfo); // Video window m_video_window = NULL; // Multimedia file m_opened_file = NULL;}MMBoardFrame::~MMBoardFrame(){ if (m_opened_file) delete m_opened_file; delete m_refreshTimer;}void MMBoardFrame::OpenVideoWindow(){ if (m_video_window) return; 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); m_sizer->Fit(this);}void MMBoardFrame::CloseVideoWindow(){ if (!m_video_window) return; m_sizer->Detach( m_video_window ); delete m_video_window; m_video_window = NULL; m_sizer->Fit(this);}// event handlersvoid MMBoardFrame::OnQuit(wxCommandEvent& WXUNUSED(event)){ // true is to force the frame to close Close(true);}void MMBoardFrame::OnAbout(wxCommandEvent& WXUNUSED(event)){ wxString msg; 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; OnStop(event2); } delete m_opened_file; } // select a file to be opened#if wxUSE_FILEDLG selected_file = wxLoadFileSelector(_T("multimedia"), _T("*"), NULL, this);#endif // wxUSE_FILEDLG if (selected_file.empty()) 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(); m_ejectButton->Enable(); m_positionSlider->Enable(); if (m_opened_file->NeedWindow()) { OpenVideoWindow(); m_opened_file->SetWindow(m_video_window); } else CloseVideoWindow();}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(){ MMBoardTime current, length; if (m_opened_file) { current = m_opened_file->GetPosition(); length = m_opened_file->GetLength(); } else { current.hours = current.minutes = current.seconds = 0; 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);}// ----------------------------------------------------------------------------// Playing management, refreshers, ...void MMBoardFrame::OnRefreshInfo(wxEvent& WXUNUSED(event)){ UpdateMMedInfo(); if (m_opened_file->IsStopped()) { m_refreshTimer->Stop(); m_playButton->Enable(); m_stopButton->Disable(); m_pauseButton->Disable(); }}void MMBoardFrame::OnPlay(wxCommandEvent& WXUNUSED(event)){ 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_opened_file->Play(); m_stopButton->Enable(); m_pauseButton->Enable(); m_playButton->Disable();}void MMBoardFrame::OnStop(wxCommandEvent& WXUNUSED(event)){ m_opened_file->Stop(); m_refreshTimer->Stop(); m_stopButton->Disable(); m_playButton->Enable(); UpdateMMedInfo();}void MMBoardFrame::OnPause(wxCommandEvent& WXUNUSED(event)){ m_opened_file->Pause(); m_playButton->Enable(); m_pauseButton->Disable();}void MMBoardFrame::OnEject(wxCommandEvent& WXUNUSED(event)){ m_opened_file->Stop(); delete m_opened_file; m_opened_file = NULL; m_playButton->Disable(); m_pauseButton->Disable(); m_stopButton->Disable(); m_ejectButton->Disable(); m_positionSlider->Disable(); UpdateInfoText(); UpdateMMedInfo();}void MMBoardFrame::OnSetPosition(wxCommandEvent& WXUNUSED(event)){ wxUint32 itime; MMBoardTime btime; itime = m_positionSlider->GetValue(); btime.seconds = itime % 60; btime.minutes = (itime / 60) % 60; btime.hours = itime / 3600; m_opened_file->SetPosition(btime); UpdateMMedInfo();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -