]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/filedlg.cpp
fix for generating set/kill focus events for wxRadioBox (also fixes TABbing in a...
[wxWidgets.git] / src / msw / filedlg.cpp
index e3064ea425507db936796aaf2f2ffc3f0410b444..eb513c4001031f474c90f96922fcb95d22d38730 100644 (file)
@@ -17,7 +17,7 @@
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma implementation "filedlg.h"
 #endif
 
     #pragma hdrstop
 #endif
 
-#if wxUSE_FILEDLG
+#if wxUSE_FILEDLG && !wxUSE_SMARTPHONE
 
 #ifndef WX_PRECOMP
     #include "wx/utils.h"
     #include "wx/msgdlg.h"
-    #include "wx/dialog.h"
     #include "wx/filedlg.h"
     #include "wx/filefn.h"
     #include "wx/intl.h"
 // implementation
 // ============================================================================
 
-// ----------------------------------------------------------------------------
-// wxWin macros
-// ----------------------------------------------------------------------------
-
-IMPLEMENT_CLASS(wxFileDialog, wxDialog)
+IMPLEMENT_CLASS(wxFileDialog, wxFileDialogBase)
 
 // ----------------------------------------------------------------------------
 // wxFileDialog
@@ -92,18 +87,12 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
                            const wxString& defaultFileName,
                            const wxString& wildCard,
                            long style,
-                           const wxPoint& WXUNUSED(pos))
+                           const wxPoint& pos)
+             :wxFileDialogBase(parent, message, defaultDir, defaultFileName, wildCard, style, pos)
+
 {
-    m_message = message;
-    m_dialogStyle = style;
     if ( ( m_dialogStyle & wxMULTIPLE ) && ( m_dialogStyle & wxSAVE ) )
         m_dialogStyle &= ~wxMULTIPLE;
-    m_parent = parent;
-    m_path = wxEmptyString;
-    m_fileName = defaultFileName;
-    m_dir = defaultDir;
-    m_wildCard = wildCard;
-    m_filterIndex = 0;
 }
 
 void wxFileDialog::GetPaths(wxArrayString& paths) const
@@ -314,10 +303,11 @@ int wxFileDialog::ShowModal()
 
         if ( ( m_dialogStyle & wxMULTIPLE ) &&
 #if defined(OFN_EXPLORER)
-             ( fileNameBuffer[of.nFileOffset-1] == wxT('\0') ) )
+             ( fileNameBuffer[of.nFileOffset-1] == wxT('\0') )
 #else
-             ( fileNameBuffer[of.nFileOffset-1] == wxT(' ') ) )
+             ( fileNameBuffer[of.nFileOffset-1] == wxT(' ') )
 #endif // OFN_EXPLORER
+           )
         {
 #if defined(OFN_EXPLORER)
             m_dir = fileNameBuffer;
@@ -345,13 +335,10 @@ int wxFileDialog::ShowModal()
             if ( m_dir.Last() != _T('\\') )
                 dir += _T('\\');
 
-            m_fileNames.Sort(wxStringSortAscending);
             m_path = dir + m_fileName;
         }
         else
         {
-            const wxChar* extension = NULL;
-
             //=== Adding the correct extension >>=================================
 
             m_filterIndex = (int)of.nFilterIndex - 1;
@@ -360,39 +347,15 @@ int wxFileDialog::ShowModal()
                  (of.nFileExtension && fileNameBuffer[of.nFileExtension] == wxT('\0')) )
             {
                 // User has typed a filename without an extension:
+                const wxChar* extension = filterBuffer;
+                int   maxFilter = (int)(of.nFilterIndex*2L) - 1;
 
-                // A filename can end in a "." here ("abc."), this means it
-                // does not have an extension. Because later on a "." with
-                // the default extension is appended we remove the "." if
-                // filename ends with one (We don't want files called
-                // "abc..ext")
-                int idx = wxStrlen(fileNameBuffer) - 1;
-                if ( fileNameBuffer[idx] == wxT('.') )
-                {
-                    fileNameBuffer[idx] = wxT('\0');
-                }
+                for( int i = 0; i < maxFilter; i++ )           // get extension
+                    extension = extension + wxStrlen( extension ) + 1;
 
-                int   maxFilter = (int)(of.nFilterIndex*2L-1L);
-                extension = filterBuffer;
-
-                for( int i = 0; i < maxFilter; i++ ) {          // get extension
-                    extension = extension + wxStrlen( extension ) +1;
-                }
-
-                extension = wxStrrchr( extension, wxT('.') );
-                if (  extension                                 // != "blabla"
-                        && !wxStrrchr( extension, wxT('*') )       // != "blabla.*"
-                        && !wxStrrchr( extension, wxT('?') )       // != "blabla.?"
-                        && extension[1]                           // != "blabla."
-                        && extension[1] != wxT(' ') )              // != "blabla. "
-                {
-                    // now concat extension to the fileName:
-                    m_fileName = wxString(fileNameBuffer) + extension;
-
-                    int len = wxStrlen( fileNameBuffer );
-                    wxStrncpy( fileNameBuffer + len, extension, wxMAXPATH - len );
-                    fileNameBuffer[ wxMAXPATH -1 ] = wxT('\0');
-                }
+                m_fileName = AppendExtension(fileNameBuffer, extension);
+                wxStrncpy(fileNameBuffer, m_fileName.c_str(), wxMin(m_fileName.Len(), wxMAXPATH-1));
+                fileNameBuffer[wxMin(m_fileName.Len(), wxMAXPATH-1)] = wxT('\0');
             }
 
             m_path = fileNameBuffer;
@@ -407,7 +370,7 @@ int wxFileDialog::ShowModal()
              {
              wxString messageText;
              messageText.Printf(_("File '%s' already exists.\nDo you want to replace it?"), fileNameBuffer);
-             if ( wxMessageBox(messageText, wxT("Save File As"), wxYES_NO | wxICON_EXCLAMATION  ) != wxYES )
+             if ( wxMessageBox(messageText, _("Save File As"), wxYES_NO | wxICON_EXCLAMATION    ) != wxYES )
              {
                  success = FALSE;
              }