X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/79e162f52668db950b1b7ff32f2f8cdcee535021..ddf6088b1e24b23854de2342c6f4ac942731216a:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index efc10b6c2f..7f95513ed7 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -85,11 +85,7 @@ #endif // __OS2__ #if defined(__WXMAC__) -# ifdef __DARWIN__ -# include "MoreFilesX.h" -# else -# include "MoreFilesExtras.h" -# endif +# include "MoreFilesX.h" #endif #ifdef __BORLANDC__ @@ -202,87 +198,36 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI #endif // __WIN32__/!__WIN32__ #elif defined(__WXMAC__) -#ifdef __DARWIN__ - FSRef **theVolRefs; - ItemCount theVolCount; - char thePath[FILENAME_MAX]; - - if (FSGetMountedVolumes(&theVolRefs, &theVolCount) == noErr) { - ItemCount index; - ::HLock( (Handle)theVolRefs ) ; - for (index = 0; index < theVolCount; ++index) { - // get the POSIX path associated with the FSRef - if ( FSRefMakePath(&((*theVolRefs)[index]), - (UInt8 *)thePath, sizeof(thePath)) != noErr ) { - continue; - } - // add path separator at end if necessary - wxString path( thePath , wxConvLocal) ; - if (path.Last() != wxFILE_SEP_PATH) { - path += wxFILE_SEP_PATH; - } - // get Mac volume name for display - FSVolumeRefNum vRefNum ; - HFSUniStr255 volumeName ; - if ( FSGetVRefNum(&((*theVolRefs)[index]), &vRefNum) != noErr ) { - continue; - } - if ( FSGetVInfo(vRefNum, &volumeName, NULL, NULL) != noErr ) { - continue; - } - // get C string from Unicode HFS name - // see: http://developer.apple.com/carbon/tipsandtricks.html - CFStringRef cfstr = CFStringCreateWithCharacters( kCFAllocatorDefault, - volumeName.unicode, - volumeName.length ); - // Do something with str - char *cstr = NewPtr(CFStringGetLength(cfstr) + 1); - if (( cstr == NULL ) || - !CFStringGetCString(cfstr, cstr, CFStringGetLength(cfstr) + 1, - kCFStringEncodingMacRoman)) + 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 ) ; + wxString name = wxMacHFSUniStrToString( &volumeName ) ; + + if ( (volumeInfo.flags & kFSVolFlagSoftwareLockedMask) || (volumeInfo.flags & kFSVolFlagHardwareLockedMask) ) { - CFRelease( cfstr ); - continue; + icon_ids.Add(wxFileIconsTable::cdrom); } - wxString name( cstr , wxConvLocal ); - DisposePtr( cstr ); - CFRelease( cfstr ); - - GetVolParmsInfoBuffer volParmsInfo; - UInt32 actualSize; - if ( FSGetVolParms(vRefNum, sizeof(volParmsInfo), &volParmsInfo, &actualSize) != noErr ) { - continue; + else + { + icon_ids.Add(wxFileIconsTable::drive); } + // todo other removable paths.Add(path); names.Add(name); - - if ( VolIsEjectable(&volParmsInfo) ) - icon_ids.Add(wxFileIconsTable::cdrom); - else - icon_ids.Add(wxFileIconsTable::drive); + volumeIndex++ ; } - ::HUnlock( (Handle)theVolRefs ); - ::DisposeHandle( (Handle)theVolRefs ); } -#else // !__DARWIN__ - FSSpec volume; - short index = 1; - while(1) - { - short actualCount = 0 ; - if (OnLine(&volume, 1, &actualCount, &index ) != noErr || actualCount==0) - { - break; - } - - wxString name = wxMacFSSpec2MacFilename( &volume ); - paths.Add(name + wxFILE_SEP_PATH); - names.Add(name); - icon_ids.Add(wxFileIconsTable::drive); - } -#endif // __DARWIN__ #elif defined(__UNIX__) paths.Add(wxT("/")); @@ -430,10 +375,6 @@ wxDirItemData::wxDirItemData(const wxString& path, const wxString& name, m_isDir = isDir; } -wxDirItemData::~wxDirItemData() -{ -} - void wxDirItemData::SetNewDirName(const wxString& path) { m_path = path; @@ -442,7 +383,7 @@ void wxDirItemData::SetNewDirName(const wxString& path) bool wxDirItemData::HasSubDirs() const { - if (m_path.IsEmpty()) + if (m_path.empty()) return false; wxDir dir; @@ -457,7 +398,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; @@ -578,10 +519,10 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, else filterStyle |= wxBORDER_SUNKEN; - m_treeCtrl = new wxTreeCtrl(this, wxID_TREECTRL, + 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; @@ -610,8 +551,19 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, ExpandDir(m_rootId); // automatically expand first level // Expand and select the default path - if (!m_defaultPath.IsEmpty()) + 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 SetBestSize(size); DoResize(); @@ -632,6 +584,11 @@ void wxGenericDirCtrl::Init() m_filterListCtrl = NULL; } +wxTreeCtrl* wxGenericDirCtrl::CreateTreeCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long treeStyle) +{ + return new wxTreeCtrl(parent, id, pos, size, treeStyle); +} + void wxGenericDirCtrl::ShowHidden( bool show ) { m_showHidden = show; @@ -685,7 +642,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) || @@ -948,7 +905,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)) @@ -1270,7 +1227,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt { Clear(); wxArrayString descriptions, filters; - size_t n = (size_t) wxParseCommonDialogsFilter(filter, filters, descriptions); + size_t n = (size_t) wxParseCommonDialogsFilter(filter, descriptions, filters); if (n > 0 && defaultFilter < (int) n) { @@ -1513,7 +1470,9 @@ void wxFileIconsTable::Create() m_smallImageList = new wxImageList(16, 16); // folder: - m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_FOLDER, wxART_CMN_DIALOG)); + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_FOLDER, + wxART_CMN_DIALOG, + wxSize(16, 16))); // folder_open m_smallImageList->Add(wxIcon(file_icons_tbl_folder_open_xpm)); // computer @@ -1527,11 +1486,15 @@ void wxFileIconsTable::Create() // removeable m_smallImageList->Add(wxIcon(file_icons_tbl_removeable_xpm)); // file - m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_CMN_DIALOG)); + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_NORMAL_FILE, + wxART_CMN_DIALOG, + wxSize(16, 16))); // executable if (GetIconID(wxEmptyString, _T("application/x-executable")) == file) { - m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_EXECUTABLE_FILE, wxART_CMN_DIALOG)); + m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_EXECUTABLE_FILE, + wxART_CMN_DIALOG, + wxSize(16, 16))); delete m_HashTable->Get(_T("exe")); m_HashTable->Delete(_T("exe")); m_HashTable->Put(_T("exe"), new wxFileIconEntry(executable)); @@ -1594,7 +1557,11 @@ static wxBitmap CreateAntialiasedBitmap(const wxImage& img) if (smask > 2) ps[0] = ps[1] = ps[2] = mr; else - ps[0] = sr >> 2, ps[1] = sg >> 2, ps[2] = sb >> 2; + { + ps[0] = (unsigned char)(sr >> 2); + ps[1] = (unsigned char)(sg >> 2); + ps[2] = (unsigned char)(sb >> 2); + } ps += 3; } p1 += size*2 * 3, p2 += size*2 * 3; @@ -1658,13 +1625,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); @@ -1675,7 +1642,7 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) wxLogNull logNull; if ( ft && ft->GetIcon(&iconLoc) ) { - ic = wxIcon( iconLoc.GetFileName() ); + ic = wxIcon( iconLoc ); } }