X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4efd425972ac106a30c3c42a8ec78aa38a59c064..c71d3313a42a8fdc6efd6a0c49ad13def665ef2f:/src/os2/filedlg.cpp?ds=sidebyside diff --git a/src/os2/filedlg.cpp b/src/os2/filedlg.cpp index 21c89aaa91..cb87d850f1 100644 --- a/src/os2/filedlg.cpp +++ b/src/os2/filedlg.cpp @@ -227,12 +227,14 @@ int wxFileDialog::ShowModal() { wxString sTheFilter; wxString sFilterBuffer; + wxChar* pzFilterBuffer; static wxChar zFileNameBuffer[wxMAXPATH]; // the file-name HWND hWnd = 0; wxChar zTitleBuffer[wxMAXFILE + 1 + wxMAXEXT]; // the file-name, without path - wxString sDir; - size_t i; + wxString sDir; + size_t i; size_t nLen = m_sDir.length(); + int nCount = 0; FILEDLG vFileDlg; ULONG lFlags = 0L; @@ -246,9 +248,11 @@ int wxFileDialog::ShowModal() *zFileNameBuffer = wxT('\0'); *zTitleBuffer = wxT('\0'); - m_lDialogStyle & wxSAVE ? lFlags != FDS_SAVEAS_DIALOG - : FDS_OPEN_DIALOG - ; + if (m_lDialogStyle & wxSAVE) + lFlags = FDS_SAVEAS_DIALOG; + else + lFlags = FDS_OPEN_DIALOG; + if ((m_lDialogStyle & wxHIDE_READONLY) || (m_lDialogStyle & wxSAVE)) lFlags |= FDS_SAVEAS_DIALOG; if (m_lDialogStyle & wxMULTIPLE ) @@ -309,42 +313,28 @@ int wxFileDialog::ShowModal() if ( wxStrlen(m_sWildCard) == 0 ) sTheFilter = ""; else - sTheFilter = m_sWildCard ; - - if (!wxStrchr(sTheFilter, wxT('|') ) ) - { - // - // Only one filter ==> default text - // - sFilterBuffer.Printf( _("Files (%s)|%s") - ,sTheFilter.c_str() - ,sTheFilter.c_str() - ); - } - else - { // more then one filter - sFilterBuffer = sTheFilter; - } - - sFilterBuffer += wxT("|"); + sTheFilter = m_sWildCard; - // - // Replace | with \0 - // - for (i = 0; i < sFilterBuffer.Len(); i++ ) + pzFilterBuffer = strtok((char*)sTheFilter.c_str(), "|"); + while(pzFilterBuffer != NULL) { - if (sFilterBuffer.GetChar(i) == wxT('|')) + if (nCount > 0 && !(nCount % 2)) + sDir += wxT(";"); + if (nCount % 2) { - sFilterBuffer[i] = wxT('\0'); + sDir += pzFilterBuffer; } + pzFilterBuffer = strtok(NULL, "|"); + nCount++; } - if (!sTheFilter.IsEmpty()) - sDir += sTheFilter; - else + if (nCount == 0) sDir += m_sFileName; + if (sDir.IsEmpty()) + sDir = "*.*"; wxStrcpy(vFileDlg.szFullFile, sDir.c_str()); + sFilterBuffer = sDir; - hWnd = ::WinFileDlg( GetHwndOf(m_pParent) + hWnd = ::WinFileDlg( HWND_DESKTOP ,GetHwndOf(m_pParent) ,&vFileDlg ); @@ -357,14 +347,15 @@ int wxFileDialog::ShowModal() { if (i == 0) { - m_sDir = wxPathOnly(wxString((const char*)vFileDlg.papszFQFilename[i])); - m_sPath = (const char*)vFileDlg.papszFQFilename[i]; + m_sDir = wxPathOnly(wxString((const char*)*vFileDlg.papszFQFilename[0])); + m_sPath = (const char*)*vFileDlg.papszFQFilename[0]; } - m_sFileName = wxFileNameFromPath(wxString((const char*)vFileDlg.papszFQFilename[i])); + m_sFileName = wxFileNameFromPath(wxString((const char*)*vFileDlg.papszFQFilename[i])); m_asFileNames.Add(m_sFileName); } + ::WinFreeFileDlgList(vFileDlg.papszFQFilename); } - else if (!m_lDialogStyle & wxSAVE) + else if (!(m_lDialogStyle & wxSAVE)) { m_sPath = vFileDlg.szFullFile; m_sFileName = wxFileNameFromPath(vFileDlg.szFullFile); @@ -377,8 +368,14 @@ int wxFileDialog::ShowModal() wxStrcpy(zFileNameBuffer, vFileDlg.szFullFile); int nIdx = wxStrlen(zFileNameBuffer) - 1; + wxString sExt; - if (zFileNameBuffer[nIdx] == wxT('.') ) + wxSplitPath( zFileNameBuffer + ,&m_sPath + ,&m_sFileName + ,&sExt + ); + if (zFileNameBuffer[nIdx] == wxT('.') || sExt.IsEmpty()) { zFileNameBuffer[nIdx] = wxT('\0');