use MoreFilesX instead of MoreFiles when building with Apple Developer Tools

improved wxGenericDirCtrl when building with Apple Developer Tools
improved wxDirData to correctly handle hidden directories


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18483 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Gilles Depeyrot
2003-01-01 17:53:02 +00:00
parent 15126fa8c2
commit 2d4e4f802f
8 changed files with 648 additions and 511 deletions

View File

@@ -144,10 +144,14 @@
#endif
#ifdef __WXMAC__
# ifdef __DARWIN__
# include "MoreFilesX.h"
# else
# include "MoreFiles.h"
# include "MoreFilesExtras.h"
# include "FullPath.h"
# include "FSpCompat.h"
# endif
#endif
// ----------------------------------------------------------------------------

View File

@@ -79,7 +79,11 @@
#endif // __WXPM__
#if defined(__WXMAC__)
# ifdef __DARWIN__
# include "MoreFilesX.h"
# else
# include "MoreFilesExtras.h"
# endif
#endif
#ifdef __BORLANDC__
@@ -373,7 +377,7 @@ bool wxIsDriveAvailable(const wxString& dirName)
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());
@@ -660,16 +664,81 @@ void wxGenericDirCtrl::SetupSections()
#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

View File

@@ -42,8 +42,12 @@
#include "wx/mac/private.h"
#include "MoreFiles.h"
#include "MoreFilesExtras.h"
#ifdef __DARWIN__
# include "MoreFilesX.h"
#else
# include "MoreFiles.h"
# include "MoreFilesExtras.h"
#endif
// ----------------------------------------------------------------------------
// constants
@@ -102,6 +106,8 @@ private:
wxDirData::wxDirData(const wxString& dirname)
: m_dirname(dirname)
{
OSErr err;
// throw away the trailing slashes
size_t n = m_dirname.length();
wxCHECK_RET( n, _T("empty dir name in wxDir") );
@@ -111,15 +117,26 @@ wxDirData::wxDirData(const wxString& dirname)
m_dirname.Truncate(n + 1);
#ifdef __DARWIN__
FSRef theRef;
// get the FSRef associated with the POSIX path
err = FSPathMakeRef((const UInt8 *) m_dirname, &theRef, NULL);
FSGetVRefNum(&theRef, &(m_CPB.hFileInfo.ioVRefNum));
err = FSGetNodeID( &theRef , &m_dirId , &m_isDir ) ;
#else
FSSpec fsspec ;
wxMacFilename2FSSpec( m_dirname , &fsspec ) ;
m_CPB.hFileInfo.ioVRefNum = fsspec.vRefNum ;
err = FSpGetDirectoryID( &fsspec , &m_dirId , &m_isDir ) ;
#endif
wxASSERT_MSG( (err == noErr) || (err == nsvErr) , "Error accessing directory " + m_dirname) ;
m_CPB.hFileInfo.ioNamePtr = m_name ;
m_index = 0 ;
OSErr err = FSpGetDirectoryID( &fsspec , &m_dirId , &m_isDir ) ;
wxASSERT_MSG( err == noErr , "Error accessing directory") ;
}
wxDirData::~wxDirData()
@@ -157,19 +174,26 @@ bool wxDirData::Read(wxString *filename)
strcpy( (char *)m_name, c_name);
#else
p2cstr( m_name ) ;
#endif
// its hidden but we don't want it
if ( ( m_CPB.hFileInfo.ioFlFndrInfo.fdFlags & kIsInvisible ) && !(m_flags & wxDIR_HIDDEN) )
continue ;
#ifdef __DARWIN__
// under X, names that start with '.' are hidden
if ( ( m_name[0] == '.' ) && !(m_flags & wxDIR_HIDDEN) )
continue;
#endif
#if TARGET_CARBON
// under X thats the way the mounting points look like
if ( ( m_CPB.dirInfo.ioDrDirID == 0 ) && ( m_flags & wxDIR_DIRS) )
break ;
#endif
if ( ( m_CPB.dirInfo.ioFlAttrib & ioDirMask) != 0 && (m_flags & wxDIR_DIRS) ) // we have a directory
// we have a directory
if ( ( m_CPB.dirInfo.ioFlAttrib & ioDirMask) != 0 && (m_flags & wxDIR_DIRS) )
break ;
if ( ( m_CPB.dirInfo.ioFlAttrib & ioDirMask) == 0 && !(m_flags & wxDIR_FILES ) ) // its a file but we don't want it
continue ;
if ( ( m_CPB.hFileInfo.ioFlFndrInfo.fdFlags & kIsInvisible ) && !(m_flags & wxDIR_HIDDEN) ) // its hidden but we don't want it
// its a file but we don't want it
if ( ( m_CPB.dirInfo.ioFlAttrib & ioDirMask) == 0 && !(m_flags & wxDIR_FILES ) )
continue ;
wxString file( m_name ) ;

View File

@@ -35,8 +35,12 @@ IMPLEMENT_CLASS(wxFileDialog, wxDialog)
#include <Navigation.h>
#include "MoreFiles.h"
#include "MoreFilesExtras.h"
#ifdef __DARWIN__
# include "MoreFilesX.h"
#else
# include "MoreFiles.h"
# include "MoreFilesExtras.h"
#endif
extern bool gUseNavServices ;
@@ -437,12 +441,12 @@ int wxFileDialog::ShowModal()
(*mNavOptions.popupExtension)[i].version = kNavMenuItemSpecVersion ;
(*mNavOptions.popupExtension)[i].menuCreator = 'WXNG' ;
(*mNavOptions.popupExtension)[i].menuType = i ;
#if TARGET_CARBON
#if TARGET_CARBON
c2pstrcpy((StringPtr)(*mNavOptions.popupExtension)[i].menuItemName, myData.name[i]) ;
#else
#else
strcpy((char *)(*mNavOptions.popupExtension)[i].menuItemName, myData.name[i]) ;
c2pstr((char *)(*mNavOptions.popupExtension)[i].menuItemName ) ;
#endif
#endif
}
}
if ( m_dialogStyle & wxSAVE )

View File

@@ -26,8 +26,12 @@
#include <string.h>
#include <stdarg.h>
#include "MoreFiles.h"
#include "MoreFilesExtras.h"
#ifdef __DARWIN__
# include "MoreFilesX.h"
#else
# include "MoreFiles.h"
# include "MoreFilesExtras.h"
#endif
#ifndef __DARWIN__
#include <Threads.h>
@@ -489,11 +493,11 @@ void wxClientDisplayRect(int *x, int *y, int *width, int *height)
*height = screenBits.bounds.bottom - screenBits.bounds.top ;
SInt16 mheight ;
#if TARGET_CARBON
#if TARGET_CARBON
GetThemeMenuBarHeight( &mheight ) ;
#else
#else
mheight = LMGetMBarHeight() ;
#endif
#endif
*height -= mheight ;
if ( y )
*y = mheight ;

View File

@@ -42,8 +42,12 @@
#include "wx/mac/private.h"
#include "MoreFiles.h"
#include "MoreFilesExtras.h"
#ifdef __DARWIN__
# include "MoreFilesX.h"
#else
# include "MoreFiles.h"
# include "MoreFilesExtras.h"
#endif
// ----------------------------------------------------------------------------
// constants
@@ -102,6 +106,8 @@ private:
wxDirData::wxDirData(const wxString& dirname)
: m_dirname(dirname)
{
OSErr err;
// throw away the trailing slashes
size_t n = m_dirname.length();
wxCHECK_RET( n, _T("empty dir name in wxDir") );
@@ -111,15 +117,26 @@ wxDirData::wxDirData(const wxString& dirname)
m_dirname.Truncate(n + 1);
#ifdef __DARWIN__
FSRef theRef;
// get the FSRef associated with the POSIX path
err = FSPathMakeRef((const UInt8 *) m_dirname, &theRef, NULL);
FSGetVRefNum(&theRef, &(m_CPB.hFileInfo.ioVRefNum));
err = FSGetNodeID( &theRef , &m_dirId , &m_isDir ) ;
#else
FSSpec fsspec ;
wxMacFilename2FSSpec( m_dirname , &fsspec ) ;
m_CPB.hFileInfo.ioVRefNum = fsspec.vRefNum ;
err = FSpGetDirectoryID( &fsspec , &m_dirId , &m_isDir ) ;
#endif
wxASSERT_MSG( (err == noErr) || (err == nsvErr) , "Error accessing directory " + m_dirname) ;
m_CPB.hFileInfo.ioNamePtr = m_name ;
m_index = 0 ;
OSErr err = FSpGetDirectoryID( &fsspec , &m_dirId , &m_isDir ) ;
wxASSERT_MSG( err == noErr , "Error accessing directory") ;
}
wxDirData::~wxDirData()
@@ -157,19 +174,26 @@ bool wxDirData::Read(wxString *filename)
strcpy( (char *)m_name, c_name);
#else
p2cstr( m_name ) ;
#endif
// its hidden but we don't want it
if ( ( m_CPB.hFileInfo.ioFlFndrInfo.fdFlags & kIsInvisible ) && !(m_flags & wxDIR_HIDDEN) )
continue ;
#ifdef __DARWIN__
// under X, names that start with '.' are hidden
if ( ( m_name[0] == '.' ) && !(m_flags & wxDIR_HIDDEN) )
continue;
#endif
#if TARGET_CARBON
// under X thats the way the mounting points look like
if ( ( m_CPB.dirInfo.ioDrDirID == 0 ) && ( m_flags & wxDIR_DIRS) )
break ;
#endif
if ( ( m_CPB.dirInfo.ioFlAttrib & ioDirMask) != 0 && (m_flags & wxDIR_DIRS) ) // we have a directory
// we have a directory
if ( ( m_CPB.dirInfo.ioFlAttrib & ioDirMask) != 0 && (m_flags & wxDIR_DIRS) )
break ;
if ( ( m_CPB.dirInfo.ioFlAttrib & ioDirMask) == 0 && !(m_flags & wxDIR_FILES ) ) // its a file but we don't want it
continue ;
if ( ( m_CPB.hFileInfo.ioFlFndrInfo.fdFlags & kIsInvisible ) && !(m_flags & wxDIR_HIDDEN) ) // its hidden but we don't want it
// its a file but we don't want it
if ( ( m_CPB.dirInfo.ioFlAttrib & ioDirMask) == 0 && !(m_flags & wxDIR_FILES ) )
continue ;
wxString file( m_name ) ;

View File

@@ -35,8 +35,12 @@ IMPLEMENT_CLASS(wxFileDialog, wxDialog)
#include <Navigation.h>
#include "MoreFiles.h"
#include "MoreFilesExtras.h"
#ifdef __DARWIN__
# include "MoreFilesX.h"
#else
# include "MoreFiles.h"
# include "MoreFilesExtras.h"
#endif
extern bool gUseNavServices ;
@@ -437,12 +441,12 @@ int wxFileDialog::ShowModal()
(*mNavOptions.popupExtension)[i].version = kNavMenuItemSpecVersion ;
(*mNavOptions.popupExtension)[i].menuCreator = 'WXNG' ;
(*mNavOptions.popupExtension)[i].menuType = i ;
#if TARGET_CARBON
#if TARGET_CARBON
c2pstrcpy((StringPtr)(*mNavOptions.popupExtension)[i].menuItemName, myData.name[i]) ;
#else
#else
strcpy((char *)(*mNavOptions.popupExtension)[i].menuItemName, myData.name[i]) ;
c2pstr((char *)(*mNavOptions.popupExtension)[i].menuItemName ) ;
#endif
#endif
}
}
if ( m_dialogStyle & wxSAVE )

View File

@@ -26,8 +26,12 @@
#include <string.h>
#include <stdarg.h>
#include "MoreFiles.h"
#include "MoreFilesExtras.h"
#ifdef __DARWIN__
# include "MoreFilesX.h"
#else
# include "MoreFiles.h"
# include "MoreFilesExtras.h"
#endif
#ifndef __DARWIN__
#include <Threads.h>
@@ -489,11 +493,11 @@ void wxClientDisplayRect(int *x, int *y, int *width, int *height)
*height = screenBits.bounds.bottom - screenBits.bounds.top ;
SInt16 mheight ;
#if TARGET_CARBON
#if TARGET_CARBON
GetThemeMenuBarHeight( &mheight ) ;
#else
#else
mheight = LMGetMBarHeight() ;
#endif
#endif
*height -= mheight ;
if ( y )
*y = mheight ;