1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-02-07 12:12:23 +01:00
Files
audacity/lib-src/sbsms/src/wxplayerframe.cpp
2010-01-24 09:19:39 +00:00

123 lines
3.7 KiB
C++

#include "wxplayerframe.h"
#include <wx/progdlg.h>
#include <wx/filename.h>
#include "wxconvertdlg.h"
#include "convert.h"
BEGIN_EVENT_TABLE(wxPlayerFrame, wxFrame)
EVT_MENU(wxID_OPEN,wxPlayerFrame::OnOpen)
EVT_MENU(wxID_SAVE,wxPlayerFrame::OnSave)
EVT_MENU(wxID_EXIT,wxPlayerFrame::OnExit)
END_EVENT_TABLE()
bool progressCB(int progress, const char *msg, void *data)
{
wxProgressDialog *progressDlg = (wxProgressDialog*)data;
return progressDlg->Update(progress);
}
void wxPlayerFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
{
wxFileDialog dlg(this, wxT("Choose a file"), wxT("."), wxT(""), wxT("All filetypes (*.sbsms;*.mp3;*.wav;*.aif;*.aiff;*.pcm)|*.sbsms;*.mp3;*.wav;*.aif;*.aiff;*.pcm"),wxOPEN);
if(dlg.ShowModal() == wxID_OK) {
wxString pathStr = dlg.GetPath();
wxFileName path(pathStr);
player->close();
if(path.GetExt().Cmp(wxT("sbsms")) == 0) {
if(player->open(path.GetFullPath().fn_str()))
openFileName = path.GetFullPath();
} else {
ConvertDialog convertDlg(this);
if(convertDlg.ShowModal() == wxID_OK) {
bool bPreAnalyze = convertDlg.getPreAnalyze();
int quality = convertDlg.getQuality();
wxFileName sbsmsPath(path.GetPath(wxPATH_GET_VOLUME|wxPATH_GET_SEPARATOR) + path.GetName() + wxT(".sbsms"));
wxProgressDialog progress(wxT("Progress"),wxT("Converting to ") + sbsmsPath.GetFullName());
bool status = sbsms_convert(path.GetFullPath().fn_str(),sbsmsPath.GetFullPath().fn_str(),true,false,bPreAnalyze,quality,progressCB,&progress,1.0f,1.0f,1.0f,1.0f,1.0f);
if(status) {
if(player->open(sbsmsPath.GetFullPath().fn_str()))
openFileName = sbsmsPath.GetFullPath();
} else {
wxMessageDialog msg(this,wxT("Conversion Failed"),wxT(""),wxOK);
}
}
}
}
}
void wxPlayerFrame::OnSave(wxCommandEvent& WXUNUSED(event))
{
if(openFileName.Cmp(wxT("")) != 0) {
wxFileDialog dlg(this, wxT("Choose a file"), wxT("."), wxT(""), wxT("*.wav"),wxSAVE|wxOVERWRITE_PROMPT);
if(dlg.ShowModal() == wxID_OK) {
wxString pathStr = dlg.GetPath();
wxFileName path(pathStr);
wxProgressDialog progress(wxT("Progress"),wxT("Converting to ") + path.GetFullName());
real rate = player->getRate();
real ratio = player->getRatio();
real volume = player->getVolume();
bool status = sbsms_convert(openFileName.fn_str(),path.GetFullPath().fn_str(),false,true,false,1,progressCB,&progress,rate,rate,ratio,ratio,volume);
if(!status) {
wxMessageDialog msg(this,wxT("Conversion Failed"),wxT(""),wxOK);
}
}
}
}
void wxPlayerFrame::OnExit(wxCommandEvent& WXUNUSED(event))
{
Close();
}
wxPlayerFrame::wxPlayerFrame(sbsmsplayer *player)
: wxFrame( (wxFrame*)NULL, -1, wxT("SBSMS"))
{
this->player = player;
openFileName = wxT("");
wxMenu* file_menu = new wxMenu;
file_menu->Append( wxID_OPEN, _("Open") );
file_menu->AppendSeparator();
file_menu->Append( wxID_SAVE, _("Save") );
file_menu->AppendSeparator();
file_menu->Append( wxID_EXIT, _("Exit") );
wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append( file_menu, _("&File") );
SetMenuBar( menu_bar );
#ifdef __WXMSW__
wxIcon ic(wxICON(SBSMSLogo));
SetIcon(ic);
#endif
wxBoxSizer *hs = new wxBoxSizer( wxHORIZONTAL );
playCtrl = new PlayCtrl(this,player);
playCtrl->Show(true);
hs->Add(playCtrl);
SetSizer(hs);
hs->Fit(this);
Layout();
}
void wxPlayerFrame :: OnPause()
{
GetMenuBar()->Enable(wxID_OPEN,true);
GetMenuBar()->Enable(wxID_SAVE,true);
GetMenuBar()->Enable(wxID_EXIT,true);
}
void wxPlayerFrame :: OnPlay()
{
GetMenuBar()->Enable(wxID_OPEN,false);
GetMenuBar()->Enable(wxID_SAVE,false);
GetMenuBar()->Enable(wxID_EXIT,false);
}
wxPlayerFrame::~wxPlayerFrame()
{
}