]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirctrlg.cpp
fix for a crash due to using NULL inputConv in Unicode build introduced in rev 1.162
[wxWidgets.git] / src / generic / dirctrlg.cpp
index f9d20f06a39517876885ae23ad8c0c0fd18c35f3..1d7741560990a99f1d7cbfe6b5d37e858715b39c 100644 (file)
@@ -9,10 +9,6 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "dirctrlg.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -167,9 +163,19 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI
                 path.Printf(wxT("%c:\\"), 'A' + i);
                 name.Printf(wxT("%c:"), 'A' + i);
 
+                // Note: If _filesys is unsupported by some compilers,
+                //       we can always replace it by DosQueryFSAttach
+                char filesysname[20];
+                _filesys(name.fn_str(), filesysname, sizeof(filesysname));
+                /* FAT, LAN, HPFS, CDFS, NFS */
                 int imageId;
                 if (path == wxT("A:\\") || path == wxT("B:\\"))
                     imageId = wxFileIconsTable::floppy;
+                else if (!strcmp(filesysname, "CDFS"))
+                    imageId = wxFileIconsTable::cdrom;
+                else if (!strcmp(filesysname, "LAN") ||
+                         !strcmp(filesysname, "NFS"))
+                    imageId = wxFileIconsTable::drive;
                 else
                     imageId = wxFileIconsTable::drive;
                 paths.Add(path);
@@ -268,10 +274,9 @@ bool wxIsDriveAvailable(const wxString& dirName)
 
 #elif defined(__WINDOWS__) || defined(__OS2__)
 
-int setdrive(int drive)
+int setdrive(int WXUNUSED_IN_WINCE(drive))
 {
 #ifdef __WXWINCE__
-    wxUnusedVar(drive);
     return 0;
 #elif defined(__GNUWIN32__) && \
     (defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1)
@@ -301,10 +306,9 @@ int setdrive(int drive)
 #endif // !GNUWIN32
 }
 
-bool wxIsDriveAvailable(const wxString& dirName)
+bool wxIsDriveAvailable(const wxString& WXUNUSED_IN_WINCE(dirName))
 {
 #ifdef __WXWINCE__
-    wxUnusedVar(dirName);
     return false;
 #else
 #ifdef __WIN32__
@@ -826,8 +830,6 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
     // Now do the filenames -- but only if we're allowed to
     if ((GetWindowStyle() & wxDIRCTRL_DIR_ONLY) == 0)
     {
-        wxLogNull log;
-
         d.Open(dirName);
 
         if (d.IsOpened())
@@ -861,7 +863,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
     size_t i;
     for (i = 0; i < dirs.Count(); i++)
     {
-        wxString eachFilename(dirs[i]);
+        eachFilename = dirs[i];
         path = dirName;
         if (!wxEndsWithPathSeparator(path))
             path += wxString(wxFILE_SEP_PATH);
@@ -890,7 +892,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
     {
         for (i = 0; i < filenames.Count(); i++)
         {
-            wxString eachFilename(filenames[i]);
+            eachFilename = filenames[i];
             path = dirName;
             if (!wxEndsWithPathSeparator(path))
                 path += wxString(wxFILE_SEP_PATH);
@@ -993,48 +995,46 @@ bool wxGenericDirCtrl::ExpandPath(const wxString& path)
         if (id.IsOk())
             lastId = id;
     }
-    if (lastId.IsOk())
+    if (!lastId.IsOk())
+        return false;
+
+    wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(lastId);
+    if (data->m_isDir)
     {
-        wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(lastId);
-        if (data->m_isDir)
-        {
-            m_treeCtrl->Expand(lastId);
-        }
-        if ((GetWindowStyle() & wxDIRCTRL_SELECT_FIRST) && data->m_isDir)
+        m_treeCtrl->Expand(lastId);
+    }
+    if ((GetWindowStyle() & wxDIRCTRL_SELECT_FIRST) && data->m_isDir)
+    {
+        // Find the first file in this directory
+        wxTreeItemIdValue cookie;
+        wxTreeItemId childId = m_treeCtrl->GetFirstChild(lastId, cookie);
+        bool selectedChild = false;
+        while (childId.IsOk())
         {
-            // Find the first file in this directory
-            wxTreeItemIdValue cookie;
-            wxTreeItemId childId = m_treeCtrl->GetFirstChild(lastId, cookie);
-            bool selectedChild = false;
-            while (childId.IsOk())
-            {
-                wxDirItemData* data = (wxDirItemData*) m_treeCtrl->GetItemData(childId);
+            data = (wxDirItemData*) m_treeCtrl->GetItemData(childId);
 
-                if (data && data->m_path != wxEmptyString && !data->m_isDir)
-                {
-                    m_treeCtrl->SelectItem(childId);
-                    m_treeCtrl->EnsureVisible(childId);
-                    selectedChild = true;
-                    break;
-                }
-                childId = m_treeCtrl->GetNextChild(lastId, cookie);
-            }
-            if (!selectedChild)
+            if (data && data->m_path != wxEmptyString && !data->m_isDir)
             {
-                m_treeCtrl->SelectItem(lastId);
-                m_treeCtrl->EnsureVisible(lastId);
+                m_treeCtrl->SelectItem(childId);
+                m_treeCtrl->EnsureVisible(childId);
+                selectedChild = true;
+                break;
             }
+            childId = m_treeCtrl->GetNextChild(lastId, cookie);
         }
-        else
+        if (!selectedChild)
         {
             m_treeCtrl->SelectItem(lastId);
             m_treeCtrl->EnsureVisible(lastId);
         }
-
-        return true;
     }
     else
-        return false;
+    {
+        m_treeCtrl->SelectItem(lastId);
+        m_treeCtrl->EnsureVisible(lastId);
+    }
+
+    return true;
 }
 
 wxString wxGenericDirCtrl::GetPath() const