const wxValidator& validator,
const wxString &name )
{
- wxASSERT_MSG(path.empty() || CheckPath(path), wxT("Invalid initial path!"));
-
if (!wxPickerBase::CreateBase(parent, id, path, pos, size,
style, validator, name))
return false;
{
wxASSERT(m_text);
- if (m_bIgnoreNextTextCtrlUpdate)
- {
- // ignore this update
- m_bIgnoreNextTextCtrlUpdate = false;
- return;
- }
-
// remove the eventually present path-separator from the end of the textctrl
// string otherwise we would generate a wxFileDirPickerEvent when changing
// from e.g. /home/user to /home/user/ and we want to avoid it !
wxString newpath(GetTextCtrlValue());
- if (!CheckPath(newpath))
- return; // invalid user input
+
+ // Notice that we use to check here whether the current path is valid, i.e.
+ // if the corresponding file or directory exists for the controls with
+ // wxFLP_FILE_MUST_EXIST or wxDIRP_DIR_MUST_EXIST flag, however we don't do
+ // this any more as we still must notify the program about any changes in
+ // the control, otherwise its view of it would be different from what is
+ // actually shown on the screen, resulting in very confusing UI.
if (m_pickerIface->GetPath() != newpath)
{
if (!m_text)
return; // no textctrl to update
- // NOTE: this SetValue() will generate an unwanted wxEVT_COMMAND_TEXT_UPDATED
- // which will trigger a unneeded UpdateFromTextCtrl(); thus before using
- // SetValue() we set the m_bIgnoreNextTextCtrlUpdate flag...
- m_bIgnoreNextTextCtrlUpdate = true;
- m_text->SetValue(m_pickerIface->GetPath());
+ // Take care to use ChangeValue() here and not SetValue() to avoid
+ // generating an event that would trigger UpdateTextCtrlFromPicker()
+ // resulting in infinite recursion.
+ m_text->ChangeValue(m_pickerIface->GetPath());
}
return true;
}
-bool wxFilePickerCtrl::CheckPath(const wxString& path) const
-{
- // if wxFLP_SAVE was given or wxFLP_FILE_MUST_EXIST has NOT been given we
- // must accept any path
- return HasFlag(wxFLP_SAVE) ||
- !HasFlag(wxFLP_FILE_MUST_EXIST) ||
- wxFileName::FileExists(path);
-}
-
wxString wxFilePickerCtrl::GetTextCtrlValue() const
{
// filter it through wxFileName to remove any spurious path separator
return true;
}
-bool wxDirPickerCtrl::CheckPath(const wxString& path) const
-{
- // if wxDIRP_DIR_MUST_EXIST has NOT been given we must accept any path
- return !HasFlag(wxDIRP_DIR_MUST_EXIST) || wxFileName::DirExists(path);
-}
-
wxString wxDirPickerCtrl::GetTextCtrlValue() const
{
// filter it through wxFileName to remove any spurious path separator