]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/filedlg.cpp
added wxVScrolledWindow
[wxWidgets.git] / src / os2 / filedlg.cpp
index 21c89aaa9197b6a7d42d86198ef1522afdc8d4f0..cb87d850f145dd32920f67fcee72c5b1321a013d 100644 (file)
@@ -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');