void SetWildcard( const wxString& wildCard );
void SetFilterIndex( int filterIndex );
+ wxString GetCurrentWildCard() const
+ { return m_wildcards[GetFilterIndex()]; }
+
private:
GtkFileChooser *m_widget;
+ // First wildcard in filter, to be used when the user
+ // saves a file without giving an extension.
+ wxArrayString m_wildcards;
};
#if wxUSE_FILECTRL
void wxGtkFileChooser::SetWildcard( const wxString& wildCard )
{
+ m_wildcards.Empty();
+
// parse filters
wxArrayString wildDescriptions, wildFilters;
gtk_file_filter_set_name( filter, wxGTK_CONV_SYS( wildDescriptions[n] ) );
wxStringTokenizer exttok( wildFilters[n], wxT( ";" ) );
+
+ int n = 1;
while ( exttok.HasMoreTokens() )
{
wxString token = exttok.GetNextToken();
gtk_file_filter_add_pattern( filter, wxGTK_CONV_SYS( token ) );
+
+ if (n == 1)
+ m_wildcards.Add( token ); // Only add first pattern to list, used later when saving
+ n++;
}
gtk_file_chooser_add_filter( chooser, filter );
wxString wxFileDialog::GetPath() const
{
- return m_fc.GetPath();
+ wxFileName fn = m_fc.GetPath();
+
+ if (HasFdFlag(wxFD_SAVE))
+ {
+ // add extension
+ if (!fn.HasExt())
+ {
+ wxFileName wildcard( "/dummy", m_fc.GetCurrentWildCard() );
+ wxString ext = wildcard.GetExt();
+ if (!ext.empty() && (ext.Find('?') == wxNOT_FOUND) && (ext.Find('*') == wxNOT_FOUND))
+ fn.SetExt( ext );
+ }
+ }
+
+ return fn.GetFullPath();
}
void wxFileDialog::GetFilenames(wxArrayString& files) const