From b93f4bb9da97b545447df56f21dfce2590ae01e6 Mon Sep 17 00:00:00 2001
From: David Webster <Dave.Webster@bhmi.com>
Date: Tue, 20 Aug 2002 05:00:48 +0000
Subject: [PATCH] FileDlg updates.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16607 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 include/wx/os2/filedlg.h | 131 ++++++++++++++++++++++-----------------
 src/os2/filedlg.cpp      |  64 ++++++++-----------
 src/os2/wx23.def         |   2 +
 3 files changed, 102 insertions(+), 95 deletions(-)

diff --git a/include/wx/os2/filedlg.h b/include/wx/os2/filedlg.h
index d1b17552db..39b3516ea5 100644
--- a/include/wx/os2/filedlg.h
+++ b/include/wx/os2/filedlg.h
@@ -25,41 +25,47 @@ class WXDLLEXPORT wxFileDialog: public wxDialog
 {
 DECLARE_DYNAMIC_CLASS(wxFileDialog)
 public:
-    wxFileDialog(wxWindow *parent, const wxString& message = wxFileSelectorPromptStr,
-        const wxString& defaultDir = "", const wxString& defaultFile = "", const wxString& wildCard = wxFileSelectorDefaultWildcardStr,
-        long style = 0, const wxPoint& pos = wxDefaultPosition);
-
-    inline void SetMessage(const wxString& message) { m_message = message; }
-    inline void SetPath(const wxString& path) { m_path = path; }
-    inline void SetDirectory(const wxString& dir) { m_dir = dir; }
-    inline void SetFilename(const wxString& name) { m_fileName = name; }
-    inline void SetWildcard(const wxString& wildCard) { m_wildCard = wildCard; }
-    inline void SetStyle(long style) { m_dialogStyle = style; }
-    inline void SetFilterIndex(int filterIndex) { m_filterIndex = filterIndex; }
-
-    inline wxString GetMessage() const { return m_message; }
-    inline wxString GetPath() const { return m_path; }
-    inline void GetPaths(wxArrayString& a) { a.Empty(); a.Add(m_path); }
-    inline wxString GetDirectory() const { return m_dir; }
-    inline wxString GetFilename() const { return m_fileName; }
-    inline void GetFilenames(wxArrayString& a) { a.Empty();
-       a.Add( m_fileName); }
-    inline wxString GetWildcard() const { return m_wildCard; }
-    inline long GetStyle() const { return m_dialogStyle; }
-    inline int GetFilterIndex() const { return m_filterIndex ; }
+    wxFileDialog( wxWindow*       pParent
+                 ,const wxString& rsMessage = wxFileSelectorPromptStr
+                 ,const wxString& rsDefaultDir = ""
+                 ,const wxString& rsDefaultFile = ""
+                 ,const wxString& rsWildCard = wxFileSelectorDefaultWildcardStr
+                 ,long            lStyle = 0
+                 ,const wxPoint&  rPos = wxDefaultPosition
+                );
+
+    inline void SetMessage(const wxString& rsMessage) { m_sMessage = rsMessage; }
+    inline void SetPath(const wxString& rsPath) { m_sPath = rsPath; }
+    inline void SetDirectory(const wxString& rsDir) { m_sDir = rsDir; }
+    inline void SetFilename(const wxString& rsName) { m_sFileName = rsName; }
+    inline void SetWildcard(const wxString& rsWildCard) { m_sWildCard = rsWildCard; }
+    inline void SetStyle(long lStyle) { m_lDialogStyle = lStyle; }
+    inline void SetFilterIndex(int nFilterIndex) { m_nFilterIndex = nFilterIndex; }
+
+    inline wxString GetMessage(void) const { return m_sMessage; }
+    inline wxString GetPath(void) const { return m_sPath; }
+           void     GetPaths(wxArrayString& rasPath) const;
+    inline wxString GetDirectory(void) const { return m_sDir; }
+    inline wxString GetFilename(void) const { return m_sFileName; }
+    inline void     GetFilenames(wxArrayString& rasFilenames) { rasFilenames.Empty(); rasFilenames.Add( m_sFileName); }
+    inline wxString GetWildcard(void) const { return m_sWildCard; }
+    inline long     GetStyle(void) const { return m_lDialogStyle; }
+    inline int      GetFilterIndex() const { return m_nFilterIndex ; }
 
     int ShowModal();
 
 protected:
-    wxString    m_message;
-    long        m_dialogStyle;
-    wxWindow *  m_parent;
-    wxString    m_dir;
-    wxString    m_path; // Full path
-    wxString    m_fileName;
-    wxString    m_wildCard;
-    int         m_filterIndex;
-};
+    wxString                        m_sMessage;
+    long                            m_lDialogStyle;
+    wxWindow*                       m_pParent;
+    wxString                        m_sDir;
+    wxString                        m_sPath; // Full path
+    wxString                        m_sFileName;
+    wxArrayString                   m_asFileNames;
+    wxString                        m_sWildCard;
+    int                             m_nFilterIndex;
+    wxPoint                         m_vPos;
+}; // end of CLASS wxFileDialog
 
 #define wxOPEN              0x0001
 #define wxSAVE              0x0002
@@ -67,43 +73,52 @@ protected:
 #define wxHIDE_READONLY     0x0008
 #define wxFILE_MUST_EXIST   0x0010
 
+//
 // File selector - backward compatibility
-WXDLLEXPORT wxString wxFileSelector( const char *message = wxFileSelectorPromptStr
-                                    ,const char *default_path = NULL
-                                    ,const char *default_filename = NULL
-                                    ,const char *default_extension = NULL
-                                    ,const char *wildcard = wxFileSelectorDefaultWildcardStr
-                                    ,int flags = 0
-                                    ,wxWindow *parent = NULL
-                                    ,int x = -1
-                                    ,int y = -1
+//
+WXDLLEXPORT wxString wxFileSelector( const char* pzMessage = wxFileSelectorPromptStr
+                                    ,const char* pzDefaultPath = NULL
+                                    ,const char* pzDefaultFilename = NULL
+                                    ,const char* pzDefaultExtension = NULL
+                                    ,const char* pzWildcard = wxFileSelectorDefaultWildcardStr
+                                    ,int         nFlags = 0
+                                    ,wxWindow*   pParent = NULL
+                                    ,int         nX = -1
+                                    ,int         nY = -1
                                    );
 
+//
 // An extended version of wxFileSelector
-WXDLLEXPORT wxString wxFileSelectorEx( const char *message = wxFileSelectorPromptStr
-                                      ,const char *default_path = NULL
-                                      ,const char *default_filename = NULL
-                                      ,int *indexDefaultExtension = NULL
-                                      ,const char *wildcard = wxFileSelectorDefaultWildcardStr
-                                      ,int flags = 0
-                                      ,wxWindow *parent = NULL
-                                      ,int x = -1
-                                      ,int y = -1
+
+WXDLLEXPORT wxString wxFileSelectorEx( const char* pzMessage = wxFileSelectorPromptStr
+                                      ,const char* pzDefaultPath = NULL
+                                      ,const char* pzDefaultFilename = NULL
+                                      ,int*        pnIndexDefaultExtension = NULL
+                                      ,const char* pzWildcard = wxFileSelectorDefaultWildcardStr
+                                      ,int         nFlags = 0
+                                      ,wxWindow*   pParent = NULL
+                                      ,int         nX = -1
+                                      ,int         nY = -1
                                      );
 
+//
 // Generic file load dialog
-WXDLLEXPORT wxString wxLoadFileSelector( const char *what
-                                        ,const char *extension
-                                        ,const char *default_name = NULL
-                                        ,wxWindow *parent = NULL
+//
+WXDLLEXPORT wxString wxLoadFileSelector( const char* pzWhat
+                                        ,const char* pzExtension
+                                        ,const char* pzDefaultName = NULL
+                                        ,wxWindow*   pParent = NULL
                                        );
 
+//
 // Generic file save dialog
-WXDLLEXPORT wxString wxSaveFileSelector( const char *what
-                                        ,const char *extension
-                                        ,const char *default_name = NULL
-                                        ,wxWindow *parent = NULL
+//
+WXDLLEXPORT wxString wxSaveFileSelector( const char* pzWhat
+                                        ,const char* pzExtension
+                                        ,const char* pzDefaultName = NULL
+                                        ,wxWindow*   pParent = NULL
                                        );
 
 #endif
-    // _WX_FILEDLG_H_
+
+// _WX_FILEDLG_H_
diff --git a/src/os2/filedlg.cpp b/src/os2/filedlg.cpp
index 21c89aaa91..605d1b2cc4 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,27 @@ 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());
 
-    hWnd = ::WinFileDlg( GetHwndOf(m_pParent)
+    hWnd = ::WinFileDlg( HWND_DESKTOP
                         ,GetHwndOf(m_pParent)
                         ,&vFileDlg
                        );
@@ -357,14 +346,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);
diff --git a/src/os2/wx23.def b/src/os2/wx23.def
index 4235f92b8f..f9330bee47 100644
--- a/src/os2/wx23.def
+++ b/src/os2/wx23.def
@@ -12650,6 +12650,8 @@ EXPORTS
       __ct__12wxFileDialogFP8wxWindowRC8wxStringN32lRC7wxPoint
       ;wxFileDialog::ShowModal()
       ShowModal__12wxFileDialogFv
+      ;wxFileDialog::GetPaths(wxArrayString&) const
+      GetPaths__12wxFileDialogCFR13wxArrayString
       __vft12wxFileDialog8wxObject
       ;wxFileDialog::sm_classwxFileDialog
       sm_classwxFileDialog__12wxFileDialog
-- 
2.50.0

