mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-15 15:49:36 +02:00
Round 3 retry...helps to add the changed files to the commit
This commit is contained in:
parent
d1594cdca5
commit
4deccfc980
@ -34,6 +34,31 @@ DEFINE_EVENT_TYPE(EVT_FILEDIALOG_SELECTION_CHANGED);
|
||||
DEFINE_EVENT_TYPE(EVT_FILEDIALOG_FILTER_CHANGED);
|
||||
DEFINE_EVENT_TYPE(EVT_FILEDIALOG_ADD_CONTROLS);
|
||||
|
||||
FileDialogBase::FileDialogBase()
|
||||
{
|
||||
m_creator = NULL;
|
||||
m_userdata = NULL;
|
||||
}
|
||||
|
||||
bool FileDialogBase::HasUserPaneCreator() const
|
||||
{
|
||||
return m_creator != NULL;
|
||||
}
|
||||
|
||||
void FileDialogBase::SetUserPaneCreator(UserPaneCreatorFunction creator, wxUIntPtr userdata)
|
||||
{
|
||||
m_creator = creator;
|
||||
m_userdata = userdata;
|
||||
}
|
||||
|
||||
void FileDialogBase::CreateUserPane(wxWindow *parent)
|
||||
{
|
||||
if (m_creator)
|
||||
{
|
||||
(*m_creator)(parent, m_userdata);
|
||||
}
|
||||
}
|
||||
|
||||
void FileDialogBase::EnableButton(wxString label, fdCallback cb, void *data)
|
||||
{
|
||||
m_buttonlabel = label;
|
||||
|
@ -18,6 +18,7 @@ custom controls.
|
||||
#define _FILE_DIALOG_H_
|
||||
|
||||
#include <wx/defs.h>
|
||||
#include <wx/filectrl.h>
|
||||
#include <wx/filedlg.h>
|
||||
|
||||
typedef void (*fdCallback)(void *, int);
|
||||
@ -45,13 +46,25 @@ DECLARE_EVENT_TYPE(EVT_FILEDIALOG_ADD_CONTROLS, -1);
|
||||
class FileDialogBase : public wxFileDialogBase
|
||||
{
|
||||
public:
|
||||
FileDialogBase() {};
|
||||
FileDialogBase();
|
||||
virtual ~FileDialogBase() {};
|
||||
|
||||
// FileDialogBase
|
||||
|
||||
typedef void (*UserPaneCreatorFunction)(wxWindow *parent, wxUIntPtr userdata);
|
||||
|
||||
virtual bool HasUserPaneCreator() const;
|
||||
virtual void SetUserPaneCreator(UserPaneCreatorFunction creator, wxUIntPtr userdata);
|
||||
|
||||
virtual void EnableButton(wxString label, fdCallback cb, void *cbdata);
|
||||
virtual void ClickButton(int index);
|
||||
|
||||
protected:
|
||||
void CreateUserPane(wxWindow *parent);
|
||||
|
||||
UserPaneCreatorFunction m_creator;
|
||||
wxUIntPtr m_userdata;
|
||||
|
||||
wxString m_buttonlabel;
|
||||
fdCallback m_callback;
|
||||
void *m_cbdata;
|
||||
|
@ -31,7 +31,7 @@ protected:
|
||||
wxArrayString m_paths;
|
||||
|
||||
public:
|
||||
FileDialog() { Init(); }
|
||||
FileDialog();
|
||||
FileDialog(wxWindow *parent,
|
||||
const wxString& message = wxFileSelectorPromptStr,
|
||||
const wxString& defaultDir = wxEmptyString,
|
||||
@ -40,12 +40,7 @@ public:
|
||||
long style = wxFD_DEFAULT_STYLE,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& sz = wxDefaultSize,
|
||||
const wxString& name = wxFileDialogNameStr)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(parent,message,defaultDir,defaultFile,wildCard,style,pos,sz,name);
|
||||
}
|
||||
const wxString& name = wxFileDialogNameStr);
|
||||
|
||||
void Create(wxWindow *parent,
|
||||
const wxString& message = wxFileSelectorPromptStr,
|
||||
@ -61,16 +56,6 @@ public:
|
||||
~FileDialog();
|
||||
#endif
|
||||
|
||||
virtual void EnableButton(wxString label, fdCallback cb, void *cbdata)
|
||||
{
|
||||
FileDialogBase::EnableButton(label, cb, cbdata);
|
||||
}
|
||||
|
||||
virtual void ClickButton(int index)
|
||||
{
|
||||
FileDialogBase::ClickButton(index);
|
||||
};
|
||||
|
||||
virtual void GetPaths(wxArrayString& paths) const { paths = m_paths; }
|
||||
virtual void GetFilenames(wxArrayString& files) const { files = m_fileNames ; }
|
||||
|
||||
@ -86,8 +71,9 @@ public:
|
||||
// implementation only
|
||||
|
||||
#if wxOSX_USE_COCOA
|
||||
// returns true if the file can be shown as active
|
||||
bool CheckFile( const wxString& filename );
|
||||
void DoSendFileActivatedEvent(void* panel);
|
||||
void DoSendFolderChangedEvent(void* panel, const wxString& path);
|
||||
void DoSendSelectionChangedEvent(void* panel);
|
||||
#endif
|
||||
|
||||
protected:
|
||||
@ -99,7 +85,6 @@ protected:
|
||||
void SetupExtraControls(WXWindow nativeWindow);
|
||||
|
||||
#if wxOSX_USE_COCOA
|
||||
virtual wxWindow* CreateFilterPanel(wxWindow *extracontrol);
|
||||
void DoOnFilterSelected(int index);
|
||||
virtual void OnFilterSelected(wxCommandEvent &event);
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
#include <wx/wxprec.h>
|
||||
|
||||
#include "FileDialog.h"
|
||||
|
||||
@ -47,57 +47,28 @@
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
// Open Items:
|
||||
// - parameter support for descending into packages as directories (setTreatsFilePackagesAsDirectories)
|
||||
// - as setAllowedFileTypes is only functional for NSOpenPanel on 10.6+, on earlier systems, the file
|
||||
// type choice will not be shown, but all possible file items will be shown, if a popup must be working
|
||||
// then the delegate method - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename will have to
|
||||
// be implemented
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
bool HasAppKit_10_6()
|
||||
{
|
||||
// Even if we require 10.6, we might be loaded by an application that
|
||||
// was linked against 10.5. setAllowedFileTypes will still be ignored
|
||||
// in this case. From NSSavePanel.h:
|
||||
// NSOpenPanel: On versions less than 10.6, this property is ignored.
|
||||
// For applications that link against 10.6 and higher, this property will
|
||||
// determine which files should be enabled in the open panel.
|
||||
int32_t version = NSVersionOfLinkTimeLibrary("AppKit");
|
||||
if (version == -1)
|
||||
{
|
||||
// If we're loaded by an application that doesn't link against AppKit,
|
||||
// use the runtime version instead. This check will not work for the
|
||||
// case above.
|
||||
version = NSVersionOfRunTimeLibrary("AppKit");
|
||||
}
|
||||
|
||||
// Notice that this still works correctly even if version is -1.
|
||||
return version >= 0x40e2400 /* version of 10.6 AppKit */;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
@interface OpenPanelDelegate : NSObject wxOSX_10_6_AND_LATER(<NSOpenSavePanelDelegate>)
|
||||
@interface OSPanelDelegate : NSObject wxOSX_10_6_AND_LATER(<NSOpenSavePanelDelegate>)
|
||||
{
|
||||
FileDialog* _dialog;
|
||||
BOOL _didActivate;
|
||||
}
|
||||
|
||||
- (FileDialog*) fileDialog;
|
||||
- (void) setFileDialog:(FileDialog*) dialog;
|
||||
|
||||
- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename;
|
||||
- (BOOL)panel:(id)sender validateURL:(NSURL *)url error:(NSError **)outError AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER;
|
||||
- (void)panel:(id)sender didChangeToDirectoryURL:(NSURL *)url AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER;
|
||||
- (void)panelSelectionDidChange:(id)sender AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OpenPanelDelegate
|
||||
@implementation OSPanelDelegate
|
||||
|
||||
- (id) init
|
||||
{
|
||||
self = [super init];
|
||||
_dialog = NULL;
|
||||
_didActivate = NO;
|
||||
return self;
|
||||
}
|
||||
|
||||
@ -111,83 +82,54 @@ bool HasAppKit_10_6()
|
||||
_dialog = dialog;
|
||||
}
|
||||
|
||||
- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
|
||||
- (BOOL)panel:(id)sender validateURL:(NSURL *)url error:(NSError **)outError AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
|
||||
{
|
||||
BOOL showObject = YES;
|
||||
|
||||
NSString* resolvedLink = [[NSFileManager defaultManager] pathContentOfSymbolicLinkAtPath:filename];
|
||||
if ( resolvedLink != nil )
|
||||
filename = resolvedLink;
|
||||
|
||||
NSDictionary* fileAttribs = [[NSFileManager defaultManager]
|
||||
fileAttributesAtPath:filename traverseLink:YES];
|
||||
if (fileAttribs)
|
||||
{
|
||||
// check for packages
|
||||
if ([NSFileTypeDirectory isEqualTo:[fileAttribs objectForKey:NSFileType]])
|
||||
{
|
||||
if ([[NSWorkspace sharedWorkspace] isFilePackageAtPath:filename] == NO)
|
||||
showObject = YES; // it's a folder, OK to show
|
||||
else
|
||||
{
|
||||
// it's a packaged directory, apply check
|
||||
wxCFStringRef filecf([filename retain]);
|
||||
showObject = _dialog->CheckFile(filecf.AsString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// the code above only solves links, not aliases, do this here:
|
||||
|
||||
NSString* resolvedAlias = nil;
|
||||
|
||||
CFURLRef url = CFURLCreateWithFileSystemPath (kCFAllocatorDefault,
|
||||
(CFStringRef)filename,
|
||||
kCFURLPOSIXPathStyle,
|
||||
NO);
|
||||
if (url != NULL)
|
||||
{
|
||||
FSRef fsRef;
|
||||
if (CFURLGetFSRef(url, &fsRef))
|
||||
{
|
||||
Boolean targetIsFolder, wasAliased;
|
||||
OSErr err = FSResolveAliasFile (&fsRef, true, &targetIsFolder, &wasAliased);
|
||||
|
||||
if ((err == noErr) && wasAliased)
|
||||
{
|
||||
CFURLRef resolvedUrl = CFURLCreateFromFSRef(kCFAllocatorDefault, &fsRef);
|
||||
if (resolvedUrl != NULL)
|
||||
{
|
||||
resolvedAlias = (NSString*) CFURLCopyFileSystemPath(resolvedUrl,
|
||||
kCFURLPOSIXPathStyle);
|
||||
CFRelease(resolvedUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
CFRelease(url);
|
||||
}
|
||||
if (_didActivate == NO)
|
||||
{
|
||||
_dialog->DoSendFileActivatedEvent( sender );
|
||||
_didActivate = YES;
|
||||
}
|
||||
|
||||
if (resolvedAlias != nil)
|
||||
{
|
||||
// recursive call
|
||||
[resolvedAlias autorelease];
|
||||
showObject = [self panel:sender shouldShowFilename:resolvedAlias];
|
||||
}
|
||||
else
|
||||
{
|
||||
wxCFStringRef filecf([filename retain]);
|
||||
showObject = _dialog->CheckFile(filecf.AsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return showObject;
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)panel:(id)sender didChangeToDirectoryURL:(NSURL *)url AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
|
||||
{
|
||||
wxString path = wxCFStringRef::AsStringWithNormalizationFormC( [url path] );
|
||||
|
||||
_dialog->DoSendFolderChangedEvent(sender, path);
|
||||
}
|
||||
|
||||
- (void)panelSelectionDidChange:(id)sender AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
|
||||
{
|
||||
_dialog->DoSendSelectionChangedEvent(sender);
|
||||
}
|
||||
@end
|
||||
|
||||
IMPLEMENT_CLASS(FileDialog, FileDialogBase)
|
||||
|
||||
FileDialog::FileDialog()
|
||||
: FileDialogBase()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
FileDialog::FileDialog(wxWindow *parent,
|
||||
const wxString& message,
|
||||
const wxString& defaultDir,
|
||||
const wxString& defaultFile,
|
||||
const wxString& wildCard,
|
||||
long style,
|
||||
const wxPoint& pos,
|
||||
const wxSize& sz,
|
||||
const wxString& name)
|
||||
: FileDialogBase()
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(parent,message,defaultDir,defaultFile,wildCard,style,pos,sz,name);
|
||||
}
|
||||
|
||||
void FileDialog::Init()
|
||||
{
|
||||
m_filterIndex = -1;
|
||||
@ -382,56 +324,17 @@ void FileDialog::ShowWindowModal()
|
||||
}
|
||||
}
|
||||
|
||||
// Create a panel with the file type drop down list
|
||||
// If extra controls need to be added (see FileDialog::SetExtraControlCreator), add
|
||||
// them to the panel as well
|
||||
// Returns the newly created wxPanel
|
||||
|
||||
wxWindow* FileDialog::CreateFilterPanel(wxWindow *extracontrol)
|
||||
{
|
||||
wxPanel *extrapanel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||
wxBoxSizer *verticalSizer = new wxBoxSizer(wxVERTICAL);
|
||||
extrapanel->SetSizer(verticalSizer);
|
||||
|
||||
// the file type control
|
||||
{
|
||||
wxBoxSizer *horizontalSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
verticalSizer->Add(horizontalSizer, 0, wxEXPAND, 0);
|
||||
wxStaticText *stattext = new wxStaticText( extrapanel, wxID_ANY, _("File type:") );
|
||||
horizontalSizer->Add(stattext, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
||||
m_filterChoice = new wxChoice(extrapanel, wxID_ANY);
|
||||
horizontalSizer->Add(m_filterChoice, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
||||
m_filterChoice->Append(m_filterNames);
|
||||
if( m_filterNames.GetCount() > 0)
|
||||
{
|
||||
if ( m_firstFileTypeFilter >= 0 )
|
||||
m_filterChoice->SetSelection(m_firstFileTypeFilter);
|
||||
}
|
||||
m_filterChoice->Connect(wxEVT_CHOICE, wxCommandEventHandler(FileDialog::OnFilterSelected), NULL, this);
|
||||
}
|
||||
|
||||
if(extracontrol)
|
||||
{
|
||||
wxBoxSizer *horizontalSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
verticalSizer->Add(horizontalSizer, 0, wxEXPAND, 0);
|
||||
|
||||
extracontrol->Reparent(extrapanel);
|
||||
horizontalSizer->Add(extracontrol);
|
||||
}
|
||||
|
||||
verticalSizer->Layout();
|
||||
verticalSizer->SetSizeHints(extrapanel);
|
||||
return extrapanel;
|
||||
}
|
||||
|
||||
void FileDialog::DoOnFilterSelected(int index)
|
||||
{
|
||||
NSArray* types = GetTypesFromExtension(m_filterExtensions[index],m_currentExtensions);
|
||||
NSSavePanel* panel = (NSSavePanel*) GetWXWindow();
|
||||
if ( m_delegate )
|
||||
[panel validateVisibleColumns];
|
||||
else
|
||||
[panel setAllowedFileTypes:types];
|
||||
[panel setAllowedFileTypes:types];
|
||||
|
||||
m_filterIndex = index;
|
||||
|
||||
wxFileCtrlEvent event( wxEVT_FILECTRL_FILTERCHANGED, this, GetId() );
|
||||
event.SetFilterIndex( m_filterIndex );
|
||||
GetEventHandler()->ProcessEvent( event );
|
||||
}
|
||||
|
||||
// An item has been selected in the file filter wxChoice:
|
||||
@ -440,21 +343,78 @@ void FileDialog::OnFilterSelected( wxCommandEvent &WXUNUSED(event) )
|
||||
DoOnFilterSelected( m_filterChoice->GetSelection() );
|
||||
}
|
||||
|
||||
bool FileDialog::CheckFile( const wxString& filename )
|
||||
void FileDialog::DoSendFileActivatedEvent(void* panel)
|
||||
{
|
||||
if ( m_currentExtensions.GetCount() == 0 )
|
||||
return true;
|
||||
|
||||
wxString ext = filename.AfterLast('.').Lower();
|
||||
|
||||
for ( size_t i = 0; i < m_currentExtensions.GetCount(); ++i )
|
||||
wxFileCtrlEvent event( wxEVT_FILECTRL_FILEACTIVATED, this, GetId() );
|
||||
|
||||
event.SetDirectory( m_dir );
|
||||
|
||||
if ( HasFlag( wxFD_SAVE ) )
|
||||
{
|
||||
if ( ext == m_currentExtensions[i] )
|
||||
return true;
|
||||
wxArrayString filenames;
|
||||
filenames.Add( m_fileName );
|
||||
event.SetFiles( filenames );
|
||||
}
|
||||
return false;
|
||||
else
|
||||
{
|
||||
event.SetFiles( m_fileNames );
|
||||
}
|
||||
|
||||
GetEventHandler()->ProcessEvent( event );
|
||||
}
|
||||
|
||||
void FileDialog::DoSendFolderChangedEvent(void* panel, const wxString & path)
|
||||
{
|
||||
m_dir = wxPathOnly( path );
|
||||
|
||||
wxFileCtrlEvent event( wxEVT_FILECTRL_FOLDERCHANGED, this, GetId() );
|
||||
|
||||
event.SetDirectory( m_dir );
|
||||
|
||||
GetEventHandler()->ProcessEvent( event );
|
||||
}
|
||||
|
||||
void FileDialog::DoSendSelectionChangedEvent(void* panel)
|
||||
{
|
||||
if ( HasFlag( wxFD_SAVE ) )
|
||||
{
|
||||
NSSavePanel* sPanel = (NSSavePanel*) panel;
|
||||
NSString* path = [[sPanel URL] path];
|
||||
|
||||
m_path = wxCFStringRef::AsStringWithNormalizationFormC( path );
|
||||
m_fileName = wxFileNameFromPath( m_path );
|
||||
m_dir = wxPathOnly( m_path );
|
||||
}
|
||||
else
|
||||
{
|
||||
NSOpenPanel* oPanel = (NSOpenPanel*) panel;
|
||||
m_paths.Clear();
|
||||
m_fileNames.Clear();
|
||||
|
||||
NSArray* urls = [oPanel URLs];
|
||||
for ( size_t i = 0 ; i < [urls count] ; ++ i )
|
||||
{
|
||||
NSString *path = [[urls objectAtIndex:i] path];
|
||||
wxString fnstr = wxCFStringRef::AsStringWithNormalizationFormC( path );
|
||||
m_paths.Add( fnstr );
|
||||
m_fileNames.Add( wxFileNameFromPath( fnstr ) );
|
||||
if ( i == 0 )
|
||||
{
|
||||
m_path = fnstr;
|
||||
m_fileName = wxFileNameFromPath( fnstr );
|
||||
m_dir = wxPathOnly( fnstr );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wxFileCtrlEvent event( wxEVT_FILECTRL_SELECTIONCHANGED, this, GetId() );
|
||||
|
||||
event.SetDirectory( m_dir );
|
||||
event.SetFiles( m_fileNames );
|
||||
|
||||
GetEventHandler()->ProcessEvent( event );
|
||||
}
|
||||
|
||||
void FileDialog::SetupExtraControls(WXWindow nativeWindow)
|
||||
{
|
||||
NSSavePanel* panel = (NSSavePanel*) nativeWindow;
|
||||
@ -463,38 +423,58 @@ void FileDialog::SetupExtraControls(WXWindow nativeWindow)
|
||||
// workaround for crashes we don't support those yet
|
||||
if ( [panel contentView] == nil || getenv("APP_SANDBOX_CONTAINER_ID") != NULL )
|
||||
return;
|
||||
|
||||
|
||||
OSPanelDelegate* del = [[OSPanelDelegate alloc]init];
|
||||
[del setFileDialog:this];
|
||||
[panel setDelegate:del];
|
||||
m_delegate = del;
|
||||
|
||||
wxNonOwnedWindow::Create( GetParent(), nativeWindow );
|
||||
wxWindow* extracontrol = NULL;
|
||||
if ( HasExtraControlCreator() )
|
||||
{
|
||||
CreateExtraControl();
|
||||
extracontrol = GetExtraControl();
|
||||
}
|
||||
|
||||
m_filterPanel = NULL;
|
||||
m_filterChoice = NULL;
|
||||
|
||||
NSView* accView = nil;
|
||||
|
||||
if ( m_useFileTypeFilter )
|
||||
if ( m_useFileTypeFilter || HasUserPaneCreator() )
|
||||
{
|
||||
m_filterPanel = CreateFilterPanel(extracontrol);
|
||||
accView = m_filterPanel->GetHandle();
|
||||
if( HasFlag(wxFD_OPEN) )
|
||||
wxBoxSizer *verticalSizer = new wxBoxSizer( wxVERTICAL );
|
||||
m_filterPanel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize );
|
||||
|
||||
if ( m_useFileTypeFilter )
|
||||
{
|
||||
if ( UMAGetSystemVersion() < 0x1060 || !HasAppKit_10_6() )
|
||||
wxBoxSizer *horizontalSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxStaticText *stattext = new wxStaticText( m_filterPanel, wxID_ANY, _("File type:") );
|
||||
horizontalSizer->Add( stattext, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
m_filterChoice = new wxChoice( m_filterPanel, wxID_ANY );
|
||||
m_filterChoice->Append( m_filterNames );
|
||||
if ( m_filterNames.GetCount() > 0 )
|
||||
{
|
||||
OpenPanelDelegate* del = [[OpenPanelDelegate alloc]init];
|
||||
[del setFileDialog:this];
|
||||
[panel setDelegate:del];
|
||||
m_delegate = del;
|
||||
if ( m_firstFileTypeFilter >= 0 )
|
||||
m_filterChoice->SetSelection( m_firstFileTypeFilter );
|
||||
}
|
||||
m_filterChoice->Connect( wxEVT_CHOICE, wxCommandEventHandler( FileDialog::OnFilterSelected ), NULL, this );
|
||||
|
||||
horizontalSizer->Add( m_filterChoice, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
verticalSizer->Add( horizontalSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_filterPanel = NULL;
|
||||
m_filterChoice = NULL;
|
||||
if ( extracontrol != nil )
|
||||
accView = extracontrol->GetHandle();
|
||||
|
||||
if ( HasUserPaneCreator() )
|
||||
{
|
||||
wxPanel *extrapanel = new wxPanel( m_filterPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize );
|
||||
CreateUserPane( extrapanel );
|
||||
|
||||
wxBoxSizer *horizontalSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
horizontalSizer->Add( extrapanel, 1, wxEXPAND, 5 );
|
||||
verticalSizer->Add( horizontalSizer, 1, wxEXPAND|wxALL, 5 );
|
||||
}
|
||||
|
||||
m_filterPanel->SetSizer( verticalSizer );
|
||||
m_filterPanel->Layout();
|
||||
verticalSizer->SetSizeHints( m_filterPanel );
|
||||
|
||||
accView = m_filterPanel->GetHandle();
|
||||
}
|
||||
|
||||
if ( accView != nil )
|
||||
@ -502,10 +482,6 @@ void FileDialog::SetupExtraControls(WXWindow nativeWindow)
|
||||
[accView removeFromSuperview];
|
||||
[panel setAccessoryView:accView];
|
||||
}
|
||||
else
|
||||
{
|
||||
[panel setAccessoryView:nil];
|
||||
}
|
||||
}
|
||||
|
||||
int FileDialog::ShowModal()
|
||||
@ -633,21 +609,11 @@ int FileDialog::ShowModal()
|
||||
[oPanel setMessage:cf.AsNSString()];
|
||||
[oPanel setAllowsMultipleSelection: (HasFlag(wxFD_MULTIPLE) ? YES : NO )];
|
||||
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
|
||||
if ( UMAGetSystemVersion() >= 0x1060 && HasAppKit_10_6() )
|
||||
{
|
||||
[oPanel setAllowedFileTypes: (m_delegate == nil ? types : nil)];
|
||||
if ( !m_dir.IsEmpty() )
|
||||
[oPanel setDirectoryURL:[NSURL fileURLWithPath:dir.AsNSString()
|
||||
isDirectory:YES]];
|
||||
returnCode = [oPanel runModal];
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
returnCode = [oPanel runModalForDirectory:m_dir.IsEmpty() ? nil : dir.AsNSString()
|
||||
file:file.AsNSString() types:(m_delegate == nil ? types : nil)];
|
||||
}
|
||||
[oPanel setAllowedFileTypes:types];
|
||||
if ( !m_dir.IsEmpty() )
|
||||
[oPanel setDirectoryURL:[NSURL fileURLWithPath:dir.AsNSString()
|
||||
isDirectory:YES]];
|
||||
returnCode = [oPanel runModal];
|
||||
|
||||
ModalFinishedCallback(oPanel, returnCode);
|
||||
}
|
||||
@ -660,9 +626,9 @@ void FileDialog::ModalFinishedCallback(void* panel, int returnCode)
|
||||
int result = wxID_CANCEL;
|
||||
if (HasFlag(wxFD_SAVE))
|
||||
{
|
||||
NSSavePanel* sPanel = (NSSavePanel*)panel;
|
||||
if (returnCode == NSOKButton )
|
||||
{
|
||||
NSSavePanel* sPanel = (NSSavePanel*)panel;
|
||||
result = wxID_OK;
|
||||
|
||||
m_path = wxCFStringRef::AsStringWithNormalizationFormC([sPanel filename]);
|
||||
@ -673,6 +639,7 @@ void FileDialog::ModalFinishedCallback(void* panel, int returnCode)
|
||||
m_filterIndex = m_filterChoice->GetSelection();
|
||||
}
|
||||
}
|
||||
[sPanel setDelegate:nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -695,13 +662,15 @@ void FileDialog::ModalFinishedCallback(void* panel, int returnCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( m_delegate )
|
||||
{
|
||||
[oPanel setDelegate:nil];
|
||||
[m_delegate release];
|
||||
m_delegate = nil;
|
||||
}
|
||||
[oPanel setDelegate:nil];
|
||||
}
|
||||
|
||||
if ( m_delegate )
|
||||
{
|
||||
[m_delegate release];
|
||||
m_delegate = nil;
|
||||
}
|
||||
|
||||
SetReturnCode(result);
|
||||
|
||||
if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include <wx/progdlg.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/slider.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/textctrl.h>
|
||||
@ -235,6 +236,24 @@ bool ExportPlugin::DisplayOptions(wxWindow * WXUNUSED(parent), int WXUNUSED(form
|
||||
return false;
|
||||
}
|
||||
|
||||
wxWindow *ExportPlugin::OptionsCreate(wxWindow *parent, int format)
|
||||
{
|
||||
wxPanel *p = new wxPanel(parent, wxID_ANY);
|
||||
ShuttleGui S(p, eIsCreatingFromPrefs);
|
||||
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
S.StartHorizontalLay(wxCENTER, 0);
|
||||
{
|
||||
S.Prop(1).AddTitle(_("No format specific options"));
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
int ExportPlugin::Export(AudacityProject *project,
|
||||
int channels,
|
||||
wxString fName,
|
||||
@ -280,13 +299,20 @@ Mixer* ExportPlugin::CreateMixer(int numInputTracks, WaveTrack **inputTracks,
|
||||
outRate, outFormat,
|
||||
highQuality, mixerSpec);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Export
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(Exporter, wxEvtHandler)
|
||||
EVT_FILECTRL_FILTERCHANGED(wxID_ANY, Exporter::OnFilterChanged)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
Exporter::Exporter()
|
||||
{
|
||||
mActivePage = NULL;
|
||||
mMixerSpec = NULL;
|
||||
|
||||
SetFileDialogTitle( _("Export Audio") );
|
||||
|
||||
RegisterPlugin(New_ExportPCM());
|
||||
@ -552,7 +578,9 @@ bool Exporter::GetFilename()
|
||||
maskString,
|
||||
wxFD_SAVE | wxRESIZE_BORDER | FD_NO_ADD_EXTENSION);
|
||||
mDialog = &fd;
|
||||
mDialog->PushEventHandler(this);
|
||||
|
||||
fd.SetUserPaneCreator(CreateUserPaneCallback, (wxUIntPtr) this);
|
||||
fd.SetFilterIndex(mFilterIndex);
|
||||
|
||||
fd.EnableButton(_("&Options..."), ExportCallback, this);
|
||||
@ -843,6 +871,83 @@ bool Exporter::ExportTracks()
|
||||
return (success == eProgressSuccess || success == eProgressStopped);
|
||||
}
|
||||
|
||||
void Exporter::CreateUserPaneCallback(wxWindow *parent, wxUIntPtr userdata)
|
||||
{
|
||||
Exporter *self = (Exporter *) userdata;
|
||||
if (self)
|
||||
{
|
||||
self->CreateUserPane(parent);
|
||||
}
|
||||
}
|
||||
|
||||
void Exporter::CreateUserPane(wxWindow *parent)
|
||||
{
|
||||
mUserPaneParent = parent;
|
||||
|
||||
ShuttleGui S(parent, eIsCreatingFromPrefs);
|
||||
|
||||
wxSize maxsz;
|
||||
wxSize pageMax;
|
||||
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND);
|
||||
{
|
||||
S.StartStatic(_("Format Options"), 1);
|
||||
{
|
||||
for (size_t i = 0; i < mPlugins.GetCount(); i++)
|
||||
{
|
||||
for (int j = 0; j < mPlugins[i]->GetFormatCount(); j++)
|
||||
{
|
||||
wxWindow *page = mPlugins[i]->OptionsCreate(parent, j);
|
||||
mPages.Add(page);
|
||||
S.Prop(1).AddWindow(page, wxEXPAND|wxALL);
|
||||
|
||||
parent->Layout();
|
||||
wxSize sz = parent->GetBestSize();
|
||||
maxsz.x = wxMax(maxsz.x, sz.x);
|
||||
maxsz.y = wxMax(maxsz.y, sz.y);
|
||||
|
||||
sz = page->GetBestSize();
|
||||
pageMax.x = wxMax(pageMax.x, sz.x);
|
||||
pageMax.y = wxMax(pageMax.y, sz.y);
|
||||
|
||||
S.GetSizer()->Hide(page);
|
||||
}
|
||||
}
|
||||
}
|
||||
S.EndStatic();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
parent->SetMinSize(maxsz);
|
||||
parent->SetSize(maxsz);
|
||||
|
||||
for (size_t i = 0, cnt = mPages.GetCount(); i < cnt; i++)
|
||||
{
|
||||
mPages[i]->SetSize(pageMax);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void Exporter::OnFilterChanged(wxFileCtrlEvent & evt)
|
||||
{
|
||||
int index = evt.GetFilterIndex();
|
||||
|
||||
if (mActivePage)
|
||||
{
|
||||
mActivePage->Hide();
|
||||
mActivePage = NULL;
|
||||
}
|
||||
|
||||
mActivePage = mPages[index];
|
||||
mActivePage->Show();
|
||||
mUserPaneParent->Layout();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// ExportMixerPanel
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -18,6 +18,8 @@
|
||||
#include "../Tags.h"
|
||||
#include "../SampleFormat.h"
|
||||
|
||||
#include "FileDialog.h"
|
||||
|
||||
class wxMemoryDC;
|
||||
class wxStaticText;
|
||||
class AudacityProject;
|
||||
@ -82,6 +84,8 @@ public:
|
||||
|
||||
virtual bool DisplayOptions(wxWindow *parent, int format = 0);
|
||||
|
||||
virtual wxWindow *OptionsCreate(wxWindow *parent, int format);
|
||||
|
||||
virtual bool CheckFileName(wxFileName &filename, int format = 0);
|
||||
|
||||
/** \brief called to export audio into a file.
|
||||
@ -130,11 +134,12 @@ private:
|
||||
};
|
||||
|
||||
WX_DECLARE_USER_EXPORTED_OBJARRAY(ExportPlugin *, ExportPluginArray, AUDACITY_DLL_API);
|
||||
WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxWindow *, WindowPtrArray, class AUDACITY_DLL_API);
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Exporter
|
||||
//----------------------------------------------------------------------------
|
||||
class AUDACITY_DLL_API Exporter
|
||||
class AUDACITY_DLL_API Exporter : public wxEvtHandler
|
||||
{
|
||||
public:
|
||||
|
||||
@ -163,6 +168,10 @@ private:
|
||||
bool CheckMix();
|
||||
bool ExportTracks();
|
||||
|
||||
static void CreateUserPaneCallback(wxWindow *parent, wxUIntPtr userdata);
|
||||
void CreateUserPane(wxWindow *parent);
|
||||
void OnFilterChanged(wxFileCtrlEvent & evt);
|
||||
|
||||
private:
|
||||
FileDialog *mDialog;
|
||||
wxString mFileDialogTitle;
|
||||
@ -185,6 +194,12 @@ private:
|
||||
int mNumMono;
|
||||
int mChannels;
|
||||
bool mSelectedOnly;
|
||||
|
||||
wxWindow *mUserPaneParent;
|
||||
WindowPtrArray mPages;
|
||||
wxWindow *mActivePage;
|
||||
|
||||
DECLARE_EVENT_TABLE();
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <wx/button.h>
|
||||
#include <wx/combobox.h>
|
||||
#include <wx/log.h>
|
||||
#include <wx/panel.h>
|
||||
#include <wx/process.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/textctrl.h>
|
||||
@ -35,13 +36,13 @@
|
||||
// ExportCLOptions
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
class ExportCLOptions : public wxDialog
|
||||
class ExportCLOptions : public wxPanel
|
||||
{
|
||||
public:
|
||||
ExportCLOptions(wxWindow *parent, int format);
|
||||
virtual ~ExportCLOptions();
|
||||
|
||||
ExportCLOptions(wxWindow *parent);
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent & event);
|
||||
|
||||
void OnBrowse(wxCommandEvent & event);
|
||||
|
||||
@ -54,19 +55,15 @@ private:
|
||||
|
||||
#define ID_BROWSE 5000
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportCLOptions, wxDialog)
|
||||
EVT_BUTTON(wxID_OK, ExportCLOptions::OnOK)
|
||||
BEGIN_EVENT_TABLE(ExportCLOptions, wxPanel)
|
||||
EVT_BUTTON(ID_BROWSE, ExportCLOptions::OnBrowse)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
///
|
||||
///
|
||||
ExportCLOptions::ExportCLOptions(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify Command Line Encoder")))
|
||||
ExportCLOptions::ExportCLOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
|
||||
mHistory.Load(*gPrefs, wxT("/FileFormats/ExternalProgramHistory"));
|
||||
|
||||
if (mHistory.GetCount() == 0) {
|
||||
@ -81,6 +78,22 @@ ExportCLOptions::ExportCLOptions(wxWindow *parent)
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
PopulateOrExchange(S);
|
||||
|
||||
parent->Layout();
|
||||
}
|
||||
|
||||
ExportCLOptions::~ExportCLOptions()
|
||||
{
|
||||
wxString cmd = mCmd->GetValue();
|
||||
|
||||
gPrefs->Write(wxT("/FileFormats/ExternalProgramExportCommand"), cmd);
|
||||
gPrefs->Flush();
|
||||
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
mHistory.AddFileToHistory(cmd, false);
|
||||
mHistory.Save(*gPrefs, wxT("/FileFormats/ExternalProgramHistory"));
|
||||
}
|
||||
|
||||
///
|
||||
@ -95,10 +108,11 @@ void ExportCLOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
}
|
||||
cmd = cmds[0];
|
||||
|
||||
S.StartHorizontalLay(wxEXPAND, 0);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartStatic(_("Command Line Export Setup"), true);
|
||||
S.StartHorizontalLay(wxEXPAND);
|
||||
{
|
||||
S.SetSizerProportion(1);
|
||||
S.StartMultiColumn(3, wxEXPAND);
|
||||
{
|
||||
S.SetStretchyCol(1);
|
||||
@ -113,41 +127,15 @@ void ExportCLOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
false);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
|
||||
S.AddFixedText(_("Data will be piped to standard in. \"%f\" uses the file name in the export window."));
|
||||
}
|
||||
S.EndStatic();
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddTitle(_("Data will be piped to standard in. \"%f\" uses the file name in the export window."));
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
S.EndVerticalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportCLOptions::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
wxString cmd = mCmd->GetValue();
|
||||
|
||||
gPrefs->Write(wxT("/FileFormats/ExternalProgramExportCommand"), cmd);
|
||||
gPrefs->Flush();
|
||||
|
||||
PopulateOrExchange(S);
|
||||
|
||||
mHistory.AddFileToHistory(cmd, false);
|
||||
mHistory.Save(*gPrefs, wxT("/FileFormats/ExternalProgramHistory"));
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
// Layout();
|
||||
// Fit();
|
||||
}
|
||||
|
||||
///
|
||||
@ -275,8 +263,8 @@ public:
|
||||
void Destroy();
|
||||
|
||||
// Required
|
||||
wxWindow *OptionsCreate(wxWindow *parent, int format);
|
||||
|
||||
bool DisplayOptions(wxWindow *parent, int format = 0);
|
||||
int Export(AudacityProject *project,
|
||||
int channels,
|
||||
wxString fName,
|
||||
@ -529,13 +517,9 @@ int ExportCL::Export(AudacityProject *project,
|
||||
return updateResult;
|
||||
}
|
||||
|
||||
bool ExportCL::DisplayOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
wxWindow *ExportCL::OptionsCreate(wxWindow *parent, int format)
|
||||
{
|
||||
ExportCLOptions od(parent);
|
||||
|
||||
od.ShowModal();
|
||||
|
||||
return true;
|
||||
return new ExportCLOptions(parent, format);
|
||||
}
|
||||
|
||||
ExportPlugin *New_ExportCL()
|
||||
|
@ -57,13 +57,16 @@ function.
|
||||
|
||||
extern FFmpegLibs *FFmpegLibsInst;
|
||||
|
||||
static bool CheckFFmpegPresence()
|
||||
static bool CheckFFmpegPresence(bool quiet = false)
|
||||
{
|
||||
bool result = true;
|
||||
PickFFmpegLibs();
|
||||
if (!FFmpegLibsInst->ValidLibsLoaded())
|
||||
{
|
||||
wxMessageBox(_("Properly configured FFmpeg is required to proceed.\nYou can configure it at Preferences > Libraries."));
|
||||
if (!quiet)
|
||||
{
|
||||
wxMessageBox(_("Properly configured FFmpeg is required to proceed.\nYou can configure it at Preferences > Libraries."));
|
||||
}
|
||||
result = false;
|
||||
}
|
||||
DropFFmpegLibs();
|
||||
@ -117,9 +120,9 @@ public:
|
||||
/// Flushes audio encoder
|
||||
bool Finalize();
|
||||
|
||||
/// Shows options dialog
|
||||
/// Creates options panel
|
||||
///\param format - index of export type
|
||||
bool DisplayOptions(wxWindow *parent, int format = 0);
|
||||
wxWindow *OptionsCreate(wxWindow *parent, int format);
|
||||
|
||||
/// Check whether or not current project sample rate is compatible with the export codec
|
||||
bool CheckSampleRate(int rate, int lowrate, int highrate, const int *sampRates);
|
||||
@ -975,45 +978,41 @@ int ExportFFmpeg::AskResample(int bitrate, int rate, int lowrate, int highrate,
|
||||
return wxAtoi(choice->GetStringSelection());
|
||||
}
|
||||
|
||||
|
||||
bool ExportFFmpeg::DisplayOptions(wxWindow *parent, int format)
|
||||
wxWindow *ExportFFmpeg::OptionsCreate(wxWindow *parent, int format)
|
||||
{
|
||||
if (!CheckFFmpegPresence())
|
||||
return false;
|
||||
if (!CheckFFmpegPresence(true)) {
|
||||
return ExportPlugin::OptionsCreate(parent, format);
|
||||
}
|
||||
|
||||
// subformat index may not correspond directly to fmts[] index, convert it
|
||||
mSubFormat = AdjustFormatIndex(format);
|
||||
if (mSubFormat == FMT_M4A)
|
||||
{
|
||||
ExportFFmpegAACOptions od(parent);
|
||||
od.ShowModal();
|
||||
return true;
|
||||
return new ExportFFmpegAACOptions(parent, format);
|
||||
}
|
||||
else if (mSubFormat == FMT_AC3)
|
||||
{
|
||||
ExportFFmpegAC3Options od(parent);
|
||||
od.ShowModal();
|
||||
return true;
|
||||
return new ExportFFmpegAC3Options(parent, format);
|
||||
}
|
||||
else if (mSubFormat == FMT_AMRNB)
|
||||
{
|
||||
ExportFFmpegAMRNBOptions od(parent);
|
||||
od.ShowModal();
|
||||
return true;
|
||||
return new ExportFFmpegAMRNBOptions(parent, format);
|
||||
}
|
||||
else if (mSubFormat == FMT_WMA2)
|
||||
{
|
||||
ExportFFmpegWMAOptions od(parent);
|
||||
od.ShowModal();
|
||||
return true;
|
||||
return new ExportFFmpegWMAOptions(parent, format);
|
||||
}
|
||||
else if (mSubFormat == FMT_OTHER)
|
||||
{
|
||||
return ExportPlugin::OptionsCreate(parent, format);
|
||||
#if 0
|
||||
ExportFFmpegOptions od(parent);
|
||||
od.ShowModal();
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
return false;
|
||||
return ExportPlugin::OptionsCreate(parent, format);
|
||||
}
|
||||
|
||||
ExportPlugin *New_ExportFFmpeg()
|
||||
|
@ -139,28 +139,27 @@ static const wxChar *FFmpegExportCtrlIDNames[] = {
|
||||
// ExportFFmpegAC3Options Class
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportFFmpegAC3Options, wxDialog)
|
||||
EVT_BUTTON(wxID_OK,ExportFFmpegAC3Options::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
// This initialises content for the static const member variables defined in
|
||||
// ExportFFmpegDialogs.h (note no static keyword - important!)
|
||||
const int ExportFFmpegAC3Options::iAC3BitRates[] = { 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 384000, 448000, 512000, 576000, 640000 };
|
||||
const int ExportFFmpegAC3Options::iAC3SampleRates[] = { 32000, 44100, 48000, 0 };
|
||||
|
||||
ExportFFmpegAC3Options::ExportFFmpegAC3Options(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify AC3 Options")))
|
||||
ExportFFmpegAC3Options::ExportFFmpegAC3Options(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
for (unsigned int i=0; i < (sizeof(iAC3BitRates)/sizeof(int)); i++)
|
||||
{
|
||||
mBitRateNames.Add(wxString::Format(_("%i kbps"),iAC3BitRates[i]/1000));
|
||||
mBitRateLabels.Add(iAC3BitRates[i]);
|
||||
}
|
||||
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
ExportFFmpegAC3Options::~ExportFFmpegAC3Options()
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
@ -168,58 +167,36 @@ ExportFFmpegAC3Options::ExportFFmpegAC3Options(wxWindow *parent)
|
||||
///
|
||||
void ExportFFmpegAC3Options::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND, 0);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartStatic(_("AC3 Export Setup"), 0);
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
S.StartTwoColumn();
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.TieChoice(_("Bit Rate:"), wxT("/FileFormats/AC3BitRate"),
|
||||
160000, mBitRateNames, mBitRateLabels);
|
||||
}
|
||||
S.EndTwoColumn();
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportFFmpegAC3Options::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
S.EndVerticalLay();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// ExportFFmpegAACOptions Class
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportFFmpegAACOptions, wxDialog)
|
||||
EVT_BUTTON(wxID_OK,ExportFFmpegAACOptions::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
ExportFFmpegAACOptions::ExportFFmpegAACOptions(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify AAC Options")))
|
||||
ExportFFmpegAACOptions::ExportFFmpegAACOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
ExportFFmpegAACOptions::~ExportFFmpegAACOptions()
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
@ -227,65 +204,48 @@ ExportFFmpegAACOptions::ExportFFmpegAACOptions(wxWindow *parent)
|
||||
///
|
||||
void ExportFFmpegAACOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartStatic(_("AAC Export Setup"), 1);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartMultiColumn(2, wxEXPAND);
|
||||
S.StartHorizontalLay(wxEXPAND);
|
||||
{
|
||||
S.SetStretchyCol(1);
|
||||
S.TieSlider(_("Quality:"),wxT("/FileFormats/AACQuality"),100,500,10);
|
||||
S.SetSizerProportion(1);
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.SetStretchyCol(1);
|
||||
S.Prop(1).TieSlider(_("Quality:"),wxT("/FileFormats/AACQuality"),100,500,10);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndStatic();
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
S.EndVerticalLay();
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportFFmpegAACOptions::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// ExportFFmpegAMRNBOptions Class
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportFFmpegAMRNBOptions, wxDialog)
|
||||
EVT_BUTTON(wxID_OK,ExportFFmpegAMRNBOptions::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
/// Bit Rates supported by libAMR-NB encoder
|
||||
/// Sample Rate is always 8 kHz
|
||||
int ExportFFmpegAMRNBOptions::iAMRNBBitRate[] =
|
||||
{ 4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200 };
|
||||
|
||||
ExportFFmpegAMRNBOptions::ExportFFmpegAMRNBOptions(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify AMR-NB Options")))
|
||||
ExportFFmpegAMRNBOptions::ExportFFmpegAMRNBOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
for (unsigned int i=0; i < (sizeof(iAMRNBBitRate)/sizeof(int)); i++)
|
||||
{
|
||||
mBitRateNames.Add(wxString::Format(_("%.2f kbps"),(float)iAMRNBBitRate[i]/1000));
|
||||
mBitRateLabels.Add(iAMRNBBitRate[i]);
|
||||
}
|
||||
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
ExportFFmpegAMRNBOptions::~ExportFFmpegAMRNBOptions()
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
@ -293,51 +253,26 @@ ExportFFmpegAMRNBOptions::ExportFFmpegAMRNBOptions(wxWindow *parent)
|
||||
///
|
||||
void ExportFFmpegAMRNBOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND, 0);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartStatic(_("AMR-NB Export Setup"), 0);
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
S.StartTwoColumn();
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.TieChoice(_("Bit Rate:"), wxT("/FileFormats/AMRNBBitRate"),
|
||||
12200, mBitRateNames, mBitRateLabels);
|
||||
}
|
||||
S.EndTwoColumn();
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportFFmpegAMRNBOptions::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
S.EndVerticalLay();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// ExportFFmpegWMAOptions Class
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportFFmpegWMAOptions, wxDialog)
|
||||
EVT_BUTTON(wxID_OK,ExportFFmpegWMAOptions::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
const int ExportFFmpegWMAOptions::iWMASampleRates[] =
|
||||
{ 8000, 11025, 16000, 22050, 44100, 0};
|
||||
|
||||
@ -345,20 +280,22 @@ const int ExportFFmpegWMAOptions::iWMASampleRates[] =
|
||||
const int ExportFFmpegWMAOptions::iWMABitRate[] =
|
||||
{ 24000, 32000, 40000, 48000, 64000, 80000, 96000, 128000, 160000, 192000, 256000, 320000 };
|
||||
|
||||
|
||||
ExportFFmpegWMAOptions::ExportFFmpegWMAOptions(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify WMA Options")))
|
||||
ExportFFmpegWMAOptions::ExportFFmpegWMAOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
for (unsigned int i=0; i < (sizeof(iWMABitRate)/sizeof(int)); i++)
|
||||
{
|
||||
mBitRateNames.Add(wxString::Format(wxT("%i kbps"),iWMABitRate[i]/1000));
|
||||
mBitRateLabels.Add(iWMABitRate[i]);
|
||||
}
|
||||
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
ExportFFmpegWMAOptions::~ExportFFmpegWMAOptions()
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
@ -366,41 +303,20 @@ ExportFFmpegWMAOptions::ExportFFmpegWMAOptions(wxWindow *parent)
|
||||
///
|
||||
void ExportFFmpegWMAOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND, 0);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartStatic(_("WMA Export Setup"), 0);
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
S.StartTwoColumn();
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.TieChoice(_("Bit Rate:"), wxT("/FileFormats/WMABitRate"),
|
||||
96000, mBitRateNames, mBitRateLabels);
|
||||
}
|
||||
S.EndTwoColumn();
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportFFmpegWMAOptions::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
S.EndVerticalLay();
|
||||
}
|
||||
|
||||
FFmpegPreset::FFmpegPreset(wxString &name)
|
||||
|
@ -57,13 +57,13 @@ struct CompatibilityEntry
|
||||
|
||||
|
||||
/// AC3 export options dialog
|
||||
class ExportFFmpegAC3Options : public wxDialog
|
||||
class ExportFFmpegAC3Options : public wxPanel
|
||||
{
|
||||
public:
|
||||
|
||||
ExportFFmpegAC3Options(wxWindow *parent);
|
||||
ExportFFmpegAC3Options(wxWindow *parent, int format);
|
||||
virtual ~ExportFFmpegAC3Options();
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
/// Bit Rates supported by AC3 encoder
|
||||
static const int iAC3BitRates[];
|
||||
/// Sample Rates supported by AC3 encoder (must end with zero-element)
|
||||
@ -76,35 +76,29 @@ private:
|
||||
wxArrayInt mBitRateLabels;
|
||||
|
||||
wxChoice *mBitRateChoice;
|
||||
wxButton *mOk;
|
||||
int mBitRateFromChoice;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
class ExportFFmpegAACOptions : public wxDialog
|
||||
class ExportFFmpegAACOptions : public wxPanel
|
||||
{
|
||||
public:
|
||||
|
||||
ExportFFmpegAACOptions(wxWindow *parent);
|
||||
ExportFFmpegAACOptions(wxWindow *parent, int format);
|
||||
virtual ~ExportFFmpegAACOptions();
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
|
||||
wxSpinCtrl *mQualitySpin;
|
||||
wxButton *mOk;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
class ExportFFmpegAMRNBOptions : public wxDialog
|
||||
class ExportFFmpegAMRNBOptions : public wxPanel
|
||||
{
|
||||
public:
|
||||
|
||||
ExportFFmpegAMRNBOptions(wxWindow *parent);
|
||||
ExportFFmpegAMRNBOptions(wxWindow *parent, int format);
|
||||
virtual ~ExportFFmpegAMRNBOptions();
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
|
||||
static int iAMRNBBitRate[];
|
||||
|
||||
@ -114,19 +108,16 @@ private:
|
||||
wxArrayInt mBitRateLabels;
|
||||
|
||||
wxChoice *mBitRateChoice;
|
||||
wxButton *mOk;
|
||||
int mBitRateFromChoice;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
class ExportFFmpegWMAOptions : public wxDialog
|
||||
class ExportFFmpegWMAOptions : public wxPanel
|
||||
{
|
||||
public:
|
||||
|
||||
ExportFFmpegWMAOptions(wxWindow *parent);
|
||||
ExportFFmpegWMAOptions(wxWindow *parent, int format);
|
||||
~ExportFFmpegWMAOptions();
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
|
||||
static const int iWMASampleRates[];
|
||||
static const int iWMABitRate[];
|
||||
@ -137,10 +128,7 @@ private:
|
||||
wxArrayInt mBitRateLabels;
|
||||
|
||||
wxChoice *mBitRateChoice;
|
||||
wxButton *mOk;
|
||||
int mBitRateFromChoice;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
/// Entry for the Applicability table
|
||||
|
@ -44,32 +44,20 @@ and libvorbis examples, Monty <monty@xiph.org>
|
||||
// ExportFLACOptions Class
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
class ExportFLACOptions : public wxDialog
|
||||
class ExportFLACOptions : public wxPanel
|
||||
{
|
||||
public:
|
||||
|
||||
ExportFLACOptions(wxWindow *parent);
|
||||
ExportFLACOptions(wxWindow *parent, int format);
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportFLACOptions, wxDialog)
|
||||
EVT_BUTTON(wxID_OK, ExportFLACOptions::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
///
|
||||
///
|
||||
ExportFLACOptions::ExportFLACOptions(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify FLAC Options")))
|
||||
ExportFLACOptions::ExportFLACOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
@ -92,41 +80,22 @@ void ExportFLACOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
flacBitDepthLabels.Add(wxT("16")); flacBitDepthNames.Add(_("16 bit"));
|
||||
flacBitDepthLabels.Add(wxT("24")); flacBitDepthNames.Add(_("24 bit"));
|
||||
|
||||
S.StartHorizontalLay(wxEXPAND, 0);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartStatic(_("FLAC Export Setup"), 0);
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
S.StartTwoColumn();
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.TieChoice(_("Level:"), wxT("/FileFormats/FLACLevel"),
|
||||
wxT("5"), flacLevelNames, flacLevelLabels);
|
||||
S.TieChoice(_("Bit depth:"), wxT("/FileFormats/FLACBitDepth"),
|
||||
wxT("16"), flacBitDepthNames, flacBitDepthLabels);
|
||||
}
|
||||
S.EndTwoColumn();
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportFLACOptions::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
EndModal(wxID_OK);
|
||||
S.EndVerticalLay();
|
||||
|
||||
return;
|
||||
}
|
||||
@ -178,7 +147,7 @@ public:
|
||||
|
||||
// Required
|
||||
|
||||
bool DisplayOptions(wxWindow *parent, int format = 0);
|
||||
wxWindow *OptionsCreate(wxWindow *parent, int format);
|
||||
int Export(AudacityProject *project,
|
||||
int channels,
|
||||
wxString fName,
|
||||
@ -364,13 +333,9 @@ int ExportFLAC::Export(AudacityProject *project,
|
||||
return updateResult;
|
||||
}
|
||||
|
||||
bool ExportFLAC::DisplayOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
wxWindow *ExportFLAC::OptionsCreate(wxWindow *parent, int format)
|
||||
{
|
||||
ExportFLACOptions od(parent);
|
||||
|
||||
od.ShowModal();
|
||||
|
||||
return true;
|
||||
return new ExportFLACOptions(parent, format);
|
||||
}
|
||||
|
||||
// LL: There's a bug in libflac++ 1.1.2 that prevents us from using
|
||||
|
@ -81,42 +81,30 @@ static int iBitrates[] = {
|
||||
192, 224, 256, 320, 384
|
||||
};
|
||||
|
||||
class ExportMP2Options : public wxDialog
|
||||
class ExportMP2Options : public wxPanel
|
||||
{
|
||||
public:
|
||||
ExportMP2Options(wxWindow *parent, int format);
|
||||
|
||||
///
|
||||
///
|
||||
ExportMP2Options(wxWindow *parent);
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
wxArrayString mBitRateNames;
|
||||
wxArrayInt mBitRateLabels;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportMP2Options, wxDialog)
|
||||
EVT_BUTTON(wxID_OK, ExportMP2Options::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
///
|
||||
///
|
||||
ExportMP2Options::ExportMP2Options(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify MP2 Options")))
|
||||
ExportMP2Options::ExportMP2Options(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
for (unsigned int i=0; i < (sizeof(iBitrates)/sizeof(int)); i++)
|
||||
{
|
||||
mBitRateNames.Add(wxString::Format(_("%i kbps"),iBitrates[i]));
|
||||
mBitRateLabels.Add(iBitrates[i]);
|
||||
}
|
||||
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
@ -124,41 +112,20 @@ ExportMP2Options::ExportMP2Options(wxWindow *parent)
|
||||
///
|
||||
void ExportMP2Options::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND, 0);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartStatic(_("MP2 Export Setup"), 0);
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
S.StartTwoColumn();
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.TieChoice(_("Bit Rate:"), wxT("/FileFormats/MP2Bitrate"),
|
||||
160, mBitRateNames, mBitRateLabels);
|
||||
}
|
||||
S.EndTwoColumn();
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportMP2Options::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
S.EndVerticalLay();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@ -174,7 +141,7 @@ public:
|
||||
|
||||
// Required
|
||||
|
||||
bool DisplayOptions(wxWindow *parent, int format = 0);
|
||||
wxWindow *OptionsCreate(wxWindow *parent, int format);
|
||||
int Export(AudacityProject *project,
|
||||
int channels,
|
||||
wxString fName,
|
||||
@ -333,13 +300,9 @@ int ExportMP2::Export(AudacityProject *project,
|
||||
return updateResult;
|
||||
}
|
||||
|
||||
bool ExportMP2::DisplayOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
wxWindow *ExportMP2::OptionsCreate(wxWindow *parent, int format)
|
||||
{
|
||||
ExportMP2Options od(parent);
|
||||
|
||||
od.ShowModal();
|
||||
|
||||
return true;
|
||||
return new ExportMP2Options(parent, format);
|
||||
}
|
||||
|
||||
// returns buffer len; caller frees
|
||||
|
@ -257,13 +257,14 @@ static void InitMP3_Statics()
|
||||
}
|
||||
}
|
||||
|
||||
class ExportMP3Options : public wxDialog
|
||||
class ExportMP3Options : public wxPanel
|
||||
{
|
||||
public:
|
||||
|
||||
ExportMP3Options(wxWindow *parent);
|
||||
ExportMP3Options(wxWindow *parent, int format);
|
||||
virtual ~ExportMP3Options();
|
||||
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
void OnSET(wxCommandEvent& evt);
|
||||
void OnVBR(wxCommandEvent& evt);
|
||||
void OnABR(wxCommandEvent& evt);
|
||||
@ -294,23 +295,19 @@ private:
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportMP3Options, wxDialog)
|
||||
BEGIN_EVENT_TABLE(ExportMP3Options, wxPanel)
|
||||
EVT_RADIOBUTTON(ID_SET, ExportMP3Options::OnSET)
|
||||
EVT_RADIOBUTTON(ID_VBR, ExportMP3Options::OnVBR)
|
||||
EVT_RADIOBUTTON(ID_ABR, ExportMP3Options::OnABR)
|
||||
EVT_RADIOBUTTON(ID_CBR, ExportMP3Options::OnCBR)
|
||||
EVT_CHOICE(wxID_ANY, ExportMP3Options::OnQuality)
|
||||
EVT_BUTTON(wxID_OK, ExportMP3Options::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
///
|
||||
///
|
||||
ExportMP3Options::ExportMP3Options(wxWindow *parent)
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify MP3 Options")))
|
||||
ExportMP3Options::ExportMP3Options(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
|
||||
InitMP3_Statics();
|
||||
|
||||
mSetRate = gPrefs->Read(wxT("/FileFormats/MP3SetRate"), PRESET_STANDARD);
|
||||
@ -319,19 +316,30 @@ ExportMP3Options::ExportMP3Options(wxWindow *parent)
|
||||
mCbrRate = gPrefs->Read(wxT("/FileFormats/MP3CbrRate"), 128);
|
||||
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
ExportMP3Options::~ExportMP3Options()
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
gPrefs->Write(wxT("/FileFormats/MP3SetRate"), mSetRate);
|
||||
gPrefs->Write(wxT("/FileFormats/MP3VbrRate"), mVbrRate);
|
||||
gPrefs->Write(wxT("/FileFormats/MP3AbrRate"), mAbrRate);
|
||||
gPrefs->Write(wxT("/FileFormats/MP3CbrRate"), mCbrRate);
|
||||
gPrefs->Flush();
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportMP3Options::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND, 0);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartStatic(_("MP3 Export Setup"), 0);
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
S.StartMultiColumn(2, wxEXPAND);
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.SetStretchyCol(1);
|
||||
S.StartTwoColumn();
|
||||
@ -349,12 +357,12 @@ void ExportMP3Options::PopulateOrExchange(ShuttleGui & S)
|
||||
S.EndRadioButtonGroup();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
|
||||
CHOICES *choices;
|
||||
int cnt;
|
||||
bool enable;
|
||||
int defrate;
|
||||
|
||||
|
||||
if (mSET->GetValue()) {
|
||||
choices = setRates;
|
||||
cnt = WXSIZEOF(setRates);
|
||||
@ -380,20 +388,20 @@ void ExportMP3Options::PopulateOrExchange(ShuttleGui & S)
|
||||
enable = false;
|
||||
defrate = mCbrRate;
|
||||
}
|
||||
|
||||
|
||||
mRate = S.Id(ID_QUALITY).TieChoice(_("Quality"),
|
||||
wxT("/FileFormats/MP3Bitrate"),
|
||||
defrate,
|
||||
GetNames(choices, cnt),
|
||||
GetLabels(choices, cnt));
|
||||
|
||||
|
||||
mMode = S.TieChoice(_("Variable Speed:"),
|
||||
wxT("/FileFormats/MP3VarMode"),
|
||||
ROUTINE_FAST,
|
||||
GetNames(varModes, WXSIZEOF(varModes)),
|
||||
GetLabels(varModes, WXSIZEOF(varModes)));
|
||||
mMode->Enable(enable);
|
||||
|
||||
|
||||
S.AddPrompt(_("Channel Mode:"));
|
||||
S.StartTwoColumn();
|
||||
{
|
||||
@ -410,36 +418,9 @@ void ExportMP3Options::PopulateOrExchange(ShuttleGui & S)
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportMP3Options::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
gPrefs->Write(wxT("/FileFormats/MP3SetRate"), mSetRate);
|
||||
gPrefs->Write(wxT("/FileFormats/MP3VbrRate"), mVbrRate);
|
||||
gPrefs->Write(wxT("/FileFormats/MP3AbrRate"), mAbrRate);
|
||||
gPrefs->Write(wxT("/FileFormats/MP3CbrRate"), mCbrRate);
|
||||
gPrefs->Flush();
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
S.EndVerticalLay();
|
||||
}
|
||||
|
||||
///
|
||||
@ -1558,7 +1539,7 @@ public:
|
||||
|
||||
// Required
|
||||
|
||||
bool DisplayOptions(wxWindow *parent, int format = 0);
|
||||
wxWindow *OptionsCreate(wxWindow *parent, int format);
|
||||
int Export(AudacityProject *project,
|
||||
int channels,
|
||||
wxString fName,
|
||||
@ -1847,13 +1828,9 @@ int ExportMP3::Export(AudacityProject *project,
|
||||
return updateResult;
|
||||
}
|
||||
|
||||
bool ExportMP3::DisplayOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
wxWindow *ExportMP3::OptionsCreate(wxWindow *parent, int format)
|
||||
{
|
||||
ExportMP3Options od(parent);
|
||||
|
||||
od.ShowModal();
|
||||
|
||||
return true;
|
||||
return new ExportMP3Options(parent, format);
|
||||
}
|
||||
|
||||
int ExportMP3::FindValue(CHOICES *choices, int cnt, int needle, int def)
|
||||
|
@ -24,7 +24,8 @@
|
||||
|
||||
#include <wx/log.h>
|
||||
#include <wx/msgdlg.h>
|
||||
|
||||
#include <wx/slider.h>
|
||||
|
||||
#include <vorbis/vorbisenc.h>
|
||||
|
||||
#include "../FileIO.h"
|
||||
@ -39,81 +40,58 @@
|
||||
// ExportOGGOptions
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
class ExportOGGOptions : public wxDialog
|
||||
class ExportOGGOptions : public wxPanel
|
||||
{
|
||||
public:
|
||||
|
||||
ExportOGGOptions(wxWindow *parent, int format);
|
||||
virtual ~ExportOGGOptions();
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
|
||||
int mOggQualityUnscaled;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportOGGOptions, wxDialog)
|
||||
EVT_BUTTON(wxID_OK, ExportOGGOptions::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
///
|
||||
///
|
||||
ExportOGGOptions::ExportOGGOptions(wxWindow *parent, int WXUNUSED(format))
|
||||
: wxDialog(parent, wxID_ANY,
|
||||
wxString(_("Specify Ogg Vorbis Options")))
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
mOggQualityUnscaled = gPrefs->Read(wxT("/FileFormats/OggExportQuality"),50)/10;
|
||||
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
PopulateOrExchange(S);
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportOGGOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND, 0);
|
||||
{
|
||||
S.StartStatic(_("Ogg Vorbis Export Setup"), 1);
|
||||
{
|
||||
S.StartMultiColumn(2, wxEXPAND);
|
||||
{
|
||||
S.SetStretchyCol(1);
|
||||
S.TieSlider(_("Quality:"), mOggQualityUnscaled, 10);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize(GetSize());
|
||||
Center();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
void ExportOGGOptions::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
ExportOGGOptions::~ExportOGGOptions()
|
||||
{
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
gPrefs->Write(wxT("/FileFormats/OggExportQuality"),mOggQualityUnscaled * 10);
|
||||
gPrefs->Flush();
|
||||
}
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
///
|
||||
///
|
||||
void ExportOGGOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND);
|
||||
{
|
||||
S.SetSizerProportion(1);
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.SetStretchyCol(1);
|
||||
S.Prop(1).TieSlider(_("Quality:"), mOggQualityUnscaled, 10);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndVerticalLay();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@ -130,8 +108,8 @@ public:
|
||||
void Destroy();
|
||||
|
||||
// Required
|
||||
virtual wxWindow *OptionsCreate(wxWindow *parent, int format);
|
||||
|
||||
bool DisplayOptions(wxWindow *parent, int format = 0);
|
||||
int Export(AudacityProject *project,
|
||||
int channels,
|
||||
wxString fName,
|
||||
@ -334,13 +312,9 @@ int ExportOGG::Export(AudacityProject *project,
|
||||
return updateResult;
|
||||
}
|
||||
|
||||
bool ExportOGG::DisplayOptions(wxWindow *parent, int format)
|
||||
wxWindow *ExportOGG::OptionsCreate(wxWindow *parent, int format)
|
||||
{
|
||||
ExportOGGOptions od(parent, format);
|
||||
|
||||
od.ShowModal();
|
||||
|
||||
return true;
|
||||
return new ExportOGGOptions(parent, format);
|
||||
}
|
||||
|
||||
bool ExportOGG::FillComment(AudacityProject *project, vorbis_comment *comment, Tags *metadata)
|
||||
|
@ -53,8 +53,8 @@
|
||||
struct
|
||||
{
|
||||
int format;
|
||||
wxChar *name;
|
||||
wxChar *desc;
|
||||
const wxChar *name;
|
||||
const wxChar *desc;
|
||||
}
|
||||
static const kFormats[] =
|
||||
{
|
||||
@ -92,14 +92,13 @@ static void WriteExportFormatPref(int format)
|
||||
#define ID_HEADER_CHOICE 7102
|
||||
#define ID_ENCODING_CHOICE 7103
|
||||
|
||||
class ExportPCMOptions : public wxDialog
|
||||
class ExportPCMOptions : public wxPanel
|
||||
{
|
||||
public:
|
||||
|
||||
ExportPCMOptions(wxWindow *parent, int format);
|
||||
void PopulateOrExchange(ShuttleGui & S);
|
||||
void OnHeaderChoice(wxCommandEvent & evt);
|
||||
void OnOK(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
|
||||
@ -112,7 +111,6 @@ private:
|
||||
wxArrayString mEncodingNames;
|
||||
wxChoice *mHeaderChoice;
|
||||
wxChoice *mEncodingChoice;
|
||||
wxButton *mOk;
|
||||
int mHeaderFromChoice;
|
||||
int mEncodingFromChoice;
|
||||
wxArrayInt mEncodingFormats;
|
||||
@ -120,20 +118,14 @@ private:
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportPCMOptions, wxDialog)
|
||||
EVT_CHOICE(ID_HEADER_CHOICE, ExportPCMOptions::OnHeaderChoice)
|
||||
EVT_BUTTON(wxID_OK, ExportPCMOptions::OnOK)
|
||||
BEGIN_EVENT_TABLE(ExportPCMOptions, wxPanel)
|
||||
EVT_CHOICE(ID_HEADER_CHOICE, ExportPCMOptions::OnHeaderChoice)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
ExportPCMOptions::ExportPCMOptions(wxWindow * WXUNUSED(parent), int selformat)
|
||||
: wxDialog(NULL, wxID_ANY,
|
||||
wxString(_("Specify Uncompressed Options")))
|
||||
ExportPCMOptions::ExportPCMOptions(wxWindow *parent, int selformat)
|
||||
: wxPanel(parent, wxID_ANY)
|
||||
{
|
||||
SetName(GetTitle());
|
||||
|
||||
mOk = NULL;
|
||||
|
||||
int format = 0;
|
||||
int format;
|
||||
|
||||
if (selformat < 0 || selformat >= WXSIZEOF(kFormats))
|
||||
{
|
||||
@ -144,23 +136,15 @@ ExportPCMOptions::ExportPCMOptions(wxWindow * WXUNUSED(parent), int selformat)
|
||||
format = kFormats[selformat].format;
|
||||
}
|
||||
|
||||
int i;
|
||||
int num;
|
||||
int sel;
|
||||
|
||||
num = sf_num_headers();
|
||||
sel = 0;
|
||||
for (i = 0; i < num; i++) {
|
||||
mHeaderFromChoice = 0;
|
||||
for (int i = 0, num = sf_num_headers(); i < num; i++) {
|
||||
mHeaderNames.Add(sf_header_index_name(i));
|
||||
if ((format & SF_FORMAT_TYPEMASK) == (int)sf_header_index_to_type(i))
|
||||
sel = i;
|
||||
mHeaderFromChoice = i;
|
||||
}
|
||||
mHeaderFromChoice = sel;
|
||||
|
||||
mEncodingFormats.Clear();
|
||||
num = sf_num_encodings();
|
||||
mEncodingFromChoice = sel = 0;
|
||||
for (i = 0; i < num; i++) {
|
||||
mEncodingFromChoice = 0;
|
||||
for (int i = 0, sel = 0, num = sf_num_encodings(); i < num; i++) {
|
||||
int enc = sf_encoding_index_to_subtype(i);
|
||||
int fmt = (format & SF_FORMAT_TYPEMASK) | enc;
|
||||
bool valid = ValidatePair(fmt);
|
||||
@ -177,21 +161,16 @@ ExportPCMOptions::ExportPCMOptions(wxWindow * WXUNUSED(parent), int selformat)
|
||||
}
|
||||
|
||||
ShuttleGui S(this, eIsCreatingFromPrefs);
|
||||
|
||||
PopulateOrExchange(S);
|
||||
|
||||
Layout();
|
||||
Fit();
|
||||
Center();
|
||||
}
|
||||
|
||||
void ExportPCMOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND, true);
|
||||
S.StartVerticalLay();
|
||||
{
|
||||
S.StartStatic(_("Uncompressed Export Setup"), true);
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
S.StartMultiColumn(2, wxEXPAND);
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
S.SetStretchyCol(1);
|
||||
mHeaderChoice = S.Id(ID_HEADER_CHOICE)
|
||||
@ -204,14 +183,10 @@ void ExportPCMOptions::PopulateOrExchange(ShuttleGui & S)
|
||||
&mEncodingNames);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
S.AddFixedText(_("(Not all combinations of headers and encodings are possible.)"));
|
||||
}
|
||||
S.EndStatic();
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.AddStandardButtons();
|
||||
mOk = (wxButton *)wxWindow::FindWindowById(wxID_OK, this);
|
||||
S.EndVerticalLay();
|
||||
|
||||
return;
|
||||
}
|
||||
@ -263,15 +238,6 @@ void ExportPCMOptions::OnHeaderChoice(wxCommandEvent & WXUNUSED(evt))
|
||||
ValidatePair(GetFormat());
|
||||
}
|
||||
|
||||
void ExportPCMOptions::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
WriteExportFormatPref(GetFormat());
|
||||
|
||||
EndModal(wxID_OK);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int ExportPCMOptions::GetFormat()
|
||||
{
|
||||
int hdr = sf_header_index_to_type(mHeaderChoice->GetSelection());
|
||||
@ -295,10 +261,7 @@ bool ExportPCMOptions::ValidatePair(int format)
|
||||
info.sections = 1;
|
||||
info.seekable = 0;
|
||||
|
||||
int valid = sf_format_check(&info);
|
||||
if (mOk)
|
||||
mOk->Enable(valid != 0 ? true : false);
|
||||
return valid != 0 ? true : false;
|
||||
return sf_format_check(&info) != 0 ? true : false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@ -314,7 +277,7 @@ public:
|
||||
|
||||
// Required
|
||||
|
||||
bool DisplayOptions(wxWindow *parent, int format = 0);
|
||||
wxWindow *OptionsCreate(wxWindow *parent, int format);
|
||||
int Export(AudacityProject *project,
|
||||
int channels,
|
||||
wxString fName,
|
||||
@ -884,29 +847,15 @@ void ExportPCM::AddID3Chunk(wxString fName, Tags *tags, int sf_format)
|
||||
return;
|
||||
}
|
||||
|
||||
/** @param format The same information as the subformat argument to the Export
|
||||
* method. Controls use of pre-defined export settings.*/
|
||||
bool ExportPCM::DisplayOptions(wxWindow *parent, int format)
|
||||
wxWindow *ExportPCM::OptionsCreate(wxWindow *parent, int format)
|
||||
{
|
||||
// default, full user control
|
||||
if (format < 0 || format >= WXSIZEOF(kFormats))
|
||||
{
|
||||
ExportPCMOptions od(parent,format);
|
||||
od.ShowModal();
|
||||
return true;
|
||||
return new ExportPCMOptions(parent, format);
|
||||
}
|
||||
|
||||
wxString nopt, fmt, usepcm;
|
||||
|
||||
nopt.Printf(_("There are no options for this format.\n"));
|
||||
fmt.Printf(_("Your file will be exported as a \"%s\" file\n"),
|
||||
wxGetTranslation(kFormats[format].desc));
|
||||
usepcm.Printf(_("If you need more control over the export format please use the \"%s\" format."),
|
||||
_("Other uncompressed files"));
|
||||
|
||||
wxMessageBox(nopt + fmt + usepcm);
|
||||
|
||||
return true;
|
||||
return ExportPlugin::OptionsCreate(parent, format);
|
||||
}
|
||||
|
||||
wxString ExportPCM::GetExtension(int index)
|
||||
|
Loading…
x
Reference in New Issue
Block a user