X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a78955e377453e2b8dacdbea05c3f5a8769d5e58..914955aaa034862c3b9b827463cde26455d06c79:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index e11a269bf6..d792d8e4d2 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -57,6 +57,7 @@ #ifdef __WXMSW__ #include +#include "wx/msw/winundef.h" // FIXME - Mingw32 1.0 has both _getdrive() and _chdrive(). For now, let's assume // older releases don't, but it should be verified and the checks modified @@ -201,18 +202,18 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI ItemCount volumeIndex = 1; OSErr err = noErr ; - + while( noErr == err ) { HFSUniStr255 volumeName ; FSRef fsRef ; FSVolumeInfo volumeInfo ; - err = FSGetVolumeInfo(0, volumeIndex, NULL, kFSVolInfoFlags , &volumeInfo , &volumeName, &fsRef); - if( noErr == err ) - { - wxString path = wxMacFSRefToPath( &fsRef ) ; + err = FSGetVolumeInfo(0, volumeIndex, NULL, kFSVolInfoFlags , &volumeInfo , &volumeName, &fsRef); + if( noErr == err ) + { + wxString path = wxMacFSRefToPath( &fsRef ) ; wxString name = wxMacHFSUniStrToString( &volumeName ) ; - + if ( (volumeInfo.flags & kFSVolFlagSoftwareLockedMask) || (volumeInfo.flags & kFSVolFlagHardwareLockedMask) ) { icon_ids.Add(wxFileIconsTable::cdrom); @@ -222,11 +223,11 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI icon_ids.Add(wxFileIconsTable::drive); } // todo other removable - + paths.Add(path); names.Add(name); volumeIndex++ ; - } + } } #elif defined(__UNIX__) @@ -383,7 +384,7 @@ void wxDirItemData::SetNewDirName(const wxString& path) bool wxDirItemData::HasSubDirs() const { - if (m_path.IsEmpty()) + if (m_path.empty()) return false; wxDir dir; @@ -398,7 +399,7 @@ bool wxDirItemData::HasSubDirs() const bool wxDirItemData::HasFiles(const wxString& WXUNUSED(spec)) const { - if (m_path.IsEmpty()) + if (m_path.empty()) return false; wxDir dir; @@ -486,6 +487,26 @@ wxGenericDirCtrl::wxGenericDirCtrl(void) Init(); } +void wxGenericDirCtrl::ExpandRoot() +{ + ExpandDir(m_rootId); // automatically expand first level + + // Expand and select the default path + if (!m_defaultPath.empty()) + { + ExpandPath(m_defaultPath); + } +#ifdef __UNIX__ + else + { + // On Unix, there's only one node under the (hidden) root node. It + // represents the / path, so the user would always have to expand it; + // let's do it ourselves + ExpandPath( wxT("/") ); + } +#endif +} + bool wxGenericDirCtrl::Create(wxWindow *parent, const wxWindowID id, const wxString& dir, @@ -505,6 +526,10 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, long treeStyle = wxTR_HAS_BUTTONS | wxTR_HIDE_ROOT; +#ifdef __WXGTK20__ + treeStyle |= wxTR_NO_LINES; +#endif + if (style & wxDIRCTRL_EDIT_LABELS) treeStyle |= wxTR_EDIT_LABELS; @@ -522,12 +547,19 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, m_treeCtrl = CreateTreeCtrl(this, wxID_TREECTRL, wxPoint(0,0), GetClientSize(), treeStyle); - if (!filter.IsEmpty() && (style & wxDIRCTRL_SHOW_FILTERS)) + if (!filter.empty() && (style & wxDIRCTRL_SHOW_FILTERS)) m_filterListCtrl = new wxDirFilterListCtrl(this, wxID_FILTERLISTCTRL, wxDefaultPosition, wxDefaultSize, filterStyle); m_defaultPath = dir; m_filter = filter; + if (m_filter.empty()) +#ifdef __UNIX__ + m_filter = wxT("*"); +#else + m_filter = wxT("*.*"); +#endif + SetFilterIndex(defaultFilter); if (m_filterListCtrl) @@ -548,22 +580,8 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, m_rootId = m_treeCtrl->AddRoot( rootName, 3, -1, rootData); m_treeCtrl->SetItemHasChildren(m_rootId); - ExpandDir(m_rootId); // automatically expand first level - // Expand and select the default path - if (!m_defaultPath.empty()) - { - ExpandPath(m_defaultPath); - } -#ifdef __UNIX__ - else - { - // On Unix, there's only one node under the (hidden) root node. It - // represents the / path, so the user would always have to expand it; - // let's do it ourselves - ExpandPath(wxT("/")); - } -#endif + ExpandRoot(); SetBestSize(size); DoResize(); @@ -617,10 +635,15 @@ void wxGenericDirCtrl::SetupSections() size_t n, count = wxGetAvailableDrives(paths, names, icons); +#ifdef __WXGTK20__ + wxString home = wxGetHomeDir(); + AddSection( home, _("Home directory"), 1); + home += wxT("/Desktop"); + AddSection( home, _("Desktop"), 1); +#endif + for (n = 0; n < count; n++) - { AddSection(paths[n], names[n], icons[n]); - } } void wxGenericDirCtrl::OnBeginEditItem(wxTreeEvent &event) @@ -642,7 +665,7 @@ void wxGenericDirCtrl::OnBeginEditItem(wxTreeEvent &event) void wxGenericDirCtrl::OnEndEditItem(wxTreeEvent &event) { - if ((event.GetLabel().IsEmpty()) || + if ((event.GetLabel().empty()) || (event.GetLabel() == _(".")) || (event.GetLabel() == _("..")) || (event.GetLabel().Find(wxT('/')) != wxNOT_FOUND) || @@ -723,6 +746,8 @@ void wxGenericDirCtrl::CollapseDir(wxTreeItemId parentId) * handle disappearing children! */ child = m_treeCtrl->GetFirstChild(parentId, cookie); } + if (parentId != m_treeCtrl->GetRootItem()) + m_treeCtrl->Collapse(parentId); } void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) @@ -810,7 +835,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) while(strTok.HasMoreTokens()) { curFilter = strTok.GetNextToken(); - if (d.GetFirst(& eachFilename, m_currentFilterStr, style)) + if (d.GetFirst(& eachFilename, curFilter, style)) { do { @@ -877,7 +902,18 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) void wxGenericDirCtrl::ReCreateTree() { CollapseDir(m_treeCtrl->GetRootItem()); - ExpandDir(m_treeCtrl->GetRootItem()); + ExpandRoot(); +} + +void wxGenericDirCtrl::CollapseTree() +{ + wxTreeItemIdValue cookie; + wxTreeItemId child = m_treeCtrl->GetFirstChild(m_rootId, cookie); + while (child.IsOk()) + { + CollapseDir(child); + child = m_treeCtrl->GetNextChild(m_rootId, cookie); + } } // Find the child that matches the first part of 'path'. @@ -905,7 +941,7 @@ wxTreeItemId wxGenericDirCtrl::FindChild(wxTreeItemId parentId, const wxString& { wxDirItemData* data = (wxDirItemData*) m_treeCtrl->GetItemData(childId); - if (data && !data->m_path.IsEmpty()) + if (data && !data->m_path.empty()) { wxString childPath(data->m_path); if (!wxEndsWithPathSeparator(childPath)) @@ -1080,7 +1116,11 @@ void wxGenericDirCtrl::SetFilterIndex(int n) if (ExtractWildcard(m_filter, n, f, d)) m_currentFilterStr = f; else +#ifdef __UNIX__ + m_currentFilterStr = wxT("*"); +#else m_currentFilterStr = wxT("*.*"); +#endif } void wxGenericDirCtrl::SetFilter(const wxString& filter) @@ -1091,7 +1131,11 @@ void wxGenericDirCtrl::SetFilter(const wxString& filter) if (ExtractWildcard(m_filter, m_currentFilter, f, d)) m_currentFilterStr = f; else +#ifdef __UNIX__ + m_currentFilterStr = wxT("*"); +#else m_currentFilterStr = wxT("*.*"); +#endif } // Extract description and actual filter from overall filter string @@ -1244,35 +1288,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt // wxFileIconsTable icons // ---------------------------------------------------------------------------- -/* Open folder */ -static const char * file_icons_tbl_folder_open_xpm[] = { -/* width height ncolors chars_per_pixel */ -"16 16 6 1", -/* colors */ -" s None c None", -". c #000000", -"+ c #c0c0c0", -"@ c #808080", -"# c #ffff00", -"$ c #ffffff", -/* pixels */ -" ", -" @@@@@ ", -" @$$$$$@ ", -" @$#+#+#$@@@@@@ ", -" @$+#+#+$$$$$$@.", -" @$#+#+#+#+#+#@.", -"@@@@@@@@@@@@@#@.", -"@$$$$$$$$$$@@+@.", -"@$#+#+#+#+##.@@.", -" @$#+#+#+#+#+.@.", -" @$+#+#+#+#+#.@.", -" @$+#+#+#+##@..", -" @@@@@@@@@@@@@.", -" .............", -" ", -" "}; - +#ifndef __WXGTK24__ /* Computer */ static const char * file_icons_tbl_computer_xpm[] = { "16 16 7 1", @@ -1299,117 +1315,7 @@ static const char * file_icons_tbl_computer_xpm[] = { " .oXoXoXoXoXo.o ", ".XOXXXXXXXXX.o ", "............o "}; - -/* Drive */ -static const char * file_icons_tbl_drive_xpm[] = { -"16 16 7 1", -" s None c None", -". c #808080", -"X c #c0c0c0", -"o c Black", -"O c Gray100", -"+ c Green", -"@ c #008000", -" ", -" ", -" ", -" ", -" ............. ", -" .XXXXXXXXXXXX.o", -".OOOOOOOOOOOO..o", -".XXXXXXXXX+@X..o", -".XXXXXXXXXXXX..o", -".X..........X..o", -".XOOOOOOOOOOX..o", -"..............o ", -" ooooooooooooo ", -" ", -" ", -" "}; - -/* CD-ROM */ -static const char *file_icons_tbl_cdrom_xpm[] = { -"16 16 10 1", -" s None c None", -". c #808080", -"X c #c0c0c0", -"o c Yellow", -"O c Blue", -"+ c Black", -"@ c Gray100", -"# c #008080", -"$ c Green", -"% c #008000", -" ... ", -" ..XoX.. ", -" .O.XoXXX+ ", -" ...O.oXXXX+ ", -" .O..X.XXXX+ ", -" ....X.+..XXX+", -" .XXX.+@+.XXX+", -" .X@XX.+.X@@X+", -" .....X...#XX@+ ", -".@@@...XXo.O@X+ ", -".@XXX..XXoXOO+ ", -".@++++..XoX+++ ", -".@$%@@XX+++X.+ ", -".............+ ", -" ++++++++++++ ", -" "}; - -/* Floppy */ -static const char * file_icons_tbl_floppy_xpm[] = { -"16 16 7 1", -" s None c None", -". c #808080", -"X c Gray100", -"o c #c0c0c0", -"O c Black", -"+ c Cyan", -"@ c Red", -" ......X", -" .ooooooO", -" .+++++OO", -" .++++++O", -" .++++++O", -" .ooooooO", -" .......o....oO", -" .oooooo.o.O.XoO", -".XXXXXXXXOOOOOO ", -".ooooooooo@o..O ", -".ooo....oooo..O ", -".o..OOOO...o..O ", -".oooXXXXoooo..O ", -".............O ", -" OOOOOOOOOOOO ", -" "}; - -/* Removeable */ -static const char * file_icons_tbl_removeable_xpm[] = { -"16 16 7 1", -" s None c None", -". c #808080", -"X c #c0c0c0", -"o c Black", -"O c Gray100", -"+ c Red", -"@ c #800000", -" ", -" ", -" ", -" ............. ", -" .XXXXXXXXXXXX.o", -".OOOOOOOOOOOO..o", -".OXXXXXXXXXXX..o", -".O+@.oooooo.X..o", -".OXXOooooooOX..o", -".OXXXOOOOOOXX..o", -".OXXXXXXXXXXX..o", -".O............o ", -" ooooooooooooo ", -" ", -" ", -" "}; +#endif // GTK+ < 2.4 // ---------------------------------------------------------------------------- // wxFileIconsTable & friends @@ -1474,17 +1380,34 @@ void wxFileIconsTable::Create() wxART_CMN_DIALOG, wxSize(16, 16))); // folder_open - m_smallImageList->Add(wxIcon(file_icons_tbl_folder_open_xpm)); + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_FOLDER_OPEN, + wxART_CMN_DIALOG, + wxSize(16, 16))); // computer +#ifdef __WXGTK24__ + // GTK24 uses this icon in the file open dialog + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_HARDDISK, + wxART_CMN_DIALOG, + wxSize(16, 16))); +#else m_smallImageList->Add(wxIcon(file_icons_tbl_computer_xpm)); +#endif // drive - m_smallImageList->Add(wxIcon(file_icons_tbl_drive_xpm)); + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_HARDDISK, + wxART_CMN_DIALOG, + wxSize(16, 16))); // cdrom - m_smallImageList->Add(wxIcon(file_icons_tbl_cdrom_xpm)); + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_CDROM, + wxART_CMN_DIALOG, + wxSize(16, 16))); // floppy - m_smallImageList->Add(wxIcon(file_icons_tbl_floppy_xpm)); + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_FLOPPY, + wxART_CMN_DIALOG, + wxSize(16, 16))); // removeable - m_smallImageList->Add(wxIcon(file_icons_tbl_removeable_xpm)); + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_REMOVABLE, + wxART_CMN_DIALOG, + wxSize(16, 16))); // file m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_CMN_DIALOG, @@ -1625,13 +1548,13 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) Create(); #if wxUSE_MIMETYPE - if (!extension.IsEmpty()) + if (!extension.empty()) { wxFileIconEntry *entry = (wxFileIconEntry*) m_HashTable->Get(extension); if (entry) return (entry -> id); } - wxFileType *ft = (mime.IsEmpty()) ? + wxFileType *ft = (mime.empty()) ? wxTheMimeTypesManager -> GetFileTypeFromExtension(extension) : wxTheMimeTypesManager -> GetFileTypeFromMimeType(mime); @@ -1642,7 +1565,7 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) wxLogNull logNull; if ( ft && ft->GetIcon(&iconLoc) ) { - ic = wxIcon( iconLoc.GetFileName() ); + ic = wxIcon( iconLoc ); } }