]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/filedlg.cpp
scrolling to selection
[wxWidgets.git] / src / msw / filedlg.cpp
index 1e033933994393466fdf8a1994e5ed17aa03b97c..7888780761afc82e5f6c1c41d94e2fcf45c38c7b 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 && !defined(__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"
@@ -43,7 +42,7 @@
 
 #include "wx/msw/private.h"
 
-#if !defined(__WIN32__) || defined(__SALFORDC__)
+#if !defined(__WIN32__) || defined(__WXWINCE__)
     #include <commdlg.h>
 #endif
 
 // 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
@@ -124,6 +113,11 @@ void wxFileDialog::GetPaths(wxArrayString& paths) const
     }
 }
 
+void wxFileDialog::GetFilenames(wxArrayString& files) const
+{
+    files = m_fileNames;
+}
+
 void wxFileDialog::SetPath(const wxString& path)
 {
     wxString ext;
@@ -163,13 +157,12 @@ int wxFileDialog::ShowModal()
     {
         msw_flags |= OFN_NOCHANGEDIR;
     }
-/* chris elliott for some reason this does not work usefully if no extension
-   is given, as it test for junk instead of junk.ext
+
     if ( m_dialogStyle & wxOVERWRITE_PROMPT )
     {
         msw_flags |= OFN_OVERWRITEPROMPT;
     }
-*/
+
     OPENFILENAME of;
     wxZeroMemory(of);
 
@@ -314,10 +307,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 +339,11 @@ int wxFileDialog::ShowModal()
             if ( m_dir.Last() != _T('\\') )
                 dir += _T('\\');
 
-            m_fileNames.Sort(wxStringSortAscending);
             m_path = dir + m_fileName;
+            m_filterIndex = (int)of.nFilterIndex - 1;
         }
         else
         {
-            const wxChar* extension = NULL;
-
             //=== Adding the correct extension >>=================================
 
             m_filterIndex = (int)of.nFilterIndex - 1;
@@ -360,39 +352,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');
-                }
-
-                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;
+                for( int i = 0; i < maxFilter; i++ )           // get extension
+                    extension = extension + wxStrlen( extension ) + 1;
 
-                    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;
@@ -400,18 +368,6 @@ int wxFileDialog::ShowModal()
             m_fileNames.Add(m_fileName);
             m_dir = wxPathOnly(fileNameBuffer);
         }
-        //=== Simulating the wxOVERWRITE_PROMPT >>============================
-        //should we also test for file save style ??
-        if ( (m_dialogStyle & wxOVERWRITE_PROMPT) &&
-             ::wxFileExists( fileNameBuffer ) )
-             {
-             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 )
-             {
-                 success = FALSE;
-             }            
-        }
     }
     else
     {