]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/filedlg.cpp
Allow wx parents a chance to handle events fired by non-wx children. (i.e. wxActiveX...
[wxWidgets.git] / src / os2 / filedlg.cpp
index 6c3135b1b500e936fa10a3f73823cbeae17fb6a8..eb13f404432128d20e103ad46d85a2d2e7ab516a 100644 (file)
     #pragma hdrstop
 #endif
 
+#if wxUSE_FILEDLG
+
 #ifndef WX_PRECOMP
     #include "wx/utils.h"
     #include "wx/msgdlg.h"
-    #include "wx/dialog.h"
     #include "wx/filedlg.h"
     #include "wx/intl.h"
     #include "wx/log.h"
     #include "wx/app.h"
+    #include "wx/math.h"
 #endif
 
 #define INCL_PM
@@ -31,7 +33,6 @@
 
 #include "wx/os2/private.h"
 
-#include <math.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -56,7 +57,8 @@
 #ifndef MAXEXT
 # define MAXEXT                         5
 #endif
-IMPLEMENT_CLASS(wxFileDialog, wxDialog)
+
+IMPLEMENT_CLASS(wxFileDialog, wxFileDialogBase)
 
 // ----------------------------------------------------------------------------
 // CLASS wxFileDialog
@@ -71,34 +73,29 @@ wxFileDialog::wxFileDialog (
 , long                              lStyle
 , const wxPoint&                    rPos
 )
+    :wxFileDialogBase(pParent, rsMessage, rsDefaultDir, rsDefaultFileName, rsWildCard, lStyle, rPos)
+
 {
-    m_sMessage     = rsMessage;
-    m_lDialogStyle = lStyle;
-    if ((m_lDialogStyle & wxMULTIPLE) && (m_lDialogStyle & wxSAVE))
-        m_lDialogStyle &= ~wxMULTIPLE;
-    m_pParent      = pParent;
-    m_sPath        = "";
-    m_sFileName    = rsDefaultFileName;
-    m_sDir         = rsDefaultDir;
-    m_sWildCard    = rsWildCard;
-    m_nFilterIndex = 1;
-    m_vPos         = rPos;
+    if ((m_dialogStyle & wxMULTIPLE) && (m_dialogStyle & wxSAVE))
+        m_dialogStyle &= ~wxMULTIPLE;
+
+    m_filterIndex = 1;
 } // end of wxFileDialog::wxFileDialog
 
 void wxFileDialog::GetPaths (
   wxArrayString&                    rasPaths
 ) const
 {
-    wxString                        sDir(m_sDir);
-    size_t                          nCount = m_asFileNames.GetCount();
+    wxString                        sDir(m_dir);
+    size_t                          nCount = m_fileNames.GetCount();
 
     rasPaths.Empty();
-    if (m_sDir.Last() != _T('\\'))
+    if (m_dir.Last() != _T('\\'))
         sDir += _T('\\');
 
     for ( size_t n = 0; n < nCount; n++ )
     {
-        rasPaths.Add(sDir + m_asFileNames[n]);
+        rasPaths.Add(sDir + m_fileNames[n]);
     }
 } // end of wxFileDialog::GetPaths
 
@@ -112,14 +109,14 @@ int wxFileDialog::ShowModal()
     wxChar                          zTitleBuffer[wxMAXFILE + 1 + wxMAXEXT];  // the file-name, without path
     wxString                        sDir;
     size_t                          i;
-    size_t                          nLen = m_sDir.length();
+    size_t                          nLen = m_dir.length();
     int                             nCount = 0;
     FILEDLG                         vFileDlg;
     ULONG                           lFlags = 0L;
 
     memset(&vFileDlg, '\0', sizeof(FILEDLG));
-    if (m_pParent)
-        hWnd = (HWND) m_pParent->GetHWND();
+    if (m_parent)
+        hWnd = (HWND) m_parent->GetHWND();
     if (!hWnd && wxTheApp->GetTopWindow())
         hWnd = (HWND) wxTheApp->GetTopWindow()->GetHWND();
 
@@ -127,19 +124,24 @@ int wxFileDialog::ShowModal()
     *zFileNameBuffer = wxT('\0');
     *zTitleBuffer    = wxT('\0');
 
-    if (m_lDialogStyle & wxSAVE)
+    if (m_dialogStyle & wxSAVE)
         lFlags = FDS_SAVEAS_DIALOG;
     else
         lFlags = FDS_OPEN_DIALOG;
 
-    if ((m_lDialogStyle & wxHIDE_READONLY) || (m_lDialogStyle & wxSAVE))
+#if WXWIN_COMPATIBILITY_2_4
+    if (m_dialogStyle & wxHIDE_READONLY)
+        lFlags |= FDS_SAVEAS_DIALOG;
+#endif
+
+    if (m_dialogStyle & wxSAVE)
         lFlags |= FDS_SAVEAS_DIALOG;
-    if (m_lDialogStyle & wxMULTIPLE )
+    if (m_dialogStyle & wxMULTIPLE )
         lFlags |= FDS_OPEN_DIALOG | FDS_MULTIPLESEL;
 
     vFileDlg.cbSize = sizeof(FILEDLG);
     vFileDlg.fl = lFlags;
-    vFileDlg.pszTitle = zTitleBuffer;
+    vFileDlg.pszTitle = (PSZ)zTitleBuffer;
 
     //
     // Convert forward slashes to backslashes (file selector doesn't like
@@ -149,7 +151,7 @@ int wxFileDialog::ShowModal()
     sDir.reserve(nLen);
     for ( i = 0; i < nLen; i++ )
     {
-        wxChar                      ch = m_sDir[i];
+        wxChar                      ch = m_dir[i];
 
         switch (ch)
         {
@@ -165,7 +167,7 @@ int wxFileDialog::ShowModal()
             case _T('\\'):
                 while (i < nLen - 1)
                 {
-                    wxChar          chNext = m_sDir[i + 1];
+                    wxChar          chNext = m_dir[i + 1];
 
                     if (chNext != _T('\\') && chNext != _T('/'))
                         break;
@@ -189,12 +191,12 @@ int wxFileDialog::ShowModal()
                 sDir += ch;
         }
     }
-    if ( wxStrlen(m_sWildCard) == 0 )
-        sTheFilter = "";
+    if ( wxStrlen(m_wildCard) == 0 )
+        sTheFilter = wxEmptyString;
     else
-        sTheFilter = m_sWildCard;
+        sTheFilter = m_wildCard;
 
-    pzFilterBuffer = strtok((char*)sTheFilter.c_str(), "|");
+    wxStrtok((wxChar*)sTheFilter.c_str(), wxT("|"), &pzFilterBuffer);
     while(pzFilterBuffer != NULL)
     {
         if (nCount > 0 && !(nCount % 2))
@@ -203,58 +205,58 @@ int wxFileDialog::ShowModal()
         {
             sDir += pzFilterBuffer;
         }
-        pzFilterBuffer = strtok(NULL, "|");
+        wxStrtok(NULL, wxT("|"), &pzFilterBuffer);
         nCount++;
     }
     if (nCount == 0)
-        sDir += m_sFileName;
-    if (sDir.IsEmpty())
-        sDir = "*.*";
-    wxStrcpy(vFileDlg.szFullFile, sDir.c_str());
+        sDir += m_fileName;
+    if (sDir.empty())
+        sDir = wxT("*.*");
+    wxStrcpy((wxChar*)vFileDlg.szFullFile, sDir);
     sFilterBuffer = sDir;
 
     hWnd = ::WinFileDlg( HWND_DESKTOP
-                        ,GetHwndOf(m_pParent)
+                        ,GetHwndOf(m_parent)
                         ,&vFileDlg
                        );
     if (hWnd && vFileDlg.lReturn == DID_OK)
     {
-        m_asFileNames.Empty();
-        if ((m_lDialogStyle & wxMULTIPLE ) && vFileDlg.ulFQFCount > 1)
+        m_fileNames.Empty();
+        if ((m_dialogStyle & wxMULTIPLE ) && vFileDlg.ulFQFCount > 1)
         {
-            for (int i = 0; i < vFileDlg.ulFQFCount; i++)
+            for (int i = 0; i < (int)vFileDlg.ulFQFCount; i++)
             {
                 if (i == 0)
                 {
-                    m_sDir = wxPathOnly(wxString((const char*)*vFileDlg.papszFQFilename[0]));
-                    m_sPath = (const char*)*vFileDlg.papszFQFilename[0];
+                    m_dir = wxPathOnly(wxString((const wxChar*)*vFileDlg.papszFQFilename[0]));
+                    m_path = (const wxChar*)*vFileDlg.papszFQFilename[0];
                 }
-                m_sFileName = wxFileNameFromPath(wxString((const char*)*vFileDlg.papszFQFilename[i]));
-                m_asFileNames.Add(m_sFileName);
+                m_fileName = wxFileNameFromPath(wxString((const wxChar*)*vFileDlg.papszFQFilename[i]));
+                m_fileNames.Add(m_fileName);
             }
             ::WinFreeFileDlgList(vFileDlg.papszFQFilename);
         }
-        else if (!(m_lDialogStyle & wxSAVE))
+        else if (!(m_dialogStyle & wxSAVE))
         {
-            m_sPath = vFileDlg.szFullFile;
-            m_sFileName = wxFileNameFromPath(vFileDlg.szFullFile);
-            m_sDir = wxPathOnly(vFileDlg.szFullFile);
+            m_path = (wxChar*)vFileDlg.szFullFile;
+            m_fileName = wxFileNameFromPath(wxString((const wxChar*)vFileDlg.szFullFile));
+            m_dir = wxPathOnly((const wxChar*)vFileDlg.szFullFile);
         }
         else // save file
         {
             const wxChar*           pzExtension = NULL;
 
-            wxStrcpy(zFileNameBuffer, vFileDlg.szFullFile);
+            wxStrcpy(zFileNameBuffer, (const wxChar*)vFileDlg.szFullFile);
 
             int                     nIdx = wxStrlen(zFileNameBuffer) - 1;
             wxString                sExt;
 
             wxSplitPath( zFileNameBuffer
-                        ,&m_sPath
-                        ,&m_sFileName
+                        ,&m_path
+                        ,&m_fileName
                         ,&sExt
                        );
-            if (zFileNameBuffer[nIdx] == wxT('.') || sExt.IsEmpty())
+            if (zFileNameBuffer[nIdx] == wxT('.') || sExt.empty())
             {
                 zFileNameBuffer[nIdx] = wxT('\0');
 
@@ -269,7 +271,7 @@ int wxFileDialog::ShowModal()
                 //
                 pzExtension = sFilterBuffer.c_str();
 
-                for( int i = 0; i < sFilterBuffer.length(); i++ )
+                for( int i = 0; i < (int)sFilterBuffer.length(); i++ )
                 {
                     //
                     // Get extension
@@ -285,28 +287,28 @@ int wxFileDialog::ShowModal()
                         //
                         // Now concat extension to the fileName:
                         //
-                        m_sPath = wxString(zFileNameBuffer) + pzExtension;
+                        m_path = wxString(zFileNameBuffer) + pzExtension;
                     }
                 }
             }
             else
             {
-                m_sPath = vFileDlg.szFullFile;
+                m_path = (wxChar*)vFileDlg.szFullFile;
             }
-            m_sFileName = wxFileNameFromPath(vFileDlg.szFullFile);
-            m_sDir = wxPathOnly(vFileDlg.szFullFile);
+            m_fileName = wxFileNameFromPath((const wxChar*)vFileDlg.szFullFile);
+            m_dir = wxPathOnly((const wxChar*)vFileDlg.szFullFile);
 
             //
             // === Simulating the wxOVERWRITE_PROMPT >>============================
             //
-            if ((m_lDialogStyle & wxOVERWRITE_PROMPT) &&
-                (m_lDialogStyle & wxSAVE) &&
-                (wxFileExists(m_sPath.c_str())))
+            if ((m_dialogStyle & wxOVERWRITE_PROMPT) &&
+                (m_dialogStyle & wxSAVE) &&
+                (wxFileExists(m_path.c_str())))
             {
                 wxString            sMessageText;
 
                 sMessageText.Printf( _("File '%s' already exists.\nDo you want to replace it?")
-                                    ,m_sPath.c_str()
+                                    ,m_path.c_str()
                                    );
                 if (wxMessageBox( sMessageText
                                  ,wxT("Save File As")
@@ -322,3 +324,4 @@ int wxFileDialog::ShowModal()
     return wxID_CANCEL;
 } // end of wxFileDialog::ShowModal
 
+#endif // wxUSE_FILEDLG