]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirctrlg.cpp
got rid of wxEvtHandler::m_isWindow, use virtual functions (overridden in wxWindow...
[wxWidgets.git] / src / generic / dirctrlg.cpp
index cc8d6c55fddca29e609e84e8d0e0416c519e24cf..e6a1c6822eb854cfdc88f8bfc0eaf653e7b53aa9 100644 (file)
@@ -99,6 +99,9 @@ extern bool wxIsDriveAvailable(const wxString& dirName);
 #undef GetFirstChild
 #endif
 
+// declared in filedlg.h, defined in fldlgcmn.cpp
+extern int wxParseFileFilter(const wxString& filterStr, wxArrayString& descriptions, wxArrayString& filters);
+
 // ----------------------------------------------------------------------------
 // wxGetAvailableDrives, for WINDOWS, DOS, WXPM, MAC, UNIX (returns "/")
 // ----------------------------------------------------------------------------
@@ -348,6 +351,7 @@ bool wxIsDriveAvailable(const wxString& dirName)
 }
 #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)
@@ -529,13 +533,16 @@ void wxGenericDirCtrl::ShowHidden( bool show )
     SetPath(path);
 }
 
-void wxGenericDirCtrl::AddSection(const wxString& path, const wxString& name, int imageId)
+const wxTreeItemId
+wxGenericDirCtrl::AddSection(const wxString& path, const wxString& name, int imageId)
 {
     wxDirItemData *dir_item = new wxDirItemData(path,name,TRUE);
 
-    wxTreeItemId id = m_treeCtrl->AppendItem( m_rootId, name, imageId, -1, dir_item);
+    wxTreeItemId id = AppendItem( m_rootId, name, imageId, -1, dir_item);
 
     m_treeCtrl->SetItemHasChildren(id);
+
+    return id;
 }
 
 void wxGenericDirCtrl::SetupSections()
@@ -755,7 +762,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
         path += eachFilename;
 
         wxDirItemData *dir_item = new wxDirItemData(path,eachFilename,TRUE);
-        wxTreeItemId id = m_treeCtrl->AppendItem( parentId, eachFilename,
+        wxTreeItemId id = AppendItem( parentId, eachFilename,
                                       wxFileIconsTable::folder, -1, dir_item);
         m_treeCtrl->SetItemImage( id, wxFileIconsTable::folder_open,
                                   wxTreeItemIcon_Expanded );
@@ -787,7 +794,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
             int image_id = wxFileIconsTable::file;
             if (eachFilename.Find(wxT('.')) != wxNOT_FOUND)
                 image_id = wxTheFileIconsTable->GetIconID(eachFilename.AfterLast(wxT('.')));
-            (void)m_treeCtrl->AppendItem( parentId, eachFilename, image_id, -1, dir_item);
+            (void) AppendItem( parentId, eachFilename, image_id, -1, dir_item);
         }
     }
 }
@@ -1029,41 +1036,11 @@ bool wxGenericDirCtrl::ExtractWildcard(const wxString& filterStr, int n, wxStrin
 
 // Parses the global filter, returning the number of filters.
 // Returns 0 if none or if there's a problem.
-// filterStr is in the form:
-//
-// "All files (*.*)|*.*|JPEG Files (*.jpeg)|*.jpg"
+// filterStr is in the form: "All files (*.*)|*.*|JPEG Files (*.jpeg)|*.jpg"
 
 int wxGenericDirCtrl::ParseFilter(const wxString& filterStr, wxArrayString& filters, wxArrayString& descriptions)
 {
-    wxString str(filterStr);
-
-    wxString description, filter;
-    int pos;
-    bool finished = FALSE;
-    do
-    {
-        pos = str.Find(wxT('|'));
-        if (pos == -1)
-            return 0; // Problem
-        description = str.Left(pos);
-        str = str.Mid(pos+1);
-        pos = str.Find(wxT('|'));
-        if (pos == -1)
-        {
-            filter = str;
-            finished = TRUE;
-        }
-        else
-        {
-            filter = str.Left(pos);
-            str = str.Mid(pos+1);
-        }
-        descriptions.Add(description);
-        filters.Add(filter);
-    }
-    while (!finished) ;
-
-    return filters.Count();
+    return wxParseFileFilter(filterStr, descriptions, filters );
 }
 
 void wxGenericDirCtrl::DoResize()
@@ -1102,6 +1079,26 @@ void wxGenericDirCtrl::OnSize(wxSizeEvent& WXUNUSED(event))
     DoResize();
 }
 
+wxTreeItemId wxGenericDirCtrl::AppendItem (const wxTreeItemId & parent,
+                                          const wxString & text,
+                                          int image, int selectedImage,
+                                          wxTreeItemData * data)
+{
+  wxTreeCtrl *treeCtrl = GetTreeCtrl ();
+
+  wxASSERT (treeCtrl);
+
+  if (treeCtrl)
+  {
+    return treeCtrl->AppendItem (parent, text, image, selectedImage, data);
+  }
+  else
+  {
+    return wxTreeItemId();
+  }
+}
+
+
 //-----------------------------------------------------------------------------
 // wxDirFilterListCtrl
 //-----------------------------------------------------------------------------
@@ -1157,6 +1154,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt
     }
 }
 
+
 // ----------------------------------------------------------------------------
 // wxFileIconsTable icons
 // ----------------------------------------------------------------------------
@@ -1531,8 +1529,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));
@@ -1543,8 +1550,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));