]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filename.cpp
implementation of the range insert for wxStringArray (patch 975003)
[wxWidgets.git] / src / common / filename.cpp
index c5f7f9a8a3d0faa16cd9a39e309ebd27fc8fd3f4..a74aa0fa4b33dd5a2fb7cd66ee15591866e38b27 100644 (file)
@@ -163,7 +163,8 @@ public:
                      filename,                      // name
                      mode == Read ? GENERIC_READ    // access mask
                                   : GENERIC_WRITE,
-                     0,                             // no sharing
+                     FILE_SHARE_READ |              // sharing mode
+                     FILE_SHARE_WRITE,              // (allow everything)
                      NULL,                          // no secutity attr
                      OPEN_EXISTING,                 // creation disposition
                      0,                             // no flags
@@ -585,7 +586,7 @@ wxFileName::CreateTempFileName(const wxString& prefix, wxFile *fileTemp)
     }
 
 #elif defined(__WINDOWS__) && !defined(__WXMICROWIN__)
-#ifdef __WIN32__
+
     if ( dir.empty() )
     {
         if ( !::GetTempPath(MAX_PATH, wxStringBuffer(dir, MAX_PATH + 1)) )
@@ -612,12 +613,6 @@ wxFileName::CreateTempFileName(const wxString& prefix, wxFile *fileTemp)
 
         path.clear();
     }
-#else // Win16
-    if ( !::GetTempFileName(NULL, prefix, 0, wxStringBuffer(path, 1025)) )
-    {
-        path.clear();
-    }
-#endif // Win32/16
 
 #else // !Windows
     if ( dir.empty() )
@@ -946,7 +941,7 @@ bool wxFileName::Normalize(int flags,
         m_dirs.Add(dir);
     }
     
-#ifdef __WIN32__
+#if defined(__WIN32__) && !defined(__WXWINCE__) && wxUSE_OLE
     if ( (flags & wxPATH_NORM_SHORTCUT) )
     {
         wxString filename;
@@ -967,6 +962,7 @@ bool wxFileName::Normalize(int flags,
     {
         // VZ: expand env vars here too?
 
+        m_volume.MakeLower();
         m_name.MakeLower();
         m_ext.MakeLower();
     }
@@ -990,17 +986,28 @@ bool wxFileName::Normalize(int flags,
 // get the shortcut target
 // ----------------------------------------------------------------------------
 
-#if defined(__WIN32__) && !defined(__WXWINCE__)
+// WinCE (3) doesn't have CLSID_ShellLink, IID_IShellLink definitions.
+// The .lnk file is a plain text file so it should be easy to
+// make it work. Hint from Google Groups:
+// "If you open up a lnk file, you'll see a
+// number, followed by a pound sign (#), followed by more text. The
+// number is the number of characters that follows the pound sign. The
+// characters after the pound sign are the command line (which _can_
+// include arguments) to be executed. Any path (e.g. \windows\program
+// files\myapp.exe) that includes spaces needs to be enclosed in
+// quotation marks."
+
+#if defined(__WIN32__) && !defined(__WXWINCE__) && wxUSE_OLE
+// The following lines are necessary under WinCE
+// #include "wx/msw/private.h"
+// #include <ole2.h>
 #include <shlobj.h>
+#if defined(__WXWINCE__)
+#include <shlguid.h>
 #endif
 
-#ifdef __WIN32__
 bool wxFileName::GetShortcutTarget(const wxString& shortcutPath, wxString& targetFilename, wxString* arguments)
 {
-#ifdef __WXWINCE__
-    // Not tested on WinCE, so don't compile yet
-    return shortcutPath;
-#else
     wxString path, file, ext;
     wxSplitPath(shortcutPath, & path, & file, & ext);
     
@@ -1022,7 +1029,7 @@ bool wxFileName::GetShortcutTarget(const wxString& shortcutPath, wxString& targe
                hres = psl->QueryInterface( IID_IPersistFile, (LPVOID *) &ppf);
                if (SUCCEEDED(hres))
                {
-                       WORD wsz[MAX_PATH];
+                       WCHAR wsz[MAX_PATH];
 
                        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, shortcutPath.mb_str(), -1, wsz,
                 MAX_PATH);
@@ -1046,7 +1053,6 @@ bool wxFileName::GetShortcutTarget(const wxString& shortcutPath, wxString& targe
        }
        psl->Release();
        return success;
-#endif
 }
 #endif
 
@@ -1137,8 +1143,8 @@ bool wxFileName::SameAs(const wxFileName& filepath, wxPathFormat format) const
 
     // get cwd only once - small time saving
     wxString cwd = wxGetCwd();
-    fn1.Normalize(wxPATH_NORM_ALL & ~wxPATH_NORM_CASE, cwd, format);
-    fn2.Normalize(wxPATH_NORM_ALL & ~wxPATH_NORM_CASE, cwd, format);
+    fn1.Normalize(wxPATH_NORM_ALL wxPATH_NORM_CASE, cwd, format);
+    fn2.Normalize(wxPATH_NORM_ALL wxPATH_NORM_CASE, cwd, format);
 
     if ( fn1.GetFullPath() == fn2.GetFullPath() )
         return true;
@@ -1670,18 +1676,17 @@ void wxFileName::SplitPath(const wxString& fullpathWithVolume,
     size_t posLastDot = fullpath.find_last_of(wxFILE_SEP_EXT);
     size_t posLastSlash = fullpath.find_last_of(sepPath);
 
+    // check whether this dot occurs at the very beginning of a path component
     if ( (posLastDot != wxString::npos) &&
-            ((format == wxPATH_UNIX) || (format == wxPATH_VMS)) )
-    {
-        if ( (posLastDot == 0) ||
-             (fullpath[posLastDot - 1] == sepPath[0u] ) )
+         (posLastDot == 0 ||
+            IsPathSeparator(fullpath[posLastDot - 1]) ||
+            (format == wxPATH_VMS && fullpath[posLastDot - 1] == _T(']'))) )
         {
-            // under Unix and VMS, dot may be (and commonly is) the first
+            // dot may be (and commonly -- at least under Unix -- is) the first
             // character of the filename, don't treat the entire filename as
             // extension in this case
             posLastDot = wxString::npos;
         }
-    }
 
     // if we do have a dot and a slash, check that the dot is in the name part
     if ( (posLastDot != wxString::npos) &&
@@ -1973,25 +1978,25 @@ WX_DEFINE_EXPORTED_OBJARRAY(MacDefaultExtensionArray) ;
 
 MacDefaultExtensionArray gMacDefaultExtensions ;
 
-static void MacEnsureDefaultExtensionsLoaded()
+// load the default extensions
+MacDefaultExtensionRecord gDefaults[] =
 {
-  if ( !gMacDefaultExtensionsInited )
-  {
-
-    // load the default extensions
-    MacDefaultExtensionRecord defaults[1] =
-    {
-      MacDefaultExtensionRecord( wxT("txt") , 'TEXT' , 'ttxt' ) ,
-
-    } ;
-    // we could load the pc exchange prefs here too
+    MacDefaultExtensionRecord( wxT("txt") , 'TEXT' , 'ttxt' ) ,
+    MacDefaultExtensionRecord( wxT("tif") , 'TIFF' , '****' ) ,
+    MacDefaultExtensionRecord( wxT("jpg") , 'JPEG' , '****' ) ,
+} ;
 
-    for ( size_t i = 0 ; i < WXSIZEOF( defaults ) ; ++i )
+static void MacEnsureDefaultExtensionsLoaded()
+{
+    if ( !gMacDefaultExtensionsInited )
     {
-      gMacDefaultExtensions.Add( defaults[i] ) ;
+        // we could load the pc exchange prefs here too
+        for ( size_t i = 0 ; i < WXSIZEOF( gDefaults ) ; ++i )
+        {
+            gMacDefaultExtensions.Add( gDefaults[i] ) ;
+        }
+        gMacDefaultExtensionsInited = true ;
     }
-    gMacDefaultExtensionsInited = true ;
-  }
 }
 bool wxFileName::MacSetTypeAndCreator( wxUint32 type , wxUint32 creator )
 {