+IMPLEMENT_CLASS(wxFileDialog, wxFileDialogBase)
+
+wxFileDialog::wxFileDialog(
+ wxWindow *parent, const wxString& message,
+ const wxString& defaultDir, const wxString& defaultFileName, const wxString& wildCard,
+ long style, const wxPoint& pos, const wxSize& sz, const wxString& name)
+ : wxFileDialogBase(parent, message, defaultDir, defaultFileName, wildCard, style, pos, sz, name)
+{
+ m_filterIndex = -1;
+ m_sheetDelegate = [[ModalDialogDelegate alloc] init];
+ [(ModalDialogDelegate*)m_sheetDelegate setImplementation: this];
+}
+
+wxFileDialog::~wxFileDialog()
+{
+ [m_sheetDelegate release];
+}
+
+bool wxFileDialog::SupportsExtraControl() const
+{
+ return true;
+}
+
+NSArray* GetTypesFromExtension( const wxString extensiongroup, wxArrayString& extensions )
+{
+ NSMutableArray* types = nil;
+ extensions.Clear();
+
+ wxStringTokenizer tokenizer( extensiongroup, wxT(";") ) ;
+ while ( tokenizer.HasMoreTokens() )
+ {
+ wxString extension = tokenizer.GetNextToken() ;
+ // Remove leading '*'
+ if ( extension.length() && (extension.GetChar(0) == '*') )
+ extension = extension.Mid( 1 );
+
+ // Remove leading '.'
+ if ( extension.length() && (extension.GetChar(0) == '.') )
+ extension = extension.Mid( 1 );
+
+ // Remove leading '*', this is for handling *.*
+ if ( extension.length() && (extension.GetChar(0) == '*') )
+ extension = extension.Mid( 1 );
+
+ if ( extension.IsEmpty() )