+// ----------------------------------------------------------------------------
+// global functions
+// ----------------------------------------------------------------------------
+
+wxString wxFileSelector(const wxChar *title,
+ const wxChar *defaultDir,
+ const wxChar *defaultFileName,
+ const wxChar *defaultExtension,
+ const wxChar *filter,
+ int flags,
+ wxWindow *parent,
+ int x, int y)
+{
+ // In the original implementation, defaultExtension is passed to the
+ // lpstrDefExt member of OPENFILENAME. This extension, if non-NULL, is
+ // appended to the filename if the user fails to type an extension. The new
+ // implementation (taken from wxFileSelectorEx) appends the extension
+ // automatically, by looking at the filter specification. In fact this
+ // should be better than the native Microsoft implementation because
+ // Windows only allows *one* default extension, whereas here we do the
+ // right thing depending on the filter the user has chosen.
+
+ // If there's a default extension specified but no filter, we create a
+ // suitable filter.
+
+ wxString filter2;
+ if ( defaultExtension && !filter )
+ filter2 = wxString(wxT("*.")) + defaultExtension;
+ else if ( filter )
+ filter2 = filter;
+
+ wxString defaultDirString;
+ if (defaultDir)
+ defaultDirString = defaultDir;
+
+ wxString defaultFilenameString;
+ if (defaultFileName)
+ defaultFilenameString = defaultFileName;
+
+ wxFileDialog fileDialog(parent, title, defaultDirString,
+ defaultFilenameString, filter2,
+ flags, wxPoint(x, y));
+ if( wxStrlen(defaultExtension) != 0 )
+ {
+ int filterFind = 0,
+ filterIndex = 0;
+
+ for( unsigned int i = 0; i < filter2.Len(); i++ )
+ {
+ if( filter2.GetChar(i) == wxT('|') )
+ {
+ // save the start index of the new filter
+ unsigned int is = i++;
+
+ // find the end of the filter
+ for( ; i < filter2.Len(); i++ )
+ {
+ if(filter2[i] == wxT('|'))
+ break;
+ }
+
+ if( i-is-1 > 0 && is+1 < filter2.Len() )
+ {
+ if( filter2.Mid(is+1,i-is-1).Contains(defaultExtension) )
+ {
+ filterFind = filterIndex;
+ break;
+ }
+ }
+
+ filterIndex++;
+ }
+ }