]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirctrlg.cpp
Added headers that didn't get installed.
[wxWidgets.git] / src / generic / dirctrlg.cpp
index 3745b47e4b2e7232f5232049abcb995fb45a9a30..2389927c24fcb469f80e41476203177580cd4285 100644 (file)
@@ -63,7 +63,9 @@
 //         older releases don't, but it should be verified and the checks modified
 //         accordingly.
 #if !defined(__GNUWIN32__) || (defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1)
+#if !defined(__WXWINCE__)
   #include <direct.h>
+#endif
   #include <stdlib.h>
   #include <ctype.h>
 #endif
@@ -110,7 +112,12 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI
 {
 #if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__)
 
-#ifdef __WIN32__
+#ifdef __WXWINCE__
+    // No logical drives; return "\"
+    paths.Add(wxT("\\"));
+    names.Add(wxT("\\"));
+    return 1;
+#elif defined(__WIN32__)
     wxChar driveBuffer[256];
     size_t n = (size_t) GetLogicalDriveStrings(255, driveBuffer);
     size_t i = 0;
@@ -290,7 +297,9 @@ bool wxIsDriveAvailable(const wxString& dirName)
 
 int setdrive(int drive)
 {
-#if defined(__GNUWIN32__) && \
+#ifdef __WXWINCE__
+    return 0;
+#elif defined(__GNUWIN32__) && \
     (defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1)
     return _chdrive(drive);
 #else
@@ -302,11 +311,7 @@ int setdrive(int drive)
        newdrive[1] = wxT(':');
        newdrive[2] = wxT('\0');
 #if defined(__WXMSW__)
-#ifdef __WIN16__
-    if (wxSetWorkingDirectory(newdrive))
-#else
        if (::SetCurrentDirectory(newdrive))
-#endif
 #else
     // VA doesn't know what LPSTR is and has its own set
        if (DosSetCurrentDir((PSZ)newdrive))
@@ -319,6 +324,9 @@ int setdrive(int drive)
 
 bool wxIsDriveAvailable(const wxString& dirName)
 {
+#ifdef __WXWINCE__
+    return FALSE;
+#else
 #ifdef __WIN32__
     UINT errorMode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
 #endif
@@ -348,17 +356,15 @@ bool wxIsDriveAvailable(const wxString& dirName)
 #endif
 
     return success;
+#endif
 }
 #endif // __WINDOWS__ || __WXPM__
 
 
 // Function which is called by quick sort. We want to override the default wxArrayString behaviour,
 // and sort regardless of case.
-static int LINKAGEMODE wxDirCtrlStringCompareFunction(const void *first, const void *second)
+static int LINKAGEMODE wxDirCtrlStringCompareFunction(wxString* strFirst, wxString* strSecond)
 {
-    wxString *strFirst = (wxString *)first;
-    wxString *strSecond = (wxString *)second;
-
     return strFirst->CmpNoCase(*strSecond);
 }
 
@@ -725,7 +731,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
             while (d.GetNext(& eachFilename));
         }
     }
-    dirs.Sort((wxArrayString::CompareFunction) wxDirCtrlStringCompareFunction);
+    dirs.Sort(wxDirCtrlStringCompareFunction);
 
     // Now do the filenames -- but only if we're allowed to
     if ((GetWindowStyle() & wxDIRCTRL_DIR_ONLY) == 0)
@@ -748,7 +754,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
                 while (d.GetNext(& eachFilename));
             }
         }
-        filenames.Sort((wxArrayString::CompareFunction) wxDirCtrlStringCompareFunction);
+        filenames.Sort(wxDirCtrlStringCompareFunction);
     }
 
     // Add the sorted dirs
@@ -1369,7 +1375,11 @@ wxFileIconsTable::wxFileIconsTable()
 
 wxFileIconsTable::~wxFileIconsTable()
 {
-    if (m_HashTable) delete m_HashTable;
+    if (m_HashTable)
+    {
+        WX_CLEAR_HASH_TABLE(*m_HashTable);
+        delete m_HashTable;
+    }
     if (m_smallImageList) delete m_smallImageList;
 }
 
@@ -1380,7 +1390,6 @@ void wxFileIconsTable::Create()
     m_HashTable = new wxHashTable(wxKEY_STRING);
     m_smallImageList = new wxImageList(16, 16);
 
-    m_HashTable->DeleteContents(TRUE);
     // folder:
     m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_FOLDER, wxART_CMN_DIALOG));
     // folder_open
@@ -1401,6 +1410,7 @@ void wxFileIconsTable::Create()
     if (GetIconID(wxEmptyString, _T("application/x-executable")) == file)
     {
         m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_EXECUTABLE_FILE, wxART_CMN_DIALOG));
+        delete m_HashTable->Get(_T("exe"));
         m_HashTable->Delete(_T("exe"));
         m_HashTable->Put(_T("exe"), new wxFileIconEntry(executable));
     }
@@ -1529,8 +1539,17 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime)
     wxFileType *ft = (mime.IsEmpty()) ?
                    wxTheMimeTypesManager -> GetFileTypeFromExtension(extension) :
                    wxTheMimeTypesManager -> GetFileTypeFromMimeType(mime);
+
+    wxIconLocation iconLoc;
     wxIcon ic;
-    if (ft == NULL || (!ft->GetIcon(&ic)) || (!ic.Ok()))
+    if ( ft && ft->GetIcon(&iconLoc) )
+    {
+        ic = wxIcon(iconLoc);
+    }
+
+    delete ft;
+
+    if ( !ic.Ok() )
     {
         int newid = file;
         m_HashTable->Put(extension, new wxFileIconEntry(newid));
@@ -1541,8 +1560,6 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime)
     tmpBmp.CopyFromIcon(ic);
     wxImage img = tmpBmp.ConvertToImage();
 
-    delete ft;
-
     int id = m_smallImageList->GetImageCount();
     if (img.GetWidth() == 16 && img.GetHeight() == 16)
         m_smallImageList->Add(wxBitmap(img));