// 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
// accordingly.
-#if !defined(__GNUWIN32__) || \
- (defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1)
+#if !defined(__GNUWIN32__) || (defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1)
#include <direct.h>
#include <stdlib.h>
#include <ctype.h>
#define INCL_BASE
#include <os2.h>
+#ifndef __EMX__
#include <direct.h>
+#endif
#include <stdlib.h>
#include <ctype.h>
#endif // __WXPM__
#if defined(__WXMAC__)
-# include "MoreFilesExtras.h"
+# ifdef __DARWIN__
+# include "MoreFilesX.h"
+# else
+# include "MoreFilesExtras.h"
+# endif
#endif
#ifdef __BORLANDC__
bool success = TRUE;
// Check if this is a root directory and if so,
- // whether the drive is avaiable.
+ // whether the drive is available.
if (dirName.Len() == 3 && dirName[(size_t)1] == wxT(':'))
{
wxString dirNameLower(dirName.Lower());
-#if defined(__GNUWIN32__) && \
- !(defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1)
+#if defined(__GNUWIN32__) && !(defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1)
success = wxPathExists(dirNameLower);
#else
int currentDrive = _getdrive();
#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 ) ;
+ 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)) {
+ CFRelease( cstr );
+ continue;
+ }
+ wxString name( cstr ) ;
+ DisposePtr( cstr ) ;
+ CFRelease( cfstr );
+
+ GetVolParmsInfoBuffer volParmsInfo;
+ UInt32 actualSize;
+ if ( FSGetVolParms(vRefNum, sizeof(volParmsInfo), &volParmsInfo, &actualSize) != noErr ) {
+ continue;
+ }
+
+ if ( VolIsEjectable(&volParmsInfo) ) {
+ AddSection(path, name, 5/*cd-rom*/);
+ }
+ else {
+ AddSection(path, name, 4/*disk*/);
+ }
+ }
+ ::HUnlock( (Handle)theVolRefs ) ;
+ ::DisposeHandle( (Handle)theVolRefs ) ;
+ }
+# else
FSSpec volume ;
short index = 1 ;
while(1) {
short actualCount = 0 ;
- if ( OnLine( &volume , 1 , &actualCount , &index ) != noErr || actualCount == 0 )
+ if ( OnLine( &volume , 1 , &actualCount , &index ) != noErr || actualCount == 0 ) {
break ;
-
+ }
+
wxString name = wxMacFSSpec2MacFilename( &volume ) ;
- AddSection(name + wxFILE_SEP_PATH, name, 0);
+ AddSection(name + wxFILE_SEP_PATH, name, 4/*disk*/);
}
+# endif /* __DARWIN__ */
#elif defined(__UNIX__)
AddSection(wxT("/"), wxT("/"), 3/*computer icon*/);
#else
}
// don't rename the individual sections
- if (m_treeCtrl->GetParent( event.GetItem() ) == m_rootId)
+ if (m_treeCtrl->GetItemParent( event.GetItem() ) == m_rootId)
{
event.Veto();
return;
{
wxDirItemData* data = (wxDirItemData*) m_treeCtrl->GetItemData(childId);
- if (data && data->m_path != "" && !data->m_isDir)
+ if (data && data->m_path != wxT("") && !data->m_isDir)
{
m_treeCtrl->SelectItem(childId);
m_treeCtrl->EnsureVisible(childId);