#include "wx/tokenzr.h" // wxStringTokenizer
#include "wx/filefn.h" // ::wxGetCwd
-//-----------------------------------------------------------------------------
-// idle system
-//-----------------------------------------------------------------------------
-
-extern void wxapp_install_idle_handler();
-
//-----------------------------------------------------------------------------
// "clicked" for OK-button
//-----------------------------------------------------------------------------
msg.Printf(
_("File '%s' already exists, do you really want to overwrite it?"),
- wxString(wxConvFileName->cMB2WX(filename)).c_str());
+ wxString(filename, *wxConvFileName));
wxMessageDialog dlg(dialog, msg, _("Confirm"),
wxYES_NO | wxICON_QUESTION);
}
}
+ if (style & wxFD_FILE_MUST_EXIST)
+ {
+ if ( !g_file_test(filename, G_FILE_TEST_EXISTS) )
+ {
+ wxMessageDialog dlg( dialog, _("Please choose an existing file."),
+ _("Error"), wxOK| wxICON_ERROR);
+ dlg.ShowModal();
+ return;
+ }
+ }
+
// change to the directory where the user went if asked
if (style & wxFD_CHANGE_DIR)
{
gint response,
wxFileDialog *dialog)
{
- wxapp_install_idle_handler();
-
if (response == GTK_RESPONSE_ACCEPT)
gtk_filedialog_ok_callback(w, dialog);
else // GTK_RESPONSE_CANCEL or GTK_RESPONSE_NONE
return;
}
- m_needParent = false;
+ parent = GetParentForModalDialog(parent);
if (!PreCreation(parent, pos, wxDefaultSize) ||
!CreateBase(parent, wxID_ANY, pos, wxDefaultSize, style,
ok_btn_stock, GTK_RESPONSE_ACCEPT,
NULL);
+ m_fc.SetWidget( GTK_FILE_CHOOSER(m_widget) );
+
gtk_dialog_set_default_response(GTK_DIALOG(m_widget), GTK_RESPONSE_ACCEPT);
if ( style & wxFD_MULTIPLE )
fn.AssignDir(defaultDir);
// set the initial file name and/or directory
- wxString fname = fn.GetFullName();
- if ( fname.empty() )
+ fn.MakeAbsolute(); // GTK+ needs absolute path
+ const wxString dir = fn.GetPath();
+ if ( !dir.empty() )
{
- wxString dir = fn.GetPath();
- if ( !dir.empty() )
- {
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(m_widget),
- dir.fn_str());
- }
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(m_widget),
+ dir.fn_str());
}
+ const wxString fname = fn.GetFullName();
if ( style & wxFD_SAVE )
{
if ( !fname.empty() )
if (!gtk_check_version(2,4,0))
EndDialog(wxID_OK);
else
- wxGenericFileDialog::OnListOk( event );
+ wxGenericFileDialog::OnOk( event );
}
int wxFileDialog::ShowModal()
{
if (!gtk_check_version(2,4,0))
{
- wxGtkString str(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget)));
- return wxConvFileName->cMB2WX(str);
+ return m_fc.GetPath();
}
return wxGenericFileDialog::GetPath();
{
if (!gtk_check_version(2,4,0))
{
- GetPaths(files);
- for (size_t n = 0; n < files.GetCount(); ++n )
- {
- wxFileName file(files[n]);
- files[n] = file.GetFullName();
- }
+ m_fc.GetFilenames( files );
}
else
wxGenericFileDialog::GetFilenames( files );
{
if (!gtk_check_version(2,4,0))
{
- paths.Empty();
- if (gtk_file_chooser_get_select_multiple(GTK_FILE_CHOOSER(m_widget)))
- {
- GSList *gpathsi = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(m_widget));
- GSList *gpaths = gpathsi;
- while (gpathsi)
- {
- wxString file(wxConvFileName->cMB2WX((gchar*) gpathsi->data));
- paths.Add(file);
- g_free(gpathsi->data);
- gpathsi = gpathsi->next;
- }
-
- g_slist_free(gpaths);
- }
- else
- paths.Add(GetPath());
+ m_fc.GetPaths( paths );
}
else
wxGenericFileDialog::GetPaths( paths );
{
if (!gtk_check_version(2,4,0))
{
- if (path.empty()) return;
-
- gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(m_widget), wxConvFileName->cWX2MB(path));
+ m_fc.SetPath( path );
}
else
wxGenericFileDialog::SetPath( path );
{
if (!gtk_check_version(2,4,0))
{
- if (wxDirExists(dir))
- {
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(m_widget), wxConvFileName->cWX2MB(dir));
- }
+ m_fc.SetDirectory( dir );
}
else
wxGenericFileDialog::SetDirectory( dir );
{
if (!gtk_check_version(2,4,0))
{
- wxGtkString str(gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(m_widget)));
- return wxConvFileName->cMB2WX(str);
+ m_fc.GetDirectory();
}
return wxGenericFileDialog::GetDirectory();
wxString wxFileDialog::GetFilename() const
{
if (!gtk_check_version(2,4,0))
- return wxFileName(GetPath()).GetFullName();
+ return m_fc.GetFilename();
else
return wxGenericFileDialog::GetFilename();
}
{
if (!gtk_check_version(2,4,0))
{
- // parse filters
- wxArrayString wildDescriptions, wildFilters;
- if (!wxParseCommonDialogsFilter(wildCard, wildDescriptions, wildFilters))
- {
- wxFAIL_MSG( wxT("wxFileDialog::SetWildCard - bad wildcard string") );
- }
- else
- {
- // Parsing went fine. Set m_wildCard to be returned by wxFileDialogBase::GetWildcard
- m_wildCard = wildCard;
-
- GtkFileChooser* chooser = GTK_FILE_CHOOSER(m_widget);
-
- // empty current filter list:
- GSList* ifilters = gtk_file_chooser_list_filters(chooser);
- GSList* filters = ifilters;
-
- while (ifilters)
- {
- gtk_file_chooser_remove_filter(chooser,GTK_FILE_FILTER(ifilters->data));
- ifilters = ifilters->next;
- }
- g_slist_free(filters);
-
- // add parsed to GtkChooser
- for (size_t n = 0; n < wildFilters.GetCount(); ++n)
- {
- GtkFileFilter* filter = gtk_file_filter_new();
- gtk_file_filter_set_name(filter, wxGTK_CONV(wildDescriptions[n]));
-
- wxStringTokenizer exttok(wildFilters[n], wxT(";"));
- while (exttok.HasMoreTokens())
- {
- wxString token = exttok.GetNextToken();
- gtk_file_filter_add_pattern(filter, wxGTK_CONV(token));
- }
-
- gtk_file_chooser_add_filter(chooser, filter);
- }
-
- // Reset the filter index
- SetFilterIndex(0);
- }
+ m_fc.SetWildcard( wildCard );
}
else
wxGenericFileDialog::SetWildcard( wildCard );
if (!gtk_check_version(2,4,0))
{
- gpointer filter;
- GtkFileChooser *chooser = GTK_FILE_CHOOSER(m_widget);
- GSList *filters = gtk_file_chooser_list_filters(chooser);
-
- filter = g_slist_nth_data(filters, filterIndex);
-
- if (filter != NULL)
- {
- gtk_file_chooser_set_filter(chooser, GTK_FILE_FILTER(filter));
- }
- else
- {
- wxFAIL_MSG( wxT("wxFileDialog::SetFilterIndex - bad filter index") );
- }
-
- g_slist_free(filters);
+ m_fc.SetFilterIndex( filterIndex);
}
else
wxGenericFileDialog::SetFilterIndex( filterIndex );
{
if (!gtk_check_version(2,4,0))
{
- GtkFileChooser *chooser = GTK_FILE_CHOOSER(m_widget);
- GtkFileFilter *filter = gtk_file_chooser_get_filter(chooser);
- GSList *filters = gtk_file_chooser_list_filters(chooser);
- gint index = g_slist_index(filters, filter);
- g_slist_free(filters);
-
- if (index == -1)
- {
- wxFAIL_MSG( wxT("wxFileDialog::GetFilterIndex - bad filter index returned by gtk+") );
- return 0;
- }
- else
- return index;
+ return m_fc.GetFilterIndex();
}
else
return wxGenericFileDialog::GetFilterIndex();