]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/filedlg.cpp
wxBase/GUI separation: 1st step, wxMSW should build, all the rest is broken
[wxWidgets.git] / src / os2 / filedlg.cpp
index 21c89aaa9197b6a7d42d86198ef1522afdc8d4f0..6c3135b1b500e936fa10a3f73823cbeae17fb6a8 100644 (file)
 #endif
 IMPLEMENT_CLASS(wxFileDialog, wxDialog)
 
-// ----------------------------------------------------------------------------
-// global functions
-// ----------------------------------------------------------------------------
-
-wxString wxFileSelector(
-  const char*                       pzTitle
-, const char*                       pzDefaultDir
-, const char*                       pzDefaultFileName
-, const char*                       pzDefaultExtension
-, const char*                       pzFilter
-, int                               nFlags
-, wxWindow*                         pParent
-, int                               nX
-, int                               nY
-)
-{
-    wxString                        sFilter("");
-    wxString                        sDefaultDirString;
-    wxString                        sDefaultFilenameString;
-
-    //
-    // If there's a default extension specified but no filter, we create
-    // a suitable filter.
-    //
-    if (pzDefaultExtension && !pzFilter)
-        sFilter = wxString("*.") + wxString(pzDefaultExtension);
-    else if (pzFilter)
-        sFilter = pzFilter;
-
-    if (pzDefaultDir)
-        sDefaultDirString = pzDefaultDir;
-    else
-        sDefaultDirString = "";
-
-    if (pzDefaultFileName)
-        sDefaultFilenameString = pzDefaultFileName;
-    else
-        sDefaultFilenameString = "";
-
-    wxFileDialog                    vFileDialog( pParent
-                                                ,pzTitle
-                                                ,sDefaultDirString
-                                                ,sDefaultFilenameString
-                                                ,sFilter
-                                                ,nFlags
-                                                ,wxPoint(nX, nY)
-                                               );
-
-    if (wxStrlen(pzDefaultExtension) != 0)
-    {
-        int                         nFilterFind = 0;
-        int                         nFilterIndex = 0;
-
-        for (unsigned int i = 0; i < sFilter.Len(); i++)
-        {
-            if (sFilter.GetChar(i) == wxT('|'))
-            {
-                //
-                // Save the start index of the new filter
-                unsigned int        uIs = i++;
-
-                //
-                // Find the end of the filter
-                //
-                for(; i < sFilter.Len(); i++)
-                {
-                    if(sFilter[i] == wxT('|'))
-                        break;
-                }
-
-                if( i - uIs - 1 > 0 && uIs + 1 < sFilter.Len() )
-                {
-                    if(sFilter.Mid(uIs + 1, i - uIs - 1).Contains(pzDefaultExtension))
-                    {
-                        nFilterFind = nFilterIndex;
-                        break;
-                    }
-                }
-                nFilterIndex++;
-            }
-        }
-        vFileDialog.SetFilterIndex(nFilterFind);
-    }
-    if (vFileDialog.ShowModal() == wxID_OK)
-    {
-        return vFileDialog.GetPath();
-    }
-    else
-        return wxEmptyString;
-} // end of wxFileSelector
-
-wxString wxFileSelectorEx (
-  const char*                       pzTitle
-, const char*                       pzDefaultDir
-, const char*                       pzDefaultFileName
-, int*                              pnDefaultFilterIndex
-, const char*                       pzFilter
-, int                               nFlags
-, wxWindow*                         pParent
-, int                               nX
-, int                               nY
-)
-{
-    wxFileDialog                    vFileDialog( pParent
-                                                ,pzTitle ? pzTitle : ""
-                                                ,pzDefaultDir ? pzDefaultDir : ""
-                                                ,pzDefaultFileName ? pzDefaultFileName : ""
-                                                ,pzFilter ? pzFilter : ""
-                                                ,nFlags
-                                                ,wxPoint(nX, nY)
-                                               );
-
-    if (vFileDialog.ShowModal() == wxID_OK)
-    {
-        *pnDefaultFilterIndex = vFileDialog.GetFilterIndex();
-        return vFileDialog.GetPath();
-    }
-    else
-        return wxEmptyString;
-} // end of wxFileSelectorEx
-
 // ----------------------------------------------------------------------------
 // CLASS wxFileDialog
 // ----------------------------------------------------------------------------
@@ -227,12 +106,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 +127,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 +192,28 @@ int wxFileDialog::ShowModal()
     if ( wxStrlen(m_sWildCard) == 0 )
         sTheFilter = "";
     else
-        sTheFilter = m_sWildCard ;
+        sTheFilter = m_sWildCard;
 
-    if (!wxStrchr(sTheFilter, wxT('|') ) )
+    pzFilterBuffer = strtok((char*)sTheFilter.c_str(), "|");
+    while(pzFilterBuffer != NULL)
     {
-        //
-        // 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("|");
-
-    //
-    // Replace | with \0
-    //
-    for (i = 0; i < sFilterBuffer.Len(); i++ )
-    {
-        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 +226,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 +247,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');
 
@@ -446,75 +322,3 @@ int wxFileDialog::ShowModal()
     return wxID_CANCEL;
 } // end of wxFileDialog::ShowModal
 
-//
-// Generic file load/save dialog
-//
-static wxString wxDefaultFileSelector (
-  bool                              bLoad
-, const char*                       pzWhat
-, const char*                       pzExtension
-, const char*                       pzDefaultName
-, wxWindow*                         pParent
-)
-{
-    char*                           pzExt = (char *)pzExtension;
-    char                            zPrompt[50];
-    wxString                        sStr;
-    char                            zWild[60];
-
-    if (bLoad)
-        sStr = "Load %s file";
-    else
-        sStr = "Save %s file";
-    sprintf(zPrompt, wxGetTranslation(sStr), pzWhat);
-
-    if (*pzExt == '.')
-        pzExt++;
-    sprintf(zWild, "*.%s", pzExt);
-    return wxFileSelector ( zPrompt
-                           ,NULL
-                           ,pzDefaultName
-                           ,pzExt
-                           ,zWild
-                           ,0
-                           ,pParent
-                          );
-} // end of wxDefaultFileSelector
-
-//
-// Generic file load dialog
-//
-wxString wxLoadFileSelector (
-  const char*                       pzWhat
-, const char*                       pzExtension
-, const char*                       pzDefaultName
-, wxWindow*                         pParent
-)
-{
-    return wxDefaultFileSelector( TRUE
-                                 ,pzWhat
-                                 ,pzExtension
-                                 ,pzDefaultName
-                                 ,pParent
-                                );
-} // end of wxLoadFileSelector
-
-
-//
-// Generic file save dialog
-//
-wxString wxSaveFileSelector (
-  const char*                       pzWhat
-, const char*                       pzExtension
-, const char*                       pzDefaultName
-, wxWindow*                         pParent
-)
-{
-    return wxDefaultFileSelector( FALSE
-                                 ,pzWhat
-                                 ,pzExtension
-                                 ,pzDefaultName
-                                 ,pParent
-                                );
-} // end of wxSaveFileSelector
-