]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/filedlg.cpp
Catching up to latest thread changes
[wxWidgets.git] / src / msw / filedlg.cpp
index f2b7231c4db84e8095fef9ef9f328e43d0135bcc..acdf6567db86b90669e318d7312a1958b0dfc314 100644 (file)
@@ -28,6 +28,7 @@
     #include "wx/dialog.h"
     #include "wx/filedlg.h"
     #include "wx/intl.h"
     #include "wx/dialog.h"
     #include "wx/filedlg.h"
     #include "wx/intl.h"
+    #include "wx/log.h"
 #endif
 
 #include <windows.h>
 #endif
 
 #include <windows.h>
@@ -69,7 +70,7 @@ wxString wxFileSelector(const wxChar *title,
 
     wxString filter2;
     if ( defaultExtension && !filter )
 
     wxString filter2;
     if ( defaultExtension && !filter )
-        filter2 = wxString(_T("*.")) + defaultExtension;
+        filter2 = wxString(wxT("*.")) + defaultExtension;
     else if ( filter )
         filter2 = filter;
 
     else if ( filter )
         filter2 = filter;
 
@@ -91,7 +92,7 @@ wxString wxFileSelector(const wxChar *title,
 
         for( unsigned int i = 0; i < filter2.Len(); i++ )
         {
 
         for( unsigned int i = 0; i < filter2.Len(); i++ )
         {
-            if( filter2.GetChar(i) == _T('|') )
+            if( filter2.GetChar(i) == wxT('|') )
             {
                 // save the start index of the new filter
                 unsigned int is = i++;
             {
                 // save the start index of the new filter
                 unsigned int is = i++;
@@ -100,7 +101,7 @@ wxString wxFileSelector(const wxChar *title,
                 // find the end of the filter
                 for( ; i < filter2.Len(); i++ )
                 {
                 // find the end of the filter
                 for( ; i < filter2.Len(); i++ )
                 {
-                    if(filter2[i] == _T('|'))
+                    if(filter2[i] == wxT('|'))
                         break;
                 }
 
                         break;
                 }
 
@@ -160,8 +161,8 @@ wxString wxFileSelectorEx(const wxChar *title,
                        int       y)
 
 {
                        int       y)
 
 {
-    wxFileDialog fileDialog(parent, title ? title : _T(""), defaultDir ? defaultDir : _T(""),
-        defaultFileName ? defaultFileName : _T(""), filter ? filter : _T(""), flags, wxPoint(x, y));
+    wxFileDialog fileDialog(parent, title ? title : wxT(""), defaultDir ? defaultDir : wxT(""),
+        defaultFileName ? defaultFileName : wxT(""), filter ? filter : wxT(""), flags, wxPoint(x, y));
 
     if ( fileDialog.ShowModal() == wxID_OK )
     {
 
     if ( fileDialog.ShowModal() == wxID_OK )
     {
@@ -180,11 +181,11 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
     m_message = message;
     m_dialogStyle = style;
     m_parent = parent;
     m_message = message;
     m_dialogStyle = style;
     m_parent = parent;
-    m_path = _T("");
+    m_path = wxT("");
     m_fileName = defaultFileName;
     m_dir = defaultDir;
     m_wildCard = wildCard;
     m_fileName = defaultFileName;
     m_dir = defaultDir;
     m_wildCard = wildCard;
-    m_filterIndex = 1;
+    m_filterIndex = 0;
 }
 
 int wxFileDialog::ShowModal(void)
 }
 
 int wxFileDialog::ShowModal(void)
@@ -195,8 +196,8 @@ int wxFileDialog::ShowModal(void)
     static wxChar fileNameBuffer [ MAXPATH ];           // the file-name
     wxChar        titleBuffer    [ MAXFILE+1+MAXEXT ];  // the file-name, without path
 
     static wxChar fileNameBuffer [ MAXPATH ];           // the file-name
     wxChar        titleBuffer    [ MAXFILE+1+MAXEXT ];  // the file-name, without path
 
-    *fileNameBuffer = _T('\0');
-    *titleBuffer    = _T('\0');
+    *fileNameBuffer = wxT('\0');
+    *titleBuffer    = wxT('\0');
 
     long msw_flags = 0;
     if ( (m_dialogStyle & wxHIDE_READONLY) || (m_dialogStyle & wxSAVE) )
 
     long msw_flags = 0;
     if ( (m_dialogStyle & wxHIDE_READONLY) || (m_dialogStyle & wxSAVE) )
@@ -227,8 +228,8 @@ int wxFileDialog::ShowModal(void)
     size_t i = 0;
     size_t len = m_dir.Length();
     for (i = 0; i < len; i++)
     size_t i = 0;
     size_t len = m_dir.Length();
     for (i = 0; i < len; i++)
-        if (m_dir[i] == _T('/'))
-            m_dir[i] = _T('\\');
+        if (m_dir[i] == wxT('/'))
+            m_dir[i] = wxT('\\');
 
     of.lpstrInitialDir   = m_dir.c_str();
 
 
     of.lpstrInitialDir   = m_dir.c_str();
 
@@ -250,12 +251,12 @@ int wxFileDialog::ShowModal(void)
 
     wxString theFilter;
     if ( wxStrlen(m_wildCard) == 0 )
 
     wxString theFilter;
     if ( wxStrlen(m_wildCard) == 0 )
-        theFilter = wxString(_T("*.*"));
+        theFilter = wxString(wxT("*.*"));
     else
         theFilter = m_wildCard ;
     wxString filterBuffer;
 
     else
         theFilter = m_wildCard ;
     wxString filterBuffer;
 
-    if ( !wxStrchr( theFilter, _T('|') ) ) {    // only one filter ==> default text
+    if ( !wxStrchr( theFilter, wxT('|') ) ) {    // only one filter ==> default text
         filterBuffer.Printf(_("Files (%s)|%s"),
                             theFilter.c_str(), theFilter.c_str());
     }
         filterBuffer.Printf(_("Files (%s)|%s"),
                             theFilter.c_str(), theFilter.c_str());
     }
@@ -264,21 +265,21 @@ int wxFileDialog::ShowModal(void)
 
     }
 
 
     }
 
-    filterBuffer += _T("|");
+    filterBuffer += wxT("|");
     // Replace | with \0
     for (i = 0; i < filterBuffer.Len(); i++ ) {
     // Replace | with \0
     for (i = 0; i < filterBuffer.Len(); i++ ) {
-        if ( filterBuffer.GetChar(i) == _T('|') ) {
-            filterBuffer[i] = _T('\0');
+        if ( filterBuffer.GetChar(i) == wxT('|') ) {
+            filterBuffer[i] = wxT('\0');
         }
     }
 
     of.lpstrFilter  = (LPTSTR)(const wxChar *)filterBuffer;
         }
     }
 
     of.lpstrFilter  = (LPTSTR)(const wxChar *)filterBuffer;
-    of.nFilterIndex = m_filterIndex;
+    of.nFilterIndex = m_filterIndex + 1; // m_filterIndex is zero-based, but nFilterIndex is 1-based
 
     //=== Setting defaultFileName >>=========================================
 
     wxStrncpy( fileNameBuffer, (const wxChar *)m_fileName, MAXPATH-1 );
 
     //=== Setting defaultFileName >>=========================================
 
     wxStrncpy( fileNameBuffer, (const wxChar *)m_fileName, MAXPATH-1 );
-    fileNameBuffer[ MAXPATH-1 ] = _T('\0');
+    fileNameBuffer[ MAXPATH-1 ] = wxT('\0');
 
     of.lpstrFile = fileNameBuffer;  // holds returned filename
     of.nMaxFile  = MAXPATH;
 
     of.lpstrFile = fileNameBuffer;  // holds returned filename
     of.nMaxFile  = MAXPATH;
@@ -294,9 +295,9 @@ int wxFileDialog::ShowModal(void)
 
         //=== Adding the correct extension >>=================================
 
 
         //=== Adding the correct extension >>=================================
 
-        m_filterIndex = (int)of.nFilterIndex;
+        m_filterIndex = wxMax((int)of.nFilterIndex - 1, 0);
 
 
-        if ( of.nFileExtension && fileNameBuffer[ of.nFileExtension-1] != _T('.') )
+        if ( of.nFileExtension && fileNameBuffer[ of.nFileExtension-1] != wxT('.') )
         {                                    // user has typed an filename
             // without an extension:
 
         {                                    // user has typed an filename
             // without an extension:
 
@@ -307,24 +308,25 @@ int wxFileDialog::ShowModal(void)
                 extension = extension + wxStrlen( extension ) +1;
             }
 
                 extension = extension + wxStrlen( extension ) +1;
             }
 
-            extension = wxStrrchr( extension, _T('.') );
+            extension = wxStrrchr( extension, wxT('.') );
             if (  extension                                 // != "blabla"
             if (  extension                                 // != "blabla"
-                    && !wxStrrchr( extension, _T('*') )       // != "blabla.*"
-                    && !wxStrrchr( extension, _T('?') )       // != "blabla.?"
+                    && !wxStrrchr( extension, wxT('*') )       // != "blabla.*"
+                    && !wxStrrchr( extension, wxT('?') )       // != "blabla.?"
                     && extension[1]                           // != "blabla."
                     && extension[1]                           // != "blabla."
-                    && extension[1] != _T(' ') )              // != "blabla. "
+                    && extension[1] != wxT(' ') )              // != "blabla. "
             {
                 // now concat extension to the fileName:
                 m_fileName = wxString(fileNameBuffer) + extension;
 
                 int len = wxStrlen( fileNameBuffer );
                 wxStrncpy( fileNameBuffer + len, extension, MAXPATH - len );
             {
                 // now concat extension to the fileName:
                 m_fileName = wxString(fileNameBuffer) + extension;
 
                 int len = wxStrlen( fileNameBuffer );
                 wxStrncpy( fileNameBuffer + len, extension, MAXPATH - len );
-                fileNameBuffer[ MAXPATH -1 ] = _T('\0');
+                fileNameBuffer[ MAXPATH -1 ] = wxT('\0');
             }
         }
 
         m_path = fileNameBuffer;
         m_fileName = wxFileNameFromPath(fileNameBuffer);
             }
         }
 
         m_path = fileNameBuffer;
         m_fileName = wxFileNameFromPath(fileNameBuffer);
+        m_dir = wxPathOnly(fileNameBuffer);
 
 
         //=== Simulating the wxOVERWRITE_PROMPT >>============================
 
 
         //=== Simulating the wxOVERWRITE_PROMPT >>============================
@@ -341,9 +343,23 @@ int wxFileDialog::ShowModal(void)
             }
         }
 
             }
         }
 
-    } // END: if ( success )
+    }
+    else
+    {
+        // common dialog failed - why?
+#ifdef __WXDEBUG__
+        DWORD dwErr = CommDlgExtendedError();
+        if ( dwErr != 0 )
+        {
+            // this msg is only for developers
+            wxLogError(wxT("Common dialog failed with error code %0lx."),
+                       dwErr);
+        }
+        //else: it was just cancelled
+#endif
+    }
 
 
-    return (success ? wxID_OK : wxID_CANCEL) ;
+    return success ? wxID_OK : wxID_CANCEL;
 
 }
 
 
 }
 
@@ -362,11 +378,11 @@ wxString wxDefaultFileSelector(bool load,
   prompt.Printf(str, what);
 
   const wxChar *ext = extension;
   prompt.Printf(str, what);
 
   const wxChar *ext = extension;
-  if (*ext == _T('.'))
+  if (*ext == wxT('.'))
       ext++;
 
   wxString wild;
       ext++;
 
   wxString wild;
-  wild.Printf(_T("*.%s"), ext);
+  wild.Printf(wxT("*.%s"), ext);
 
   return wxFileSelector (prompt, NULL, default_name, ext, wild, 0, parent);
 }
 
   return wxFileSelector (prompt, NULL, default_name, ext, wild, 0, parent);
 }