1. don't emulate OFN_OVERWRITEPROMPT, use the real thing
2. squeeze duplicate (back)slashes from the initial dir, othewise the common dialog doesn't work git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12932 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -253,12 +253,18 @@ int wxFileDialog::ShowModal()
|
|||||||
msw_flags |= OFN_EXPLORER | OFN_ALLOWMULTISELECT;
|
msw_flags |= OFN_EXPLORER | OFN_ALLOWMULTISELECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if wxCHANGE_DIR flag is not given we shouldn't change the CWD
|
// if wxCHANGE_DIR flag is not given we shouldn't change the CWD which the
|
||||||
|
// standard dialog does by default
|
||||||
if ( !(m_dialogStyle & wxCHANGE_DIR) )
|
if ( !(m_dialogStyle & wxCHANGE_DIR) )
|
||||||
{
|
{
|
||||||
msw_flags |= OFN_NOCHANGEDIR;
|
msw_flags |= OFN_NOCHANGEDIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( m_dialogStyle & wxOVERWRITE_PROMPT )
|
||||||
|
{
|
||||||
|
msw_flags |= OFN_OVERWRITEPROMPT;
|
||||||
|
}
|
||||||
|
|
||||||
OPENFILENAME of;
|
OPENFILENAME of;
|
||||||
wxZeroMemory(of);
|
wxZeroMemory(of);
|
||||||
|
|
||||||
@@ -279,14 +285,41 @@ int wxFileDialog::ShowModal()
|
|||||||
of.nMaxFileTitle = wxMAXFILE + 1 + wxMAXEXT; // Windows 3.0 and 3.1
|
of.nMaxFileTitle = wxMAXFILE + 1 + wxMAXEXT; // Windows 3.0 and 3.1
|
||||||
|
|
||||||
// Convert forward slashes to backslashes (file selector doesn't like
|
// Convert forward slashes to backslashes (file selector doesn't like
|
||||||
// forward slashes)
|
// forward slashes) and also squeeze multiple consecutive slashes into one
|
||||||
size_t i = 0;
|
// as it doesn't like two backslashes in a row neither
|
||||||
size_t len = m_dir.Length();
|
wxString dir;
|
||||||
for (i = 0; i < len; i++)
|
size_t len = m_dir.length();
|
||||||
if (m_dir[i] == wxT('/'))
|
dir.reserve(len);
|
||||||
m_dir[i] = wxT('\\');
|
for ( size_t i = 0; i < len; i++ )
|
||||||
|
{
|
||||||
|
wxChar ch = m_dir[i];
|
||||||
|
switch ( ch )
|
||||||
|
{
|
||||||
|
case _T('/'):
|
||||||
|
// convert to backslash
|
||||||
|
ch = _T('\\');
|
||||||
|
|
||||||
of.lpstrInitialDir = m_dir.c_str();
|
// fall through
|
||||||
|
|
||||||
|
case _T('\\'):
|
||||||
|
while ( i < len - 1 )
|
||||||
|
{
|
||||||
|
wxChar chNext = m_dir[i + 1];
|
||||||
|
if ( chNext != _T('\\') && chNext != _T('/') )
|
||||||
|
break;
|
||||||
|
|
||||||
|
// ignore the next one
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
default:
|
||||||
|
// normal char
|
||||||
|
dir += ch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
of.lpstrInitialDir = dir.c_str();
|
||||||
|
|
||||||
of.Flags = msw_flags;
|
of.Flags = msw_flags;
|
||||||
|
|
||||||
@@ -446,22 +479,6 @@ int wxFileDialog::ShowModal()
|
|||||||
m_fileNames.Add(m_fileName);
|
m_fileNames.Add(m_fileName);
|
||||||
m_dir = wxPathOnly(fileNameBuffer);
|
m_dir = wxPathOnly(fileNameBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//=== Simulating the wxOVERWRITE_PROMPT >>============================
|
|
||||||
|
|
||||||
if ( (m_dialogStyle & wxOVERWRITE_PROMPT) &&
|
|
||||||
::wxFileExists( fileNameBuffer ) )
|
|
||||||
{
|
|
||||||
wxString messageText;
|
|
||||||
messageText.Printf(_("Replace file '%s'?"), fileNameBuffer);
|
|
||||||
|
|
||||||
if ( wxMessageBox(messageText, m_message, wxYES_NO ) != wxYES )
|
|
||||||
{
|
|
||||||
success = FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user