]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirctrlg.cpp
prevent memory leak
[wxWidgets.git] / src / generic / dirctrlg.cpp
index 8e0994cf03e55e16dc07bfc7e5b251dba5fd7f02..b0f677fdff1f9c1599d2910844fda6f5eecb1710 100644 (file)
 #endif // __OS2__
 
 #if defined(__WXMAC__)
-    #include "MoreFilesX.h"
+//    #include "MoreFilesX.h"
 #endif
 
 #ifdef __BORLANDC__
     #include "dos.h"
 #endif
 
-extern WXDLLEXPORT_DATA(const wxChar) wxFileSelectorDefaultWildcardStr[];
+extern WXDLLEXPORT_DATA(const char) wxFileSelectorDefaultWildcardStr[];
 
 // If compiled under Windows, this macro can cause problems
 #ifdef GetFirstChild
@@ -251,7 +251,7 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI
         }
     }
 
-#elif defined(__UNIX__)
+#elif defined(__UNIX__) || defined(__WXPALMOS__)
     paths.Add(wxT("/"));
     names.Add(wxT("/"));
     icon_ids.Add(wxFileIconsTable::computer);
@@ -562,8 +562,6 @@ bool wxGenericDirCtrl::Create(wxWindow *parent,
 
     if ((style & wxDIRCTRL_3D_INTERNAL) == 0)
         treeStyle |= wxNO_BORDER;
-    else
-        treeStyle |= wxBORDER_SUNKEN;
 
     m_treeCtrl = CreateTreeCtrl(this, wxID_TREECTRL,
                                 wxPoint(0,0), GetClientSize(), treeStyle);
@@ -666,6 +664,14 @@ void wxGenericDirCtrl::SetupSections()
         AddSection(paths[n], names[n], icons[n]);
 }
 
+void wxGenericDirCtrl::SetFocus()
+{
+    // we don't need focus ourselves, give it to the tree so that the user
+    // could navigate it
+    if (m_treeCtrl)
+        m_treeCtrl->SetFocus();
+}
+
 void wxGenericDirCtrl::OnBeginEditItem(wxTreeEvent &event)
 {
     // don't rename the main entry "Sections"
@@ -742,6 +748,10 @@ void wxGenericDirCtrl::OnExpandItem(wxTreeEvent &event)
         m_rootId = m_treeCtrl->GetRootItem();
 
     ExpandDir(parentId);
+    if ( m_treeCtrl->GetChildrenCount(parentId, false) == 0 )
+    {
+        m_treeCtrl->SetItemHasChildren(parentId, false);
+    }
 }
 
 void wxGenericDirCtrl::OnCollapseItem(wxTreeEvent &event )
@@ -841,7 +851,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
     dirs.Sort(wxDirCtrlStringCompareFunction);
 
     // Now do the filenames -- but only if we're allowed to
-    if ((GetWindowStyle() & wxDIRCTRL_DIR_ONLY) == 0)
+    if (!HasFlag(wxDIRCTRL_DIR_ONLY))
     {
         d.Open(dirName);
 
@@ -888,20 +898,16 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
         m_treeCtrl->SetItemImage( id, wxFileIconsTable::folder_open,
                                   wxTreeItemIcon_Expanded );
 
-        // Has this got any children? If so, make it expandable.
-        // (There are two situations when a dir has children: either it
-        // has subdirectories or it contains files that weren't filtered
-        // out. The latter only applies to dirctrl with files.)
-        if ( dir_item->HasSubDirs() ||
-             (((GetWindowStyle() & wxDIRCTRL_DIR_ONLY) == 0) &&
-               dir_item->HasFiles(m_currentFilterStr)) )
-        {
-            m_treeCtrl->SetItemHasChildren(id);
-        }
+        // assume that it does have children by default as it can take a long
+        // time to really check for this (think remote drives...)
+        //
+        // and if we're wrong, we'll correct it later in OnExpandItem() if
+        // the user really tries to open this item
+        m_treeCtrl->SetItemHasChildren(id);
     }
 
     // Add the sorted filenames
-    if ((GetWindowStyle() & wxDIRCTRL_DIR_ONLY) == 0)
+    if (!HasFlag(wxDIRCTRL_DIR_ONLY))
     {
         for (i = 0; i < filenames.GetCount(); i++)
         {
@@ -1016,7 +1022,7 @@ bool wxGenericDirCtrl::ExpandPath(const wxString& path)
     {
         m_treeCtrl->Expand(lastId);
     }
-    if ((GetWindowStyle() & wxDIRCTRL_SELECT_FIRST) && data->m_isDir)
+    if (HasFlag(wxDIRCTRL_SELECT_FIRST) && data->m_isDir)
     {
         // Find the first file in this directory
         wxTreeItemIdValue cookie;
@@ -1330,7 +1336,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt
 // wxFileIconsTable icons
 // ----------------------------------------------------------------------------
 
-#ifndef __WXGTK24__
+#ifndef __WXGTK20__
 /* Computer (c) Julian Smart */
 static const char * file_icons_tbl_computer_xpm[] = {
 /* columns rows colors chars-per-pixel */
@@ -1395,7 +1401,7 @@ static const char * file_icons_tbl_computer_xpm[] = {
 " dfffffffffffffd",
 "                "
 };
-#endif // GTK+ < 2.4
+#endif // !GTK+ 2
 
 // ----------------------------------------------------------------------------
 // wxFileIconsTable & friends
@@ -1464,7 +1470,7 @@ void wxFileIconsTable::Create()
                                                    wxART_CMN_DIALOG,
                                                    wxSize(16, 16)));
     // computer
-#ifdef __WXGTK24__
+#ifdef __WXGTK20__
     // GTK24 uses this icon in the file open dialog
     m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_HARDDISK,
                                                    wxART_CMN_DIALOG,