X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e624f5ba66250b2139b1ab504cdf2d4794165d6d..4caf847c87568a6bb1defcc5fc3a9b5db37680b4:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index c1bda3cbd6..e6a1c6822e 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -79,7 +79,7 @@ #endif #include #include - +extern bool wxIsDriveAvailable(const wxString& dirName); #endif // __WXPM__ #if defined(__WXMAC__) @@ -99,6 +99,9 @@ #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) @@ -459,10 +463,14 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, if ((style & wxDIRCTRL_3D_INTERNAL) == 0) treeStyle |= wxNO_BORDER; + else + treeStyle |= wxBORDER_SUNKEN; long filterStyle = 0; if ((style & wxDIRCTRL_3D_INTERNAL) == 0) filterStyle |= wxNO_BORDER; + else + filterStyle |= wxBORDER_SUNKEN; m_treeCtrl = new wxTreeCtrl(this, wxID_TREECTRL, pos, size, treeStyle); @@ -525,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() @@ -540,7 +551,7 @@ void wxGenericDirCtrl::SetupSections() wxArrayInt icons; size_t n, count = wxGetAvailableDrives(paths, names, icons); - + for (n = 0; n < count; n++) { AddSection(paths[n], names[n], icons[n]); @@ -614,7 +625,9 @@ void wxGenericDirCtrl::OnExpandItem(wxTreeEvent &event) // VS: this is needed because the event handler is called from wxTreeCtrl // ctor when wxTR_HIDE_ROOT was specified - if (m_rootId == 0) + + if (!m_rootId.IsOk()) + m_rootId = m_treeCtrl->GetRootItem(); ExpandDir(parentId); @@ -749,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 ); @@ -781,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); } } } @@ -1023,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() @@ -1096,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 //----------------------------------------------------------------------------- @@ -1151,6 +1154,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt } } + // ---------------------------------------------------------------------------- // wxFileIconsTable icons // ---------------------------------------------------------------------------- @@ -1373,7 +1377,6 @@ wxFileIconsTable::~wxFileIconsTable() void wxFileIconsTable::Create() { wxCHECK_RET(!m_smallImageList && !m_HashTable, wxT("creating icons twice")); -printf("creating \n"); fflush(stdout); m_HashTable = new wxHashTable(wxKEY_STRING); m_smallImageList = new wxImageList(16, 16); @@ -1526,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)); @@ -1538,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));