// be in your main program (e.g. hello.cpp). Now IMPLEMENT_APP should add this
// code if required.
-#if !wxUSE_GUI || defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXPM__)
+#if !wxUSE_GUI || defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXPM__) || (defined(__DARWIN__) && defined(__WXMAC__))
#define IMPLEMENT_WXWIN_MAIN \
extern int wxEntry( int argc, char *argv[] ); \
int main(int argc, char *argv[]) { return wxEntry(argc, argv); }
#include "wx/colour.h"
#include "wx/gdicmn.h"
+#if defined( __WXMAC__ ) && defined( TARGET_CARBON )
+#include <PMApplication.h>
+#endif
+
#if (defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXPM__)) && wxUSE_POSTSCRIPT
class WXDLLEXPORT wxPrintSetupData;
#endif
void* m_devMode;
void* m_devNames;
#elif defined( __WXMAC__ )
+#if TARGET_CARBON
+ PMPageFormat m_macPageFormat ;
+ PMPrintSettings m_macPrintSettings ;
+#else
THPrint m_macPrintInfo ;
#endif
+#endif
private:
#ifdef __WXMSW__
void* m_printDlgData;
-#elif defined( __WXMAC__ )
- THPrint m_macPrintInfo ;
#endif
private:
#if defined(__WIN95__)
void* m_pageSetupData;
-#elif defined( __WXMAC__ )
- THPrint m_macPageSetupInfo ;
#endif
private:
#define inline
#endif // Debug
+// not all c-runtimes are based on 1/1/1970 being (time_t) 0
+// set this to the corresponding value in seconds 1/1/1970 has on your
+// systems c-runtime
+
+#ifdef __WXMAC__
+#if __MSL__ < 0x6000
+ #define WX_TIME_BASE_OFFSET ( 2082844800L + 126144000L )
+#else
+ #define WX_TIME_BASE_OFFSET 0
+#endif
+#else
+ #define WX_TIME_BASE_OFFSET 0
+#endif
/*
* TODO
*
inline wxDateTime& wxDateTime::Set(time_t timet)
{
// assign first to avoid long multiplication overflow!
- m_time = timet;
+ m_time = timet - WX_TIME_BASE_OFFSET ;
m_time *= TIME_T_FACTOR;
return *this;
return (time_t)-1;
}
- return (time_t)((m_time / (long)TIME_T_FACTOR).GetLo());
+ return (time_t)((m_time / (long)TIME_T_FACTOR).GetLo())+WX_TIME_BASE_OFFSET ;
}
-inline bool wxDateTime::SetToLastWeekDay(WeekDay weekday,
+bool wxDateTime::SetToLastWeekDay(WeekDay weekday,
Month month,
int year)
{
// ----------------------------------------------------------------------------
// define off_t
-#ifndef __WXMAC__
+
+#if !defined(__WXMAC__) || defined(__DARWIN__)
#include <sys/types.h>
#else
typedef long off_t;
#define wxFILE_SEP_PATH wxFILE_SEP_PATH_UNIX
#define wxPATH_SEP wxPATH_SEP_UNIX
#elif defined(__MAC__)
- #define wxFILE_SEP_PATH wxFILE_SEP_PATH_MAC
+
+// TODO find out whether we can really switch back to native file names
+// previously this mac was emulating unix/win filename structures
+// #define wxFILE_SEP_PATH wxFILE_SEP_PATH_MAC
+ #define wxFILE_SEP_PATH wxFILE_SEP_PATH_DOS
+ #define wxPATH_SEP wxPATH_SEP_DOS
#else // Windows and OS/2
#define wxFILE_SEP_PATH wxFILE_SEP_PATH_DOS
#define wxPATH_SEP wxPATH_SEP_DOS
#include "wx/defs.h"
+#ifndef wxUSE_GEOMETRY
+ #define wxUSE_GEOMETRY 0
+#endif
+
#if wxUSE_GEOMETRY
#include "wx/utils.h"
virtual void MacHandleHighLevelEvent( EventRecord *ev ) ;
virtual void MacHandleMenuSelect( int menuid , int menuitem ) ;
- virtual OSErr MacHandleAEODoc(AppleEvent *event , AppleEvent *reply) ;
- virtual OSErr MacHandleAEPDoc(AppleEvent *event , AppleEvent *reply) ;
- virtual OSErr MacHandleAEOApp(AppleEvent *event , AppleEvent *reply) ;
- virtual OSErr MacHandleAEQuit(AppleEvent *event , AppleEvent *reply) ;
+ virtual OSErr MacHandleAEODoc(const AppleEvent *event , AppleEvent *reply) ;
+ virtual OSErr MacHandleAEPDoc(const AppleEvent *event , AppleEvent *reply) ;
+ virtual OSErr MacHandleAEOApp(const AppleEvent *event , AppleEvent *reply) ;
+ virtual OSErr MacHandleAEQuit(const AppleEvent *event , AppleEvent *reply) ;
DECLARE_EVENT_TABLE()
};
DECLARE_DYNAMIC_CLASS(wxChoice)
public:
- inline wxChoice() {}
+ wxChoice() {}
+ ~wxChoice() ;
- inline wxChoice(wxWindow *parent, wxWindowID id,
+ wxChoice(wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
int n = 0, const wxString choices[] = NULL,
virtual void StartPage(void) ;
virtual void EndPage(void) ;
protected :
+ #if TARGET_CARBON
+ PMPrintContext m_macPrintPort ;
+ #else
TPPrPort m_macPrintPort ;
+ #endif
wxPrintData m_printData ;
};
wxString m_dir;
wxString m_path; // Full path
wxString m_fileName;
+ wxArrayString m_fileNames;
+ wxArrayString m_paths;
wxString m_wildCard;
int m_filterIndex;
public:
inline wxString GetPath() const { return m_path; }
inline wxString GetDirectory() const { return m_dir; }
inline wxString GetFilename() const { return m_fileName; }
+ void GetPaths(wxArrayString& paths) const { paths = m_paths; }
+ void GetFilenames(wxArrayString& files) const { files = m_fileNames; }
inline wxString GetWildcard() const { return m_wildCard; }
inline long GetStyle() const { return m_dialogStyle; }
inline int GetFilterIndex() const { return m_filterIndex ; }
{
DECLARE_DYNAMIC_CLASS(wxStatusBarMac);
- wxStatusBarMac(void);
- inline wxStatusBarMac(wxWindow *parent, wxWindowID id,
+ wxStatusBarMac();
+ wxStatusBarMac(wxWindow *parent, wxWindowID id,
long style = 0,
const wxString& name = wxPanelNameStr)
{
~wxStatusBarMac();
bool Create(wxWindow *parent, wxWindowID id,
- long style,
+ long style ,
const wxString& name = wxPanelNameStr) ;
virtual void DrawFieldText(wxDC& dc, int i);
#define UMA_USE_8_6 0
+#if TARGET_CARBON
+#undef UMA_USE_8_6
+#define UMA_USE_8_6 1
+#endif
+
#if defined(__POWERPC__) || defined(__MACH__)
#define UMA_USE_APPEARANCE 1
#define UMA_USE_WINDOWMGR 1
#endif
void UMAInitToolbox( UInt16 inMoreMastersCalls) ;
+void UMACleanupToolbox() ;
bool UMAHasAppearance() ;
long UMAGetAppearanceVersion() ;
void UMAShowWatchCursor() ;
void UMAShowArrowCursor() ;
-void UMAPrOpen() ;
-void UMAPrClose() ;
+OSStatus UMAPrOpen() ;
+OSStatus UMAPrClose() ;
// window manager
public:
bool Create(const wxString& fileName, bool isResource = FALSE);
- bool IsOk() const { return (m_waveData ? TRUE : FALSE); };
+ bool IsOk() const { return !m_sndname.IsEmpty(); }
bool Play(bool async = TRUE, bool looped = FALSE) const;
protected:
bool Free();
private:
- char* m_waveData;
+ SndChannelPtr m_sndChan;
+
+ wxString m_sndname;
+ SndListHandle m_hSnd;
int m_waveLength;
bool m_isResource;
};
WindowRef GetMacRootWindow() const ;
virtual ControlHandle MacGetContainerForEmbedding() ;
- virtual long MacGetBorderSize() const ;
+
+ virtual long MacGetLeftBorderSize() const ;
+ virtual long MacGetRightBorderSize() const ;
+ virtual long MacGetTopBorderSize() const ;
+ virtual long MacGetBottomBorderSize() const ;
+
static long MacRemoveBordersFromStyle( long style ) ;
virtual void MacSuperChangedPosition() ;
virtual void MacSuperShown( bool show ) ;
WXDLLEXPORT wxChar* wxGetUserHome(const wxString& user = wxEmptyString);
#endif
+#ifdef __WXMAC__
+WXDLLEXPORT wxString wxMacFindFolder(short vRefNum,
+ OSType folderType,
+ Boolean createFolder);
+#endif
+
#if wxUSE_GUI // GUI only things from now on
// ----------------------------------------------------------------------------
#include "wx/qt/wave.h"
#elif defined(__WXPM__)
#include "wx/os2/wave.h"
+#elif defined(__WXMAC__)
+#include "wx/mac/wave.h"
#endif
#endif
m_devMode = (void*) NULL;
m_devNames = (void*) NULL;
#elif defined( __WXMAC__ )
+#if TARGET_CARBON
+ m_macPageFormat = kPMNoPageFormat;
+ m_macPrintSettings = kPMNoPrintSettings;
+#else
m_macPrintInfo = (THPrint) NewHandleClear( sizeof( TPrint ) ) ;
(**m_macPrintInfo).iPrVersion = 0; // something invalid
(**m_macPrintInfo).rPaper = r2;
(**m_macPrintInfo).prStl.iPageV = 11 * 120 ; // 11 inches in 120th of an inch
(**m_macPrintInfo).prStl.iPageH = 8 * 120 ; // 8 inches in 120th of an inch
-/*
- UMAPrOpen() ;
- m_macPrintInfo = (THPrint) NewHandleClear( sizeof( TPrint ) ) ;
- ::PrintDefault( m_macPrintInfo ) ;
- OSErr err = PrError() ;
- UMAPrClose() ;
- wxASSERT( err == noErr ) ;
-*/
+#endif
#endif
m_printOrientation = wxPORTRAIT;
m_printNoCopies = 1;
m_devMode = (void*) NULL;
m_devNames = (void*) NULL;
#elif defined( __WXMAC__ )
+#if TARGET_CARBON
+ m_macPageFormat = kPMNoPageFormat;
+ m_macPrintSettings = kPMNoPrintSettings;
+#else
m_macPrintInfo = NULL ;
- /*
- (THPrint) NewHandleClear( sizeof( TPrint ) ) ;
- UMAPrOpen() ;
- m_macPrintInfo = (THPrint) NewHandleClear( sizeof( TPrint ) ) ;
- ::PrintDefault( m_macPrintInfo ) ;
- OSErr err = PrError() ;
- UMAPrClose() ;
- wxASSERT( err == noErr ) ;
- */
+#endif
#endif
(*this) = printData;
}
if ( hDevNames )
GlobalFree(hDevNames);
#elif defined(__WXMAC__)
+#if TARGET_CARBON
+ if (m_macPageFormat != kPMNoPageFormat)
+ {
+ (void)PMDisposePageFormat(m_macPageFormat);
+ m_macPageFormat = kPMNoPageFormat;
+ }
+
+ if (m_macPrintSettings != kPMNoPrintSettings)
+ {
+ (void)PMDisposePrintSettings(m_macPrintSettings);
+ m_macPrintSettings = kPMNoPrintSettings;
+ }
+#else
wxASSERT( m_macPrintInfo ) ;
-// ::DisposeHandle( (Handle) m_macPrintInfo ) ;
+ // we should perhaps delete
+#endif
#endif
}
if (m_paperId == wxPAPER_NONE)
{
+ // DEVMODE is in tenths of a milimeter
devMode->dmPaperWidth = m_paperSize.x * 10;
devMode->dmPaperLength = m_paperSize.y * 10;
devMode->dmFields |= DM_PAPERWIDTH;
}
else if ((devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH))
{
+ // DEVMODE is in tenths of a milimeter
m_paperSize.x = devMode->dmPaperWidth / 10;
m_paperSize.y = devMode->dmPaperLength / 10;
m_paperId = wxPAPER_NONE;
#ifdef __WXMAC__
void wxPrintData::ConvertToNative()
{
+#ifdef TARGET_CARBON
+#else
(**m_macPrintInfo).prJob.iCopies = m_printNoCopies ;
+#endif
}
void wxPrintData::ConvertFromNative()
{
+#ifdef TARGET_CARBON
+#else
m_printNoCopies = (**m_macPrintInfo).prJob.iCopies ;
+#endif
}
#endif
void wxPrintData::operator=(const wxPrintData& data)
{
#ifdef __WXMAC__
+#ifdef TARGET_CARBON
+#else
m_macPrintInfo = data.m_macPrintInfo ;
HandToHand( (Handle*) &m_macPrintInfo ) ;
+#endif
#endif
m_printNoCopies = data.m_printNoCopies;
m_printCollate = data.m_printCollate;
#ifdef __WXMAC__
void wxPrintDialogData::ConvertToNative()
{
+#ifdef TARGET_CARBON
+#else
(**m_printData.m_macPrintInfo).prJob.iFstPage = m_printFromPage ;
(**m_printData.m_macPrintInfo).prJob.iLstPage = m_printToPage ;
m_printData.ConvertToNative() ;
+#endif
}
void wxPrintDialogData::ConvertFromNative()
{
+#ifdef TARGET_CARBON
+#else
m_printData.ConvertFromNative() ;
m_printFromPage = (**m_printData.m_macPrintInfo).prJob.iFstPage ;
m_printToPage = (**m_printData.m_macPrintInfo).prJob.iLstPage ;
+#endif
}
#endif
pd->hwndOwner=(HWND)NULL;
// pd->hDevNames=(HWND)NULL;
pd->hInstance=(HINSTANCE)NULL;
-
+ // PAGESETUPDLG is in hundreds of a mm
pd->ptPaperSize.x = m_paperSize.x * 100;
pd->ptPaperSize.y = m_paperSize.y * 100;
m_getDefaultInfo = ((pd->Flags & PSD_RETURNDEFAULT) == PSD_RETURNDEFAULT);
m_enableHelp = ((pd->Flags & PSD_SHOWHELP) == PSD_SHOWHELP);
+ // PAGESETUPDLG is in hundreds of a mm
m_paperSize.x = pd->ptPaperSize.x / 100;
m_paperSize.y = pd->ptPaperSize.y / 100;
{
m_printData.ConvertToNative() ;
// on mac the paper rect has a negative top left corner, because the page rect (printable area) is at 0,0
+#ifdef TARGET_CARBON
+#else
(**m_printData.m_macPrintInfo).rPaper.left = int( ((double) m_minMarginTopLeft.x)*mm2pt ) ;
(**m_printData.m_macPrintInfo).rPaper.top = int( ((double) m_minMarginTopLeft.y)*mm2pt ) ;
(**m_printData.m_macPrintInfo).prInfo.rPage.top = 0 ;
(**m_printData.m_macPrintInfo).prInfo.rPage.right = int( ((double) m_paperSize.x - m_minMarginTopLeft.x - m_minMarginBottomRight.x)*mm2pt ) ;
(**m_printData.m_macPrintInfo).prInfo.rPage.bottom = int( ((double) m_paperSize.y - m_minMarginTopLeft.y - m_minMarginBottomRight.y)*mm2pt ) ;
+#endif
}
void wxPageSetupDialogData::ConvertFromNative()
{
m_printData.ConvertFromNative () ;
+#ifdef TARGET_CARBON
+#else
m_paperSize.x = ((double) (**m_printData.m_macPrintInfo).rPaper.right - (**m_printData.m_macPrintInfo).rPaper.left ) * pt2mm ;
m_paperSize.y = ((double) (**m_printData.m_macPrintInfo).rPaper.bottom - (**m_printData.m_macPrintInfo).rPaper.top ) * pt2mm ;
m_minMarginBottomRight.x = ((double) (**m_printData.m_macPrintInfo).rPaper.right - (**m_printData.m_macPrintInfo).prInfo.rPage.right ) * pt2mm ;
m_minMarginBottomRight.y = ((double)(**m_printData.m_macPrintInfo).rPaper.bottom - (**m_printData.m_macPrintInfo).prInfo.rPage.bottom ) * pt2mm ;
-
+#endif
// adjust minimal values
//TODO add custom fields in dialog for margins
int free();
*/
-int read();
+//int read();
#endif
int yylook(void);
int yywrap(void);
int yyback(int *, int);
-#ifdef __WXMAC__
+#if __MSL__ < 0x6000
int read( int , char * , int ) ;
+#else
+int _read( int , void * , size_t ) ;
+#define read _read
+#endif
+#ifdef __WXMSW__
+int fileno( FILE* ) ;
+#else
+#if __MSL__ < 0x6000
int fileno( void* ) ;
#endif
+#endif
/* You may need to put /DLEX_SCANNER in your makefile
* if you're using LEX!
// Have to ifdef this for different environments
#include <io.h>
#elif (defined(__WXMAC__))
+#if __MSL__ < 0x6000
int access( const char *path, int mode ) { return 0 ; }
+#else
+ int _access( const char *path, int mode ) { return 0 ; }
+#endif
char* mktemp( char * path ) { return path ;}
- #include <unistd.h>
- #include <unix.h>
+ #include <stat.h>
#define W_OK 2
#define R_OK 4
+ #include <unistd.h>
#else
#error "Please specify the header with file functions declarations."
#endif //Win/UNIX
// if bOverwrite we create a new file or truncate the existing one,
// otherwise we only create the new file and fail if it already exists
#ifdef __WXMAC__
- int fd = open(wxUnix2MacFilename( szFileName ), O_CREAT | (bOverwrite ? O_TRUNC : O_EXCL), access);
+ // Dominic Mazzoni [dmazzoni+@cs.cmu.edu] reports that open is still broken on the mac, so we replace
+ // int fd = open(wxUnix2MacFilename( szFileName ), O_CREAT | (bOverwrite ? O_TRUNC : O_EXCL), access);
+ int fd = creat(wxUnix2MacFilename( szFileName ), accessMode);
#else
int fd = wxOpen(wxFNCONV(szFileName),
O_BINARY | O_WRONLY | O_CREAT |
wxCHECK( (pBuf != NULL) && IsOpened(), 0 );
#ifdef __MWERKS__
+#if __MSL__ >= 0x6000
+ int iRc = ::write(m_fd, (void*) pBuf, nCount);
+#else
int iRc = ::write(m_fd, (const char*) pBuf, nCount);
+#endif
#else
int iRc = ::write(m_fd, pBuf, nCount);
#endif
#elif defined(__WXSTUBS__)
wxASSERT_MSG( FALSE, wxT("TODO") ) ;
#elif defined(__WXMAC__)
- {
- short vRefNum ;
- long dirID ;
-
- if ( FindFolder( (short) kOnSystemDisk, kPreferencesFolderType, kDontCreateFolder, &vRefNum, &dirID) == noErr)
- {
- FSSpec file ;
- if ( FSMakeFSSpec( vRefNum , dirID , "\p" , &file ) == noErr )
- {
- strDir = wxMacFSSpec2UnixFilename( &file ) + "/" ;
- }
- }
- }
+ strDir = wxMacFindFolder( (short) kOnSystemDisk, kPreferencesFolderType, kDontCreateFolder ) ;
#else // Windows
wxChar szWinDir[MAX_PATH];
::GetWindowsDirectory(szWinDir, MAX_PATH);
#else
#include <stat.h>
#include <unistd.h>
+ #include <unix.h>
#endif
#ifdef __UNIX__
#ifdef _MSC_VER
if (_getcwd(buf, sz) == NULL) {
#elif defined( __WXMAC__)
- enum
- {
- SFSaveDisk = 0x214, CurDirStore = 0x398
- };
- FSSpec cwdSpec ;
-
- FSMakeFSSpec( - *(short *) SFSaveDisk , *(long *) CurDirStore , NULL , &cwdSpec ) ;
- wxString res = wxMacFSSpec2UnixFilename( &cwdSpec ) ;
- strcpy( buf , res ) ;
- if (0) {
+ FSSpec cwdSpec ;
+ FCBPBRec pb;
+ OSErr error;
+ Str255 fileName ;
+ pb.ioNamePtr = (StringPtr) &fileName;
+ pb.ioVRefNum = 0;
+ pb.ioRefNum = LMGetCurApRefNum();
+ pb.ioFCBIndx = 0;
+ error = PBGetFCBInfoSync(&pb);
+ if ( error == noErr )
+ {
+ cwdSpec.vRefNum = pb.ioFCBVRefNum;
+ cwdSpec.parID = pb.ioFCBParID;
+ cwdSpec.name[0] = 0 ;
+ wxString res = wxMacFSSpec2UnixFilename( &cwdSpec ) ;
+
+ strcpy( buf , res ) ;
+ buf[res.length()-1]=0 ;
+ }
+ else
+ buf[0] = 0 ;
+ /*
+ this version will not always give back the application directory on mac
+ enum
+ {
+ SFSaveDisk = 0x214, CurDirStore = 0x398
+ };
+ FSSpec cwdSpec ;
+
+ FSMakeFSSpec( - *(short *) SFSaveDisk , *(long *) CurDirStore , NULL , &cwdSpec ) ;
+ wxString res = wxMacFSSpec2UnixFilename( &cwdSpec ) ;
+ strcpy( buf , res ) ;
+ */
+ if (0) {
#elif(__VISAGECPP__)
APIRET rc;
rc = ::DosQueryCurrentDir( 0 // current drive
TextSize( size );
TextFace( style );
TextMode( mode );
+ SetOrigin( 0 , 0 ) ;
SetPort( port ) ;
}
}
pascal OSErr AEHandleODoc( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
{
wxApp* app = (wxApp*) refcon ;
- return wxTheApp->MacHandleAEODoc( event , reply) ;
+ return wxTheApp->MacHandleAEODoc( (AppleEvent*) event , reply) ;
}
pascal OSErr AEHandleOApp( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
{
wxApp* app = (wxApp*) refcon ;
- return wxTheApp->MacHandleAEOApp( event , reply ) ;
+ return wxTheApp->MacHandleAEOApp( (AppleEvent*) event , reply ) ;
}
pascal OSErr AEHandlePDoc( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
{
wxApp* app = (wxApp*) refcon ;
- return wxTheApp->MacHandleAEPDoc( event , reply ) ;
+ return wxTheApp->MacHandleAEPDoc( (AppleEvent*) event , reply ) ;
}
pascal OSErr AEHandleQuit( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
{
wxApp* app = (wxApp*) refcon ;
- return wxTheApp->MacHandleAEQuit( event , reply) ;
+ return wxTheApp->MacHandleAEQuit( (AppleEvent*) event , reply) ;
}
-OSErr wxApp::MacHandleAEODoc(AppleEvent *event , AppleEvent *reply)
+OSErr wxApp::MacHandleAEODoc(const AppleEvent *event , AppleEvent *reply)
{
ProcessSerialNumber PSN ;
PSN.highLongOfPSN = 0 ;
return noErr ;
}
-OSErr wxApp::MacHandleAEPDoc(AppleEvent *event , AppleEvent *reply)
+OSErr wxApp::MacHandleAEPDoc(const AppleEvent *event , AppleEvent *reply)
{
return noErr ;
}
-OSErr wxApp::MacHandleAEOApp(AppleEvent *event , AppleEvent *reply)
+OSErr wxApp::MacHandleAEOApp(const AppleEvent *event , AppleEvent *reply)
{
return noErr ;
}
-OSErr wxApp::MacHandleAEQuit(AppleEvent *event , AppleEvent *reply)
+OSErr wxApp::MacHandleAEQuit(const AppleEvent *event , AppleEvent *reply)
{
wxWindow* win = GetTopWindow() ;
if ( win )
delete wxLog::SetActiveTarget(NULL);
#endif // wxUSE_LOG
+ UMACleanupToolbox() ;
if (s_macCursorRgn)
::DisposeRgn(s_macCursorRgn);
int newHeight = HiWord(growResult);
int oldWidth, oldHeight;
- win->GetSize(&oldWidth, &oldHeight);
- if (newWidth == 0)
- newWidth = oldWidth;
- if (newHeight == 0)
- newHeight = oldHeight;
if (win)
+ {
+ win->GetSize(&oldWidth, &oldHeight);
+ if (newWidth == 0)
+ newWidth = oldWidth;
+ if (newHeight == 0)
+ newHeight = oldHeight;
win->SetSize( -1, -1, newWidth, newHeight, wxSIZE_USE_EXISTING);
+ }
}
s_lastMouseDown = 0;
break;
UInt32 menuresult = UMAMenuEvent(ev) ;
if ( HiWord( menuresult ) )
+ {
+ if ( !s_macIsInModalLoop )
MacHandleMenuSelect( HiWord( menuresult ) , LoWord( menuresult ) ) ;
+ }
else
{
short keycode ;
{
win->MacUpdate( ev ) ;
}
+ else
+ {
+ // since there is no way of telling this foreign window to update itself
+ // we have to invalidate the update region otherwise we keep getting the same
+ // event over and over again
+ BeginUpdate( window ) ;
+ EndUpdate( window ) ;
+ }
}
void wxApp::MacHandleDiskEvent( EventRecord *ev )
switch (windowPart)
{
+ // fixes for setting the cursor back from dominic mazzoni
case inMenuBar :
+ UMAShowArrowCursor();
break ;
case inSysWindow :
+ UMAShowArrowCursor();
break ;
default:
{
wxWindow* win = wxFindWinFromMacWindow( window ) ;
if ( win )
win->MacMouseMoved( ev , windowPart ) ;
+ else
+ UMAShowArrowCursor();
+
}
break;
}
TextSize( size );
TextFace( style );
TextMode( mode );
+ SetOrigin( 0 , 0 ) ;
SetPort( port ) ;
}
}
pascal OSErr AEHandleODoc( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
{
wxApp* app = (wxApp*) refcon ;
- return wxTheApp->MacHandleAEODoc( event , reply) ;
+ return wxTheApp->MacHandleAEODoc( (AppleEvent*) event , reply) ;
}
pascal OSErr AEHandleOApp( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
{
wxApp* app = (wxApp*) refcon ;
- return wxTheApp->MacHandleAEOApp( event , reply ) ;
+ return wxTheApp->MacHandleAEOApp( (AppleEvent*) event , reply ) ;
}
pascal OSErr AEHandlePDoc( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
{
wxApp* app = (wxApp*) refcon ;
- return wxTheApp->MacHandleAEPDoc( event , reply ) ;
+ return wxTheApp->MacHandleAEPDoc( (AppleEvent*) event , reply ) ;
}
pascal OSErr AEHandleQuit( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
{
wxApp* app = (wxApp*) refcon ;
- return wxTheApp->MacHandleAEQuit( event , reply) ;
+ return wxTheApp->MacHandleAEQuit( (AppleEvent*) event , reply) ;
}
-OSErr wxApp::MacHandleAEODoc(AppleEvent *event , AppleEvent *reply)
+OSErr wxApp::MacHandleAEODoc(const AppleEvent *event , AppleEvent *reply)
{
ProcessSerialNumber PSN ;
PSN.highLongOfPSN = 0 ;
return noErr ;
}
-OSErr wxApp::MacHandleAEPDoc(AppleEvent *event , AppleEvent *reply)
+OSErr wxApp::MacHandleAEPDoc(const AppleEvent *event , AppleEvent *reply)
{
return noErr ;
}
-OSErr wxApp::MacHandleAEOApp(AppleEvent *event , AppleEvent *reply)
+OSErr wxApp::MacHandleAEOApp(const AppleEvent *event , AppleEvent *reply)
{
return noErr ;
}
-OSErr wxApp::MacHandleAEQuit(AppleEvent *event , AppleEvent *reply)
+OSErr wxApp::MacHandleAEQuit(const AppleEvent *event , AppleEvent *reply)
{
wxWindow* win = GetTopWindow() ;
if ( win )
delete wxLog::SetActiveTarget(NULL);
#endif // wxUSE_LOG
+ UMACleanupToolbox() ;
if (s_macCursorRgn)
::DisposeRgn(s_macCursorRgn);
int newHeight = HiWord(growResult);
int oldWidth, oldHeight;
- win->GetSize(&oldWidth, &oldHeight);
- if (newWidth == 0)
- newWidth = oldWidth;
- if (newHeight == 0)
- newHeight = oldHeight;
if (win)
+ {
+ win->GetSize(&oldWidth, &oldHeight);
+ if (newWidth == 0)
+ newWidth = oldWidth;
+ if (newHeight == 0)
+ newHeight = oldHeight;
win->SetSize( -1, -1, newWidth, newHeight, wxSIZE_USE_EXISTING);
+ }
}
s_lastMouseDown = 0;
break;
UInt32 menuresult = UMAMenuEvent(ev) ;
if ( HiWord( menuresult ) )
+ {
+ if ( !s_macIsInModalLoop )
MacHandleMenuSelect( HiWord( menuresult ) , LoWord( menuresult ) ) ;
+ }
else
{
short keycode ;
{
win->MacUpdate( ev ) ;
}
+ else
+ {
+ // since there is no way of telling this foreign window to update itself
+ // we have to invalidate the update region otherwise we keep getting the same
+ // event over and over again
+ BeginUpdate( window ) ;
+ EndUpdate( window ) ;
+ }
}
void wxApp::MacHandleDiskEvent( EventRecord *ev )
switch (windowPart)
{
+ // fixes for setting the cursor back from dominic mazzoni
case inMenuBar :
+ UMAShowArrowCursor();
break ;
case inSysWindow :
+ UMAShowArrowCursor();
break ;
default:
{
wxWindow* win = wxFindWinFromMacWindow( window ) ;
if ( win )
win->MacMouseMoved( ev , windowPart ) ;
+ else
+ UMAShowArrowCursor();
+
}
break;
}
IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl)
#endif
+short nextMenuId = 100 ; // wxMenu takes the lower ids
+
+wxChoice::~wxChoice()
+{
+ // DeleteMenu( m_macPopUpMenuId ) ;
+ DisposeMenu( m_macPopUpMenuHandle ) ;
+}
+
bool wxChoice::Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos,
const wxSize& size,
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
+ m_macPopUpMenuHandle = NewMenu( 1 , "\pPopUp Menu" ) ;
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , -12345 , 0 ,
kControlPopupButtonProc + kControlPopupFixedWidthVariant , (long) this ) ;
} ;
resource 'CURS' (9, "Hand") {
- $"01 80 1A 70 26 48 26 4A 12 4D 12 49 68 09 98 01"
- $"88 02 40 02 20 02 20 04 10 04 08 08 04 08 04 08",
- $"01 80 1B F0 3F F8 3F FA 1F FF 1F FF 7F FF FF FF"
- $"FF FE 7F FE 3F FE 3F FC 1F FC 0F F8 07 F8 07 F8",
- {9, 8}
+ $"0380 04C0 04C0 04C0 04C0 04C0 74F8 9CAE"
+ $"4CAB 240B 2403 1003 0803 0806 0406 0406",
+ $"0380 07C0 07C0 07C0 07C0 07C0 77F8 FFFE"
+ $"7FFF 3FFF 3FFF 1FFF 0FFF 0FFE 07FE 07FE",
+ {0, 7}
};
resource 'CURS' (10, "SizeWE") {
#include "wx/dc.h"
#include "wx/mac/uma.h"
+#if __MSL__ >= 0x6000
+#include "math.h"
+#endif
+
#if !USE_SHARED_LIBRARY
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
#endif
void wxDC::MacSetupPort() const
{
- AGAPortHelper* help = &m_macPortHelper ;
+ AGAPortHelper* help = (AGAPortHelper*) &m_macPortHelper ;
help->Setup( m_macPort ) ;
m_macPortId = ++m_macCurrentPortId ;
::SetOrigin(-m_macLocalOrigin.h, -m_macLocalOrigin.v);
// CMB: if scale has changed call SetPen to recalulate the line width
if (m_scaleX != origScaleX || m_scaleY != origScaleY)
{
- // TODO : set internal flags for recalc
+ // this is a bit artificial, but we need to force wxDC to think
+ // the pen has changed
+ wxPen* pen = & GetPen();
+ wxPen tempPen;
+ m_pen = tempPen;
+ SetPen(* pen);
}
};
wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
{
-#if !TARGET_CARBON
- OSErr err ;
+ OSStatus err ;
wxString message ;
m_printData = printdata ;
m_printData.ConvertToNative() ;
- ::UMAPrOpen() ;
- err = PrError() ;
+ err = UMAPrOpen() ;
if ( err )
{
message.Printf( "Print Error %d", err ) ;
UMAPrClose() ;
}
+#if !TARGET_CARBON
if ( ::PrValidate( m_printData.m_macPrintInfo ) )
{
::PrStlDialog( m_printData.m_macPrintInfo ) ;
}
// sets current port
m_macPort = (GrafPtr ) m_macPrintPort ;
+#else
+ m_macPrintPort = kPMNoReference ;
+ err = PMBeginDocument(
+ m_printData.m_macPrintSettings,
+ m_printData.m_macPageFormat,
+ &m_macPrintPort);
+ if ( err != noErr || m_macPrintPort == kPMNoReference )
+ {
+ message.Printf( "Print Error %d", err ) ;
+ wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+ UMAPrClose() ;
+ }
+ // sets current port
+ ::GetPort( &m_macPort ) ;
+#endif
m_ok = TRUE ;
m_minY = m_minX = 0 ;
+#if TARGET_CARBON
+#else
m_maxX = (**m_printData.m_macPrintInfo).rPaper.right - (**m_printData.m_macPrintInfo).rPaper.left ;
m_maxY = (**m_printData.m_macPrintInfo).rPaper.bottom - (**m_printData.m_macPrintInfo).rPaper.top ;
-#else
-#pragma warning "TODO:printing support for carbon"
#endif
}
wxPrinterDC::~wxPrinterDC(void)
{
+ OSStatus err ;
+ wxString message ;
#if !TARGET_CARBON
if ( m_ok )
{
- OSErr err ;
- wxString message ;
-
::PrCloseDoc( m_macPrintPort ) ;
err = PrError() ;
m_macPortHelper.Clear() ;
}
#else
-#pragma warning "TODO:printing support for carbon"
+ if ( m_ok )
+ {
+ err = PMEndDocument(m_macPrintPort);
+ if ( !err )
+ {
+ message.Printf( "Print Error %d", err ) ;
+ wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+ UMAPrClose() ;
+ }
+ UMAPrClose() ;
+ }
#endif
}
void wxPrinterDC::StartPage(void)
{
-#if !TARGET_CARBON
if ( !m_ok )
return ;
m_macPenInstalled = false ;
- OSErr err ;
+ OSStatus err ;
wxString message ;
+#if !TARGET_CARBON
PrOpenPage( m_macPrintPort , NULL ) ;
- SetOrigin( - (**m_printData.m_macPrintInfo).rPaper.left , - (**m_printData.m_macPrintInfo).rPaper.top ) ;
+ m_macLocalOrigin.h = (**m_printData.m_macPrintInfo).rPaper.left ;
+ m_macLocalOrigin.v = (**m_printData.m_macPrintInfo).rPaper.top ;
+
+ SetOrigin( - m_macLocalOrigin.h , - m_macLocalOrigin.v ) ;
Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
::ClipRect( &clip ) ;
err = PrError() ;
m_ok = FALSE ;
}
#else
-#pragma warning "TODO:printing support for carbon"
+ err = PMBeginPage(m_macPrintPort, nil);
+ if ( err )
+ {
+ message.Printf( "Print Error %d", err ) ;
+ wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+ PMEndPage(m_macPrintPort);
+ PMEndDocument(m_macPrintPort);
+ UMAPrClose() ;
+ ::SetPort( macPrintFormerPort ) ;
+ m_ok = FALSE ;
+ }
#endif
}
void wxPrinterDC::EndPage(void)
{
-#if !TARGET_CARBON
if ( !m_ok )
return ;
- OSErr err ;
+ OSStatus err ;
wxString message ;
+#if !TARGET_CARBON
PrClosePage( (TPrPort*) m_macPort ) ;
err = PrError() ;
if ( err )
m_ok = FALSE ;
}
#else
-#pragma warning "TODO:printing support for carbon"
+ err = PMEndPage(m_macPrintPort);
+ if ( err )
+ {
+ message.Printf( "Print Error %d", err ) ;
+ wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+ PMEndDocument(m_macPrintPort);
+ UMAPrClose() ;
+ ::SetPort( macPrintFormerPort ) ;
+ m_ok = FALSE ;
+ }
#endif
}
#include "wx/cmndata.h"
+#include "Navigation.h"
+
#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxDirDialog, wxDialog)
#endif
+bool gUseNavServices = NavServicesAvailable() ;
+
// the data we need to pass to our standard file hook routine
// includes a pointer to the dialog, a pointer to the standard
// file reply record (so we can inspect the current selection)
// and a copy of the "previous" file spec of the reply record
// so we can see if the selection has changed
+#if !TARGET_CARBON
+
struct UserDataRec {
StandardFileReply *sfrPtr;
FSSpec oldSelectionFSSpec;
typedef struct UserDataRec
UserDataRec, *UserDataRecPtr;
-#if !TARGET_CARBON
-
enum {
kSelectItem = 10, // select button item number
kSFGetFolderDlgID = 250, // dialog resource number
return item;
}
-#endif
void StandardGetFolder( ConstStr255Param message , ConstStr255Param path , FileFilterYDUPP fileFilter, StandardFileReply *theSFR)
{
return !(visibleFlag && folderFlag);
}
+#endif
+
+
wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
const wxString& defaultPath,
long style, const wxPoint& pos)
int wxDirDialog::ShowModal()
{
+ #if !TARGET_CARBON
+ if ( !gUseNavServices )
{
Str255 prompt ;
Str255 path ;
StandardFileReply reply ;
FileFilterYDUPP invisiblesExcludedCustomFilterUPP = 0 ;
- #if !TARGET_CARBON
invisiblesExcludedCustomFilterUPP =
NewFileFilterYDProc(OnlyVisibleFoldersCustomFileFilter);
- #endif
+
StandardGetFolder( prompt , path , invisiblesExcludedCustomFilterUPP, &reply);
- #if !TARGET_CARBON
+
DisposeRoutineDescriptor(invisiblesExcludedCustomFilterUPP);
- #endif
+
if ( reply.sfGood == false )
{
m_path = "" ;
m_path = wxMacFSSpec2UnixFilename( &reply.sfFile ) ;
return wxID_OK ;
}
+ return wxID_CANCEL;
+ }
+ else
+ #endif
+ {
+ NavDialogOptions mNavOptions;
+ NavObjectFilterUPP mNavFilterUPP = NULL;
+ NavPreviewUPP mNavPreviewUPP = NULL ;
+ NavReplyRecord mNavReply;
+ AEDesc* mDefaultLocation = NULL ;
+ bool mSelectDefault = false ;
+
+ ::NavGetDefaultDialogOptions(&mNavOptions);
+
+ mNavFilterUPP = nil;
+ mNavPreviewUPP = nil;
+ mSelectDefault = false;
+ mNavReply.validRecord = false;
+ mNavReply.replacing = false;
+ mNavReply.isStationery = false;
+ mNavReply.translationNeeded = false;
+ mNavReply.selection.descriptorType = typeNull;
+ mNavReply.selection.dataHandle = nil;
+ mNavReply.keyScript = smSystemScript;
+ mNavReply.fileTranslation = nil;
+
+ // Set default location, the location
+ // that's displayed when the dialog
+ // first appears
+
+ if ( mDefaultLocation ) {
+
+ if (mSelectDefault) {
+ mNavOptions.dialogOptionFlags |= kNavSelectDefaultLocation;
+ } else {
+ mNavOptions.dialogOptionFlags &= ~kNavSelectDefaultLocation;
+ }
+ }
+
+ OSErr err = ::NavChooseFolder(
+ mDefaultLocation,
+ &mNavReply,
+ &mNavOptions,
+ NULL,
+ mNavFilterUPP,
+ 0L); // User Data
+
+ if ( (err != noErr) && (err != userCanceledErr) ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+
+ if (mNavReply.validRecord) { // User chose a folder
+
+ FSSpec folderInfo;
+ FSSpec outFileSpec ;
+ AEDesc specDesc ;
+
+ OSErr err = ::AECoerceDesc( &mNavReply.selection , typeFSS, &specDesc);
+ if ( err != noErr ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+ folderInfo = **(FSSpec**) specDesc.dataHandle;
+ if (specDesc.dataHandle != nil) {
+ ::AEDisposeDesc(&specDesc);
+ }
+
+// mNavReply.GetFileSpec(folderInfo);
+
+ // The FSSpec from NavChooseFolder is NOT the file spec
+ // for the folder. The parID field is actually the DirID
+ // of the folder itself, not the folder's parent, and
+ // the name field is empty. We must call PBGetCatInfo
+ // to get the parent DirID and folder name
+
+ Str255 name;
+ CInfoPBRec thePB; // Directory Info Parameter Block
+ thePB.dirInfo.ioCompletion = nil;
+ thePB.dirInfo.ioVRefNum = folderInfo.vRefNum; // Volume is right
+ thePB.dirInfo.ioDrDirID = folderInfo.parID; // Folder's DirID
+ thePB.dirInfo.ioNamePtr = name;
+ thePB.dirInfo.ioFDirIndex = -1; // Lookup using Volume and DirID
+
+ err = ::PBGetCatInfoSync(&thePB);
+ if ( err != noErr ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+ // Create cannonical FSSpec
+ ::FSMakeFSSpec(thePB.dirInfo.ioVRefNum, thePB.dirInfo.ioDrParID,
+ name, &outFileSpec);
+
+ // outFolderDirID = thePB.dirInfo.ioDrDirID;
+ m_path = wxMacFSSpec2UnixFilename( &outFileSpec ) ;
+ return wxID_OK ;
+ }
+ return wxID_CANCEL;
+
}
- return wxID_CANCEL;
}
#include "wx/filedlg.h"
#include "wx/intl.h"
+#include "PLStringFuncs.h"
+
#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxFileDialog, wxDialog)
#endif
// begin wxmac
+#include "Navigation.h"
+
#include "morefile.h"
#include "moreextr.h"
#include "fullpath.h"
#include "fspcompa.h"
#include "PLStringFuncs.h"
+extern bool gUseNavServices ;
+
+static pascal void NavEventProc(
+ NavEventCallbackMessage inSelector,
+ NavCBRecPtr ioParams,
+ NavCallBackUserData ioUserData);
+
+#if TARGET_CARBON
+ static NavEventUPP sStandardNavEventFilter = NewNavEventUPP(NavEventProc);
+#else
+ static NavEventUPP sStandardNavEventFilter = NewNavEventProc(NavEventProc);
+#endif
+
+static pascal void
+NavEventProc(
+ NavEventCallbackMessage inSelector,
+ NavCBRecPtr ioParams,
+ NavCallBackUserData /* ioUserData */)
+{
+ if (inSelector == kNavCBEvent) {
+ // In Universal Headers 3.2, Apple changed the definition of
+ /*
+ #if UNIVERSAL_INTERFACES_VERSION >= 0x0320 // Universal Headers 3.2
+ UModalAlerts::ProcessModalEvent(*(ioParams->eventData.eventDataParms.event));
+
+ #else
+ UModalAlerts::ProcessModalEvent(*(ioParams->eventData.event));
+ #endif
+ */
+
+ }
+}
+
char * gfilters[] =
{
"*.TXT" ,
return false;
}
-#endif
+#endif !TARGET_CARBON
void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const char *filter , FileFilterYDUPP fileFilter, StandardFileReply *theSFR)
{
int wxFileDialog::ShowModal()
{
+ #if !TARGET_CARBON
+ if ( !gUseNavServices )
+ {
if ( m_dialogStyle & wxSAVE )
{
StandardFileReply reply ;
strcpy((char *)prompt, m_message) ;
c2pstr((char *)prompt ) ;
- strcpy((char *)path, m_path ) ;
+ strcpy((char *)path, m_dir ) ;
c2pstr((char *)path ) ;
StandardFileReply reply ;
}
return wxID_CANCEL;
}
+ else
+#endif
+ {
+ NavDialogOptions mNavOptions;
+ NavObjectFilterUPP mNavFilterUPP = NULL;
+ NavPreviewUPP mNavPreviewUPP = NULL ;
+ NavReplyRecord mNavReply;
+ AEDesc mDefaultLocation ;
+ bool mSelectDefault = false ;
+
+ ::NavGetDefaultDialogOptions(&mNavOptions);
+
+ mNavFilterUPP = nil;
+ mNavPreviewUPP = nil;
+ mSelectDefault = false;
+ mNavReply.validRecord = false;
+ mNavReply.replacing = false;
+ mNavReply.isStationery = false;
+ mNavReply.translationNeeded = false;
+ mNavReply.selection.descriptorType = typeNull;
+ mNavReply.selection.dataHandle = nil;
+ mNavReply.keyScript = smSystemScript;
+ mNavReply.fileTranslation = nil;
+
+ // Set default location, the location
+ // that's displayed when the dialog
+ // first appears
+
+ FSSpec location ;
+ wxUnixFilename2FSSpec( m_dir , &location ) ;
+ OSErr err = noErr ;
+
+ mDefaultLocation.descriptorType = typeNull;
+ mDefaultLocation.dataHandle = nil;
+
+ err = ::AECreateDesc(typeFSS, &location, sizeof(FSSpec), &mDefaultLocation );
+
+ if ( mDefaultLocation.dataHandle ) {
+
+ if (mSelectDefault) {
+ mNavOptions.dialogOptionFlags |= kNavSelectDefaultLocation;
+ } else {
+ mNavOptions.dialogOptionFlags &= ~kNavSelectDefaultLocation;
+ }
+ }
+
+ strcpy((char *)mNavOptions.message, m_message) ;
+ c2pstr((char *)mNavOptions.message ) ;
+
+ strcpy((char *)mNavOptions.savedFileName, m_fileName) ;
+ c2pstr((char *)mNavOptions.savedFileName ) ;
+
+ if ( m_dialogStyle & wxSAVE )
+ {
+
+ mNavOptions.dialogOptionFlags |= kNavNoTypePopup ;
+ mNavOptions.dialogOptionFlags |= kNavDontAutoTranslate ;
+ mNavOptions.dialogOptionFlags |= kNavDontAddTranslateItems ;
+
+ err = ::NavPutFile(
+ &mDefaultLocation,
+ &mNavReply,
+ &mNavOptions,
+ sStandardNavEventFilter ,
+ 'TEXT',
+ 'TEXT',
+ 0L); // User Data
+ }
+ else
+ {
+ if ( m_dialogStyle & wxMULTIPLE )
+ mNavOptions.dialogOptionFlags |= kNavAllowMultipleFiles ;
+ else
+ mNavOptions.dialogOptionFlags &= ~kNavAllowMultipleFiles ;
+
+ err = ::NavGetFile(
+ &mDefaultLocation,
+ &mNavReply,
+ &mNavOptions,
+ sStandardNavEventFilter ,
+ mNavPreviewUPP,
+ mNavFilterUPP,
+ 0L /*inFileTypes.TypeListHandle() */,
+ 0L); // User Data
+ }
+
+ if ( mDefaultLocation.dataHandle != nil )
+ {
+ ::AEDisposeDesc(&mDefaultLocation);
+ }
+
+ if ( (err != noErr) && (err != userCanceledErr) ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+
+ if (mNavReply.validRecord) {
+
+ FSSpec outFileSpec ;
+ AEDesc specDesc ;
+
+ long count ;
+ ::AECountItems( &mNavReply.selection , &count ) ;
+ for ( long i = 1 ; i <= count ; ++i )
+ {
+ OSErr err = ::AEGetNthDesc( &mNavReply.selection , i , typeFSS, NULL , &specDesc);
+ if ( err != noErr ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+ outFileSpec = **(FSSpec**) specDesc.dataHandle;
+ if (specDesc.dataHandle != nil) {
+ ::AEDisposeDesc(&specDesc);
+ }
+
+
+ // outFolderDirID = thePB.dirInfo.ioDrDirID;
+ m_path = wxMacFSSpec2UnixFilename( &outFileSpec ) ;
+ m_paths.Add( m_path ) ;
+ m_fileNames.Add(m_fileName);
+ }
+ // set these to the first hit
+ m_path = m_paths[ 0 ] ;
+ m_fileName = wxFileNameFromPath(m_path);
+ m_dir = wxPathOnly(m_path);
+
+ return wxID_OK ;
+ }
+ return wxID_CANCEL;
+ }
+}
// Generic file load/save dialog
static wxString
#include "wx/defs.h"
#include "wx/string.h"
#include "wx/font.h"
+#include "wx/fontutil.h"
#include "wx/gdicmn.h"
#include "wx/fontutil.h"
wxTheFontList->Append(this);
}
+bool wxFont::Create(const wxNativeFontInfo& info)
+{
+ return Create(info.pointSize, info.family, info.style, info.weight,
+ info.underlined, info.faceName, info.encoding);
+}
+
wxFont::wxFont(const wxString& fontdesc)
{
wxNativeFontInfo info;
return TRUE;
}
-bool wxFont::Create(const wxNativeFontInfo& info)
-{
- return Create(info.pointSize, info.family, info.style, info.weight,
- info.underlined, info.faceName, info.encoding);
-}
-
wxFont::~wxFont()
{
if (wxTheFontList)
#endif
#include "wx/fontenum.h"
+#include "wx/fontutil.h"
#include "wx/fontmap.h"
#include "wx/fontutil.h"
{
wxStatusBar *statusBar = NULL;
- statusBar = new wxStatusBar(this, id, style, name);
-
+ statusBar = new wxStatusBar(this, id,
+ style, name);
+ statusBar->SetSize( 100 , 15 ) ;
statusBar->SetFieldsCount(number);
return statusBar;
}
// Since we wish the status bar to be directly under the client area,
// we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS.
- m_frameStatusBar->SetSize(0, h, w, WX_MAC_STATUSBAR_HEIGHT );
+ m_frameStatusBar->SetSize(0, h, w, sh);
}
}
{
int statusX, statusY;
GetStatusBar()->GetClientSize(&statusX, &statusY);
- // right now this is a constant, this might change someday
- *y -= WX_MAC_STATUSBAR_HEIGHT ;
+ *y -= statusY;
}
#endif // wxUSE_STATUSBAR
m_dataArray.Add( NULL );
}
m_noItems ++;
+ DoSetItemClientData( index , NULL ) ;
MacAppend( item ) ;
return index ;
if ( EqualString( s1 , s2 , false , false ) )
return i ;
}
+ if ( s.Left(1) = "*" && s.Length() > 1 )
+ {
+ s.MakeLower() ;
+ for ( int i = 0 ; i < m_noItems ; ++i )
+ {
+ if ( GetString(i).Lower().Matches(s) )
+ return i ;
+ }
+ }
+
}
else
{
}
}
}
- else
+#else
+ if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName )
+ {
+ wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
+ UMASetMenuTitle( menu->GetHMenu() , label ) ;
+
+ for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
+ {
+ item = (wxMenuItem *)node->Data();
+ subMenu = item->GetSubMenu() ;
+ if (subMenu)
+ {
+ UMAInsertMenu( subMenu->GetHMenu() , -1 ) ;
+ }
+ else
+ {
+ if ( item->GetId() == wxApp::s_macAboutMenuItemId )
+ {
+ Str255 label ;
+ UInt8 modifiers ;
+ SInt16 key ;
+ wxMenuItem::MacBuildMenuString( label, &key , &modifiers , item->GetText(), item->GetId() != wxApp::s_macAboutMenuItemId); // no shortcut in about menu
+ UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label );
+ UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 );
+ }
+ }
+ }
+ UMAInsertMenu(m_menus[i]->GetHMenu(), 0);
+ }
#endif
+ else
{
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
UMASetMenuTitle( menu->GetHMenu() , label ) ;
// ----------------------------------------------------------------------------
#if !USE_SHARED_LIBRARIES
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)
+
BEGIN_EVENT_TABLE(wxNotebook, wxControl)
EVT_NOTEBOOK_PAGE_CHANGED(-1, wxNotebook::OnSelChange)
// Create an abort window
wxBeginBusyCursor();
-/*
wxWindow *win = CreateAbortWindow(parent, printout);
wxYield();
sm_abortWindow = win;
sm_abortWindow->Show(TRUE);
wxYield();
-*/
printout->OnBeginPrinting();
}
else
{
+ GrafPtr thePort ;
+ GetPort( &thePort ) ;
+ wxYield() ;
+ SetPort( thePort ) ;
+
dc->StartPage();
keepGoing = printout->OnPrintPage(pn);
dc->EndPage();
wxString value ;
+ {
+ TEHandle teH ;
+ long size ;
+
+ UMAGetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ (*teH)->lineHeight = -1 ;
+ }
+
if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakeMacStringFromPC( st ) ;
else
else
value = st ;
UMASetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ;
- Refresh() ;
-// MacInvalidateControl() ;
+ UMADrawControl( m_macControl ) ;
}
// Clipboard operations
UMAGetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
TEFromScrap() ;
TEPaste( teH ) ;
-// MacInvalidateControl() ;
+ UMADrawControl( m_macControl ) ;
}
}
long response;
bool hasThreadManager ;
hasThreadManager = Gestalt( gestaltThreadMgrAttr, &response) == noErr && response & 1;
-#if TARGET_RT_MAC_CFM
+#if !TARGET_CARBON
+#if GENERATINGCFM
// verify presence of shared library
hasThreadManager = hasThreadManager && ((Ptr)NewThread != (Ptr)kUnresolvedCFragSymbolAddress);
+#endif
#endif
if ( !hasThreadManager )
{
#include <wx/mac/uma.h>
#include <wx/mac/aga.h>
+
+#include "Navigation.h"
+
// init
static bool sUMAHasAppearance = false ;
bool UMAHasWindowManager() { return sUMAHasWindowManager ; }
long UMAGetWindowManagerAttr() { return sUMAWindowManagerAttr ; }
-
+void UMACleanupToolbox()
+{
+#if UMA_USE_APPEARANCE
+ if ( sUMAHasAppearance )
+ {
+ UnregisterAppearanceClient() ;
+ }
+#endif
+ if ( NavServicesAvailable() )
+ {
+ NavUnload() ;
+ }
+}
void UMAInitToolbox( UInt16 inMoreMastersCalls )
{
#if !TARGET_CARBON
::InitGraf(&qd.thePort);
::InitFonts();
- ::InitWindows();
::InitMenus();
::TEInit();
::InitDialogs(0L);
}
#endif // UMA_USE_WINDOWMGR
#endif
+
+ if ( sUMAHasWindowManager )
+ InitFloatingWindows() ;
+ else
+ InitWindows();
+
+ if ( NavServicesAvailable() )
+ {
+ NavLoad() ;
+ }
}
// process manager
int gPrOpenCounter = 0 ;
-void UMAPrOpen()
+OSStatus UMAPrOpen()
{
#if !TARGET_CARBON
OSErr err = noErr ;
err = PrError() ;
wxASSERT( err == noErr ) ;
}
+ return err ;
#else
- #pragma warning "TODO Printing for Carbon"
+ OSStatus err = noErr ;
+ ++gPrOpenCounter ;
+ if ( gPrOpenCounter == 1 )
+ {
+ err = PMBegin() ;
+ wxASSERT( err == noErr ) ;
+ }
+ return err ;
#endif
}
-void UMAPrClose()
+OSStatus UMAPrClose()
{
#if !TARGET_CARBON
OSErr err = noErr ;
wxASSERT( err == noErr ) ;
}
--gPrOpenCounter ;
+ return err ;
#else
- #pragma warning "TODO Printing for Carbon"
+ OSStatus err = noErr ;
+ wxASSERT( gPrOpenCounter >= 1 ) ;
+ if ( gPrOpenCounter == 1 )
+ {
+ err = PMEnd() ;
+ }
+ --gPrOpenCounter ;
+ return err ;
#endif
}
return FALSE;
}
+const wxChar* wxGetHomeDir(wxString *pstr)
+{
+ *pstr = wxMacFindFolder( (short) kOnSystemDisk, kPreferencesFolderType, kDontCreateFolder ) ;
+ return pstr->c_str() ;
+}
+
+
+
// Get user name e.g. AUTHOR
bool wxGetUserName(char *buf, int maxSize)
{
#include "wx/mac/wave.h"
wxWave::wxWave()
- : m_waveData(NULL), m_waveLength(0), m_isResource(FALSE)
+ : m_hSnd(NULL), m_waveLength(0), m_isResource(true), m_sndChan(0)
{
}
wxWave::wxWave(const wxString& sFileName, bool isResource)
- : m_waveData(NULL), m_waveLength(0), m_isResource(FALSE)
+ : m_hSnd(NULL), m_waveLength(0), m_isResource(true), m_sndChan(0)
{
Create(sFileName, isResource);
}
Free();
}
+
bool wxWave::Create(const wxString& fileName, bool isResource)
{
- Free();
+ bool ret = false;
+ m_sndname = fileName;
+ m_isResource = isResource;
+
+ if (m_isResource)
+ ret = true;
+ else
+ { /*
+ if (sndChan)
+ { // we're playing
+ FSClose(SndRefNum);
+ SndRefNum = 0;
+ SndDisposeChannel(sndChan, TRUE);
+ free(sndChan);
+ sndChan = 0;
+ KillTimer(0,timerID);
+ }
+
+ if (!lpSnd)
+ return true;
+
+ if (_access(lpSnd,0)) // no file, no service
+ return false;
+
+ // Allocate SndChannel
+ sndChan = (SndChannelPtr) malloc (sizeof(SndChannel));
+
+ if (!sndChan)
+ return false;
+
+ sndChan->qLength = 128;
+
+ if (noErr != SndNewChannel (&sndChan, sampledSynth, initMono | initNoInterp, 0))
+ {
+ free(sndChan);
+ sndChan = 0;
+ return false;
+ }
- // TODO
+ if (!(SndRefNum = MacOpenSndFile ((char *)lpSnd)))
+ {
+ SndDisposeChannel(sndChan, TRUE);
+ free(sndChan);
+ sndChan = 0;
- return FALSE;
+ return false;
+ }
+
+ bool async = false;
+
+ if (fdwSound & SND_ASYNC)
+ async = true;
+
+ if (SndStartFilePlay(sndChan, SndRefNum, 0, 81920, 0, 0, 0, async) != noErr)
+ {
+ FSClose (SndRefNum);
+ SndRefNum = 0;
+ SndDisposeChannel (sndChan, TRUE);
+ free (sndChan);
+ sndChan = 0;
+ return false;
+ }
+
+ if (async)
+ { // haven't finish yet
+ timerID = SetTimer(0, 0, 250, TimerCallBack);
+ }
+ else
+ {
+ FSClose (SndRefNum);
+ SndRefNum = 0;
+ SndDisposeChannel (sndChan, TRUE);
+ free (sndChan);
+ sndChan = 0;
+ }*/
+ }
+
+ return ret;
}
+
+//don't know what to do with looped, wth
bool wxWave::Play(bool async, bool looped) const
{
- if (!IsOk())
- return FALSE;
+ char lpSnd[32];
+ bool ret = false;
+
+ if (m_isResource)
+ {
+ strcpy(lpSnd, m_sndname);
+ c2pstr((char *) lpSnd);
+ SndListHandle hSnd;
+
+ hSnd = (SndListHandle) GetNamedResource('snd ',(const unsigned char *) lpSnd);
- // TODO
- return FALSE;
+ if ((hSnd != NULL) && (SndPlay(m_sndChan, hSnd, async) == noErr))
+ ret = true;
+ }
+
+ return ret;
}
+
bool wxWave::Free()
{
- // TODO
- return FALSE;
+ bool ret = false;
+
+ if (m_isResource)
+ {
+ m_sndname.Empty();
+ ret = true;
+ }
+ else
+ {
+ //TODO,
+ }
+
+ return ret;
}
+//code below is from an old implementation used for telinfo with MSVC crossplatform support
+//technology proceeds, so it would be the wisest to drop this code, but it's left here just
+//for the sake of a reference. BTW: Wave files can now be played with QT, starting from V3
+
+/*static short MacOpenSndFile (char * path)
+{
+ VolumeParam vp;
+ FSSpec fspec;
+ Str255 name;
+ char *c;
+
+ // first, get the volume reference number for the file. Start by
+ // making a Pstring with just the volume name
+ strcpy ((char *) name, path);
+ if (c = strchr ((char *) name, ':'))
+ {
+ c++;
+ *c = '\0';
+ }
+
+ c2pstr ((char *) name);
+ vp.ioCompletion = 0;
+ vp.ioVolIndex = -1;
+ vp.ioNamePtr = name;
+ vp.ioVRefNum = 0;
+
+ if (PBGetVInfo((ParamBlockRec *)&vp, 0) != noErr)
+ return 0;
+
+ // next, buld an FSSpec for the file
+ strcpy ((char *) name, path);
+ c2pstr ((char *) name);
+ if (FSMakeFSSpec (vp.ioVRefNum, 0, name, &fspec) != noErr)
+ return 0;
+
+ short frefnum;
+ // now open the file, and return it's reference number
+ if (FSpOpenDF(&fspec, fsRdPerm, &frefnum) != noErr)
+ return 0;
+
+ return frefnum;
+}
+
+
+void TimerCallBack(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
+{
+ if(!sndChan)
+ {
+ KillTimer(0,timerID);
+ return;
+ }
+
+ SCStatus scstat;
+
+ if (noErr == SndChannelStatus (sndChan, sizeof (SCStatus), &scstat)) {
+ if (scstat.scChannelPaused || scstat.scChannelBusy)
+ return; // not done yet
+ }
+
+ // either error or done.
+ FSClose (SndRefNum);
+ SndRefNum = 0;
+ SndDisposeChannel (sndChan, TRUE);
+ free (sndChan);
+ sndChan = 0;
+ KillTimer(0,timerID);
+}*/
+
+
*x = m_width ;
*y = m_height ;
- *x -= 2 * MacGetBorderSize( ) ;
- *y -= 2 * MacGetBorderSize( ) ;
+ *x -= MacGetLeftBorderSize( ) + MacGetRightBorderSize( ) ;
+ *y -= MacGetTopBorderSize( ) + MacGetBottomBorderSize( );
if ( (m_vScrollBar && m_vScrollBar->IsShown()) || (m_hScrollBar && m_hScrollBar->IsShown()) )
{
wxPoint wxWindow::GetClientAreaOrigin() const
{
- return wxPoint(MacGetBorderSize( ) , MacGetBorderSize( ) );
+ return wxPoint(MacGetLeftBorderSize( ) , MacGetTopBorderSize( ) );
}
// Makes an adjustment to the window position (for example, a frame that has
if ( !fontToUse )
fontToUse = &m_font;
- wxClientDC dc( this ) ;
+ wxClientDC dc( (wxWindow*) this ) ;
long lx,ly,ld,le ;
dc.GetTextExtent( string , &lx , &ly , &ld, &le, fontToUse ) ;
if ( externalLeading )
if ( height != -1 && m_vScrollBar )
height += MAC_SCROLLBAR_SIZE ;
- width += 2 * MacGetBorderSize( ) ;
- height += 2 * MacGetBorderSize( ) ;
+ width += MacGetLeftBorderSize( ) + MacGetRightBorderSize( ) ;
+ height += MacGetTopBorderSize( ) + MacGetBottomBorderSize( ) ;
DoSetSize( -1 , -1 , width , height ) ;
}
for (wxNode *node = GetChildren().First(); node; node = node->Next())
{
wxWindow *child = (wxWindow*)node->Data();
- if ( child->GetMacRootWindow() == window )
+ // added the m_isShown test --dmazzoni
+ if ( child->GetMacRootWindow() == window && child->m_isShown )
{
if (child->MacGetWindowFromPointSub(newPoint , outWin ))
return TRUE;
{
wxPoint point( screenpoint ) ;
wxWindow* win = wxFindWinFromMacWindow( window ) ;
+ if ( win )
+ {
win->ScreenToClient( point ) ;
return win->MacGetWindowFromPointSub( point , outWin ) ;
}
+ }
return FALSE ;
}
int width = m_width ;
int height = m_height ;
- width -= 2 * MacGetBorderSize() ;
- height -= 2 * MacGetBorderSize() ;
+ width -= MacGetLeftBorderSize() + MacGetRightBorderSize();
+ height -= MacGetTopBorderSize() + MacGetBottomBorderSize();
wxPoint vPoint(width-MAC_SCROLLBAR_SIZE, 0) ;
wxSize vSize(MAC_SCROLLBAR_SIZE, height - adjust) ;
SectRect(clipRect, &myClip, clipRect);
}
-long wxWindow::MacGetBorderSize( ) const
+long wxWindow::MacGetLeftBorderSize( ) const
{
if( m_macWindowData )
return 0 ;
return 0 ;
}
+long wxWindow::MacGetRightBorderSize( ) const
+{
+ if( m_macWindowData )
+ return 0 ;
+
+ if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+ {
+ return 3 ;
+ }
+ else if ( m_windowStyle &wxDOUBLE_BORDER)
+ {
+ return 3 ;
+ }
+ else if (m_windowStyle &wxSIMPLE_BORDER)
+ {
+ return 3 ;
+ }
+ return 0 ;
+}
+
+long wxWindow::MacGetTopBorderSize( ) const
+{
+ if( m_macWindowData )
+ return 0 ;
+
+ if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+ {
+ return 2 ;
+ }
+ else if ( m_windowStyle &wxDOUBLE_BORDER)
+ {
+ return 2 ;
+ }
+ else if (m_windowStyle &wxSIMPLE_BORDER)
+ {
+ return 1 ;
+ }
+ return 0 ;
+}
+
+long wxWindow::MacGetBottomBorderSize( ) const
+{
+ if( m_macWindowData )
+ return 0 ;
+
+ if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+ {
+ return 3 ;
+ }
+ else if ( m_windowStyle &wxDOUBLE_BORDER)
+ {
+ return 3 ;
+ }
+ else if (m_windowStyle &wxSIMPLE_BORDER)
+ {
+ return 3 ;
+ }
+ return 0 ;
+}
+
long wxWindow::MacRemoveBordersFromStyle( long style )
{
return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ;
IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl)
#endif
+short nextMenuId = 100 ; // wxMenu takes the lower ids
+
+wxChoice::~wxChoice()
+{
+ // DeleteMenu( m_macPopUpMenuId ) ;
+ DisposeMenu( m_macPopUpMenuHandle ) ;
+}
+
bool wxChoice::Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos,
const wxSize& size,
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
+ m_macPopUpMenuHandle = NewMenu( 1 , "\pPopUp Menu" ) ;
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , -12345 , 0 ,
kControlPopupButtonProc + kControlPopupFixedWidthVariant , (long) this ) ;
} ;
resource 'CURS' (9, "Hand") {
- $"01 80 1A 70 26 48 26 4A 12 4D 12 49 68 09 98 01"
- $"88 02 40 02 20 02 20 04 10 04 08 08 04 08 04 08",
- $"01 80 1B F0 3F F8 3F FA 1F FF 1F FF 7F FF FF FF"
- $"FF FE 7F FE 3F FE 3F FC 1F FC 0F F8 07 F8 07 F8",
- {9, 8}
+ $"0380 04C0 04C0 04C0 04C0 04C0 74F8 9CAE"
+ $"4CAB 240B 2403 1003 0803 0806 0406 0406",
+ $"0380 07C0 07C0 07C0 07C0 07C0 77F8 FFFE"
+ $"7FFF 3FFF 3FFF 1FFF 0FFF 0FFE 07FE 07FE",
+ {0, 7}
};
resource 'CURS' (10, "SizeWE") {
#include "wx/dc.h"
#include "wx/mac/uma.h"
+#if __MSL__ >= 0x6000
+#include "math.h"
+#endif
+
#if !USE_SHARED_LIBRARY
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
#endif
void wxDC::MacSetupPort() const
{
- AGAPortHelper* help = &m_macPortHelper ;
+ AGAPortHelper* help = (AGAPortHelper*) &m_macPortHelper ;
help->Setup( m_macPort ) ;
m_macPortId = ++m_macCurrentPortId ;
::SetOrigin(-m_macLocalOrigin.h, -m_macLocalOrigin.v);
// CMB: if scale has changed call SetPen to recalulate the line width
if (m_scaleX != origScaleX || m_scaleY != origScaleY)
{
- // TODO : set internal flags for recalc
+ // this is a bit artificial, but we need to force wxDC to think
+ // the pen has changed
+ wxPen* pen = & GetPen();
+ wxPen tempPen;
+ m_pen = tempPen;
+ SetPen(* pen);
}
};
wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
{
-#if !TARGET_CARBON
- OSErr err ;
+ OSStatus err ;
wxString message ;
m_printData = printdata ;
m_printData.ConvertToNative() ;
- ::UMAPrOpen() ;
- err = PrError() ;
+ err = UMAPrOpen() ;
if ( err )
{
message.Printf( "Print Error %d", err ) ;
UMAPrClose() ;
}
+#if !TARGET_CARBON
if ( ::PrValidate( m_printData.m_macPrintInfo ) )
{
::PrStlDialog( m_printData.m_macPrintInfo ) ;
}
// sets current port
m_macPort = (GrafPtr ) m_macPrintPort ;
+#else
+ m_macPrintPort = kPMNoReference ;
+ err = PMBeginDocument(
+ m_printData.m_macPrintSettings,
+ m_printData.m_macPageFormat,
+ &m_macPrintPort);
+ if ( err != noErr || m_macPrintPort == kPMNoReference )
+ {
+ message.Printf( "Print Error %d", err ) ;
+ wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+ UMAPrClose() ;
+ }
+ // sets current port
+ ::GetPort( &m_macPort ) ;
+#endif
m_ok = TRUE ;
m_minY = m_minX = 0 ;
+#if TARGET_CARBON
+#else
m_maxX = (**m_printData.m_macPrintInfo).rPaper.right - (**m_printData.m_macPrintInfo).rPaper.left ;
m_maxY = (**m_printData.m_macPrintInfo).rPaper.bottom - (**m_printData.m_macPrintInfo).rPaper.top ;
-#else
-#pragma warning "TODO:printing support for carbon"
#endif
}
wxPrinterDC::~wxPrinterDC(void)
{
+ OSStatus err ;
+ wxString message ;
#if !TARGET_CARBON
if ( m_ok )
{
- OSErr err ;
- wxString message ;
-
::PrCloseDoc( m_macPrintPort ) ;
err = PrError() ;
m_macPortHelper.Clear() ;
}
#else
-#pragma warning "TODO:printing support for carbon"
+ if ( m_ok )
+ {
+ err = PMEndDocument(m_macPrintPort);
+ if ( !err )
+ {
+ message.Printf( "Print Error %d", err ) ;
+ wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+ UMAPrClose() ;
+ }
+ UMAPrClose() ;
+ }
#endif
}
void wxPrinterDC::StartPage(void)
{
-#if !TARGET_CARBON
if ( !m_ok )
return ;
m_macPenInstalled = false ;
- OSErr err ;
+ OSStatus err ;
wxString message ;
+#if !TARGET_CARBON
PrOpenPage( m_macPrintPort , NULL ) ;
- SetOrigin( - (**m_printData.m_macPrintInfo).rPaper.left , - (**m_printData.m_macPrintInfo).rPaper.top ) ;
+ m_macLocalOrigin.h = (**m_printData.m_macPrintInfo).rPaper.left ;
+ m_macLocalOrigin.v = (**m_printData.m_macPrintInfo).rPaper.top ;
+
+ SetOrigin( - m_macLocalOrigin.h , - m_macLocalOrigin.v ) ;
Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
::ClipRect( &clip ) ;
err = PrError() ;
m_ok = FALSE ;
}
#else
-#pragma warning "TODO:printing support for carbon"
+ err = PMBeginPage(m_macPrintPort, nil);
+ if ( err )
+ {
+ message.Printf( "Print Error %d", err ) ;
+ wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+ PMEndPage(m_macPrintPort);
+ PMEndDocument(m_macPrintPort);
+ UMAPrClose() ;
+ ::SetPort( macPrintFormerPort ) ;
+ m_ok = FALSE ;
+ }
#endif
}
void wxPrinterDC::EndPage(void)
{
-#if !TARGET_CARBON
if ( !m_ok )
return ;
- OSErr err ;
+ OSStatus err ;
wxString message ;
+#if !TARGET_CARBON
PrClosePage( (TPrPort*) m_macPort ) ;
err = PrError() ;
if ( err )
m_ok = FALSE ;
}
#else
-#pragma warning "TODO:printing support for carbon"
+ err = PMEndPage(m_macPrintPort);
+ if ( err )
+ {
+ message.Printf( "Print Error %d", err ) ;
+ wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+ PMEndDocument(m_macPrintPort);
+ UMAPrClose() ;
+ ::SetPort( macPrintFormerPort ) ;
+ m_ok = FALSE ;
+ }
#endif
}
#include "wx/cmndata.h"
+#include "Navigation.h"
+
#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxDirDialog, wxDialog)
#endif
+bool gUseNavServices = NavServicesAvailable() ;
+
// the data we need to pass to our standard file hook routine
// includes a pointer to the dialog, a pointer to the standard
// file reply record (so we can inspect the current selection)
// and a copy of the "previous" file spec of the reply record
// so we can see if the selection has changed
+#if !TARGET_CARBON
+
struct UserDataRec {
StandardFileReply *sfrPtr;
FSSpec oldSelectionFSSpec;
typedef struct UserDataRec
UserDataRec, *UserDataRecPtr;
-#if !TARGET_CARBON
-
enum {
kSelectItem = 10, // select button item number
kSFGetFolderDlgID = 250, // dialog resource number
return item;
}
-#endif
void StandardGetFolder( ConstStr255Param message , ConstStr255Param path , FileFilterYDUPP fileFilter, StandardFileReply *theSFR)
{
return !(visibleFlag && folderFlag);
}
+#endif
+
+
wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
const wxString& defaultPath,
long style, const wxPoint& pos)
int wxDirDialog::ShowModal()
{
+ #if !TARGET_CARBON
+ if ( !gUseNavServices )
{
Str255 prompt ;
Str255 path ;
StandardFileReply reply ;
FileFilterYDUPP invisiblesExcludedCustomFilterUPP = 0 ;
- #if !TARGET_CARBON
invisiblesExcludedCustomFilterUPP =
NewFileFilterYDProc(OnlyVisibleFoldersCustomFileFilter);
- #endif
+
StandardGetFolder( prompt , path , invisiblesExcludedCustomFilterUPP, &reply);
- #if !TARGET_CARBON
+
DisposeRoutineDescriptor(invisiblesExcludedCustomFilterUPP);
- #endif
+
if ( reply.sfGood == false )
{
m_path = "" ;
m_path = wxMacFSSpec2UnixFilename( &reply.sfFile ) ;
return wxID_OK ;
}
+ return wxID_CANCEL;
+ }
+ else
+ #endif
+ {
+ NavDialogOptions mNavOptions;
+ NavObjectFilterUPP mNavFilterUPP = NULL;
+ NavPreviewUPP mNavPreviewUPP = NULL ;
+ NavReplyRecord mNavReply;
+ AEDesc* mDefaultLocation = NULL ;
+ bool mSelectDefault = false ;
+
+ ::NavGetDefaultDialogOptions(&mNavOptions);
+
+ mNavFilterUPP = nil;
+ mNavPreviewUPP = nil;
+ mSelectDefault = false;
+ mNavReply.validRecord = false;
+ mNavReply.replacing = false;
+ mNavReply.isStationery = false;
+ mNavReply.translationNeeded = false;
+ mNavReply.selection.descriptorType = typeNull;
+ mNavReply.selection.dataHandle = nil;
+ mNavReply.keyScript = smSystemScript;
+ mNavReply.fileTranslation = nil;
+
+ // Set default location, the location
+ // that's displayed when the dialog
+ // first appears
+
+ if ( mDefaultLocation ) {
+
+ if (mSelectDefault) {
+ mNavOptions.dialogOptionFlags |= kNavSelectDefaultLocation;
+ } else {
+ mNavOptions.dialogOptionFlags &= ~kNavSelectDefaultLocation;
+ }
+ }
+
+ OSErr err = ::NavChooseFolder(
+ mDefaultLocation,
+ &mNavReply,
+ &mNavOptions,
+ NULL,
+ mNavFilterUPP,
+ 0L); // User Data
+
+ if ( (err != noErr) && (err != userCanceledErr) ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+
+ if (mNavReply.validRecord) { // User chose a folder
+
+ FSSpec folderInfo;
+ FSSpec outFileSpec ;
+ AEDesc specDesc ;
+
+ OSErr err = ::AECoerceDesc( &mNavReply.selection , typeFSS, &specDesc);
+ if ( err != noErr ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+ folderInfo = **(FSSpec**) specDesc.dataHandle;
+ if (specDesc.dataHandle != nil) {
+ ::AEDisposeDesc(&specDesc);
+ }
+
+// mNavReply.GetFileSpec(folderInfo);
+
+ // The FSSpec from NavChooseFolder is NOT the file spec
+ // for the folder. The parID field is actually the DirID
+ // of the folder itself, not the folder's parent, and
+ // the name field is empty. We must call PBGetCatInfo
+ // to get the parent DirID and folder name
+
+ Str255 name;
+ CInfoPBRec thePB; // Directory Info Parameter Block
+ thePB.dirInfo.ioCompletion = nil;
+ thePB.dirInfo.ioVRefNum = folderInfo.vRefNum; // Volume is right
+ thePB.dirInfo.ioDrDirID = folderInfo.parID; // Folder's DirID
+ thePB.dirInfo.ioNamePtr = name;
+ thePB.dirInfo.ioFDirIndex = -1; // Lookup using Volume and DirID
+
+ err = ::PBGetCatInfoSync(&thePB);
+ if ( err != noErr ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+ // Create cannonical FSSpec
+ ::FSMakeFSSpec(thePB.dirInfo.ioVRefNum, thePB.dirInfo.ioDrParID,
+ name, &outFileSpec);
+
+ // outFolderDirID = thePB.dirInfo.ioDrDirID;
+ m_path = wxMacFSSpec2UnixFilename( &outFileSpec ) ;
+ return wxID_OK ;
+ }
+ return wxID_CANCEL;
+
}
- return wxID_CANCEL;
}
#include "wx/filedlg.h"
#include "wx/intl.h"
+#include "PLStringFuncs.h"
+
#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxFileDialog, wxDialog)
#endif
// begin wxmac
+#include "Navigation.h"
+
#include "morefile.h"
#include "moreextr.h"
#include "fullpath.h"
#include "fspcompa.h"
#include "PLStringFuncs.h"
+extern bool gUseNavServices ;
+
+static pascal void NavEventProc(
+ NavEventCallbackMessage inSelector,
+ NavCBRecPtr ioParams,
+ NavCallBackUserData ioUserData);
+
+#if TARGET_CARBON
+ static NavEventUPP sStandardNavEventFilter = NewNavEventUPP(NavEventProc);
+#else
+ static NavEventUPP sStandardNavEventFilter = NewNavEventProc(NavEventProc);
+#endif
+
+static pascal void
+NavEventProc(
+ NavEventCallbackMessage inSelector,
+ NavCBRecPtr ioParams,
+ NavCallBackUserData /* ioUserData */)
+{
+ if (inSelector == kNavCBEvent) {
+ // In Universal Headers 3.2, Apple changed the definition of
+ /*
+ #if UNIVERSAL_INTERFACES_VERSION >= 0x0320 // Universal Headers 3.2
+ UModalAlerts::ProcessModalEvent(*(ioParams->eventData.eventDataParms.event));
+
+ #else
+ UModalAlerts::ProcessModalEvent(*(ioParams->eventData.event));
+ #endif
+ */
+
+ }
+}
+
char * gfilters[] =
{
"*.TXT" ,
return false;
}
-#endif
+#endif !TARGET_CARBON
void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const char *filter , FileFilterYDUPP fileFilter, StandardFileReply *theSFR)
{
int wxFileDialog::ShowModal()
{
+ #if !TARGET_CARBON
+ if ( !gUseNavServices )
+ {
if ( m_dialogStyle & wxSAVE )
{
StandardFileReply reply ;
strcpy((char *)prompt, m_message) ;
c2pstr((char *)prompt ) ;
- strcpy((char *)path, m_path ) ;
+ strcpy((char *)path, m_dir ) ;
c2pstr((char *)path ) ;
StandardFileReply reply ;
}
return wxID_CANCEL;
}
+ else
+#endif
+ {
+ NavDialogOptions mNavOptions;
+ NavObjectFilterUPP mNavFilterUPP = NULL;
+ NavPreviewUPP mNavPreviewUPP = NULL ;
+ NavReplyRecord mNavReply;
+ AEDesc mDefaultLocation ;
+ bool mSelectDefault = false ;
+
+ ::NavGetDefaultDialogOptions(&mNavOptions);
+
+ mNavFilterUPP = nil;
+ mNavPreviewUPP = nil;
+ mSelectDefault = false;
+ mNavReply.validRecord = false;
+ mNavReply.replacing = false;
+ mNavReply.isStationery = false;
+ mNavReply.translationNeeded = false;
+ mNavReply.selection.descriptorType = typeNull;
+ mNavReply.selection.dataHandle = nil;
+ mNavReply.keyScript = smSystemScript;
+ mNavReply.fileTranslation = nil;
+
+ // Set default location, the location
+ // that's displayed when the dialog
+ // first appears
+
+ FSSpec location ;
+ wxUnixFilename2FSSpec( m_dir , &location ) ;
+ OSErr err = noErr ;
+
+ mDefaultLocation.descriptorType = typeNull;
+ mDefaultLocation.dataHandle = nil;
+
+ err = ::AECreateDesc(typeFSS, &location, sizeof(FSSpec), &mDefaultLocation );
+
+ if ( mDefaultLocation.dataHandle ) {
+
+ if (mSelectDefault) {
+ mNavOptions.dialogOptionFlags |= kNavSelectDefaultLocation;
+ } else {
+ mNavOptions.dialogOptionFlags &= ~kNavSelectDefaultLocation;
+ }
+ }
+
+ strcpy((char *)mNavOptions.message, m_message) ;
+ c2pstr((char *)mNavOptions.message ) ;
+
+ strcpy((char *)mNavOptions.savedFileName, m_fileName) ;
+ c2pstr((char *)mNavOptions.savedFileName ) ;
+
+ if ( m_dialogStyle & wxSAVE )
+ {
+
+ mNavOptions.dialogOptionFlags |= kNavNoTypePopup ;
+ mNavOptions.dialogOptionFlags |= kNavDontAutoTranslate ;
+ mNavOptions.dialogOptionFlags |= kNavDontAddTranslateItems ;
+
+ err = ::NavPutFile(
+ &mDefaultLocation,
+ &mNavReply,
+ &mNavOptions,
+ sStandardNavEventFilter ,
+ 'TEXT',
+ 'TEXT',
+ 0L); // User Data
+ }
+ else
+ {
+ if ( m_dialogStyle & wxMULTIPLE )
+ mNavOptions.dialogOptionFlags |= kNavAllowMultipleFiles ;
+ else
+ mNavOptions.dialogOptionFlags &= ~kNavAllowMultipleFiles ;
+
+ err = ::NavGetFile(
+ &mDefaultLocation,
+ &mNavReply,
+ &mNavOptions,
+ sStandardNavEventFilter ,
+ mNavPreviewUPP,
+ mNavFilterUPP,
+ 0L /*inFileTypes.TypeListHandle() */,
+ 0L); // User Data
+ }
+
+ if ( mDefaultLocation.dataHandle != nil )
+ {
+ ::AEDisposeDesc(&mDefaultLocation);
+ }
+
+ if ( (err != noErr) && (err != userCanceledErr) ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+
+ if (mNavReply.validRecord) {
+
+ FSSpec outFileSpec ;
+ AEDesc specDesc ;
+
+ long count ;
+ ::AECountItems( &mNavReply.selection , &count ) ;
+ for ( long i = 1 ; i <= count ; ++i )
+ {
+ OSErr err = ::AEGetNthDesc( &mNavReply.selection , i , typeFSS, NULL , &specDesc);
+ if ( err != noErr ) {
+ m_path = "" ;
+ return wxID_CANCEL ;
+ }
+ outFileSpec = **(FSSpec**) specDesc.dataHandle;
+ if (specDesc.dataHandle != nil) {
+ ::AEDisposeDesc(&specDesc);
+ }
+
+
+ // outFolderDirID = thePB.dirInfo.ioDrDirID;
+ m_path = wxMacFSSpec2UnixFilename( &outFileSpec ) ;
+ m_paths.Add( m_path ) ;
+ m_fileNames.Add(m_fileName);
+ }
+ // set these to the first hit
+ m_path = m_paths[ 0 ] ;
+ m_fileName = wxFileNameFromPath(m_path);
+ m_dir = wxPathOnly(m_path);
+
+ return wxID_OK ;
+ }
+ return wxID_CANCEL;
+ }
+}
// Generic file load/save dialog
static wxString
#include "wx/defs.h"
#include "wx/string.h"
#include "wx/font.h"
+#include "wx/fontutil.h"
#include "wx/gdicmn.h"
#include "wx/fontutil.h"
wxTheFontList->Append(this);
}
+bool wxFont::Create(const wxNativeFontInfo& info)
+{
+ return Create(info.pointSize, info.family, info.style, info.weight,
+ info.underlined, info.faceName, info.encoding);
+}
+
wxFont::wxFont(const wxString& fontdesc)
{
wxNativeFontInfo info;
return TRUE;
}
-bool wxFont::Create(const wxNativeFontInfo& info)
-{
- return Create(info.pointSize, info.family, info.style, info.weight,
- info.underlined, info.faceName, info.encoding);
-}
-
wxFont::~wxFont()
{
if (wxTheFontList)
#endif
#include "wx/fontenum.h"
+#include "wx/fontutil.h"
#include "wx/fontmap.h"
#include "wx/fontutil.h"
{
wxStatusBar *statusBar = NULL;
- statusBar = new wxStatusBar(this, id, style, name);
-
+ statusBar = new wxStatusBar(this, id,
+ style, name);
+ statusBar->SetSize( 100 , 15 ) ;
statusBar->SetFieldsCount(number);
return statusBar;
}
// Since we wish the status bar to be directly under the client area,
// we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS.
- m_frameStatusBar->SetSize(0, h, w, WX_MAC_STATUSBAR_HEIGHT );
+ m_frameStatusBar->SetSize(0, h, w, sh);
}
}
{
int statusX, statusY;
GetStatusBar()->GetClientSize(&statusX, &statusY);
- // right now this is a constant, this might change someday
- *y -= WX_MAC_STATUSBAR_HEIGHT ;
+ *y -= statusY;
}
#endif // wxUSE_STATUSBAR
m_dataArray.Add( NULL );
}
m_noItems ++;
+ DoSetItemClientData( index , NULL ) ;
MacAppend( item ) ;
return index ;
if ( EqualString( s1 , s2 , false , false ) )
return i ;
}
+ if ( s.Left(1) = "*" && s.Length() > 1 )
+ {
+ s.MakeLower() ;
+ for ( int i = 0 ; i < m_noItems ; ++i )
+ {
+ if ( GetString(i).Lower().Matches(s) )
+ return i ;
+ }
+ }
+
}
else
{
}
}
}
- else
+#else
+ if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName )
+ {
+ wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
+ UMASetMenuTitle( menu->GetHMenu() , label ) ;
+
+ for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
+ {
+ item = (wxMenuItem *)node->Data();
+ subMenu = item->GetSubMenu() ;
+ if (subMenu)
+ {
+ UMAInsertMenu( subMenu->GetHMenu() , -1 ) ;
+ }
+ else
+ {
+ if ( item->GetId() == wxApp::s_macAboutMenuItemId )
+ {
+ Str255 label ;
+ UInt8 modifiers ;
+ SInt16 key ;
+ wxMenuItem::MacBuildMenuString( label, &key , &modifiers , item->GetText(), item->GetId() != wxApp::s_macAboutMenuItemId); // no shortcut in about menu
+ UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label );
+ UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 );
+ }
+ }
+ }
+ UMAInsertMenu(m_menus[i]->GetHMenu(), 0);
+ }
#endif
+ else
{
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
UMASetMenuTitle( menu->GetHMenu() , label ) ;
// ----------------------------------------------------------------------------
#if !USE_SHARED_LIBRARIES
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)
+
BEGIN_EVENT_TABLE(wxNotebook, wxControl)
EVT_NOTEBOOK_PAGE_CHANGED(-1, wxNotebook::OnSelChange)
// Create an abort window
wxBeginBusyCursor();
-/*
wxWindow *win = CreateAbortWindow(parent, printout);
wxYield();
sm_abortWindow = win;
sm_abortWindow->Show(TRUE);
wxYield();
-*/
printout->OnBeginPrinting();
}
else
{
+ GrafPtr thePort ;
+ GetPort( &thePort ) ;
+ wxYield() ;
+ SetPort( thePort ) ;
+
dc->StartPage();
keepGoing = printout->OnPrintPage(pn);
dc->EndPage();
wxString value ;
+ {
+ TEHandle teH ;
+ long size ;
+
+ UMAGetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ (*teH)->lineHeight = -1 ;
+ }
+
if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakeMacStringFromPC( st ) ;
else
else
value = st ;
UMASetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ;
- Refresh() ;
-// MacInvalidateControl() ;
+ UMADrawControl( m_macControl ) ;
}
// Clipboard operations
UMAGetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
TEFromScrap() ;
TEPaste( teH ) ;
-// MacInvalidateControl() ;
+ UMADrawControl( m_macControl ) ;
}
}
long response;
bool hasThreadManager ;
hasThreadManager = Gestalt( gestaltThreadMgrAttr, &response) == noErr && response & 1;
-#if TARGET_RT_MAC_CFM
+#if !TARGET_CARBON
+#if GENERATINGCFM
// verify presence of shared library
hasThreadManager = hasThreadManager && ((Ptr)NewThread != (Ptr)kUnresolvedCFragSymbolAddress);
+#endif
#endif
if ( !hasThreadManager )
{
#include <wx/mac/uma.h>
#include <wx/mac/aga.h>
+
+#include "Navigation.h"
+
// init
static bool sUMAHasAppearance = false ;
bool UMAHasWindowManager() { return sUMAHasWindowManager ; }
long UMAGetWindowManagerAttr() { return sUMAWindowManagerAttr ; }
-
+void UMACleanupToolbox()
+{
+#if UMA_USE_APPEARANCE
+ if ( sUMAHasAppearance )
+ {
+ UnregisterAppearanceClient() ;
+ }
+#endif
+ if ( NavServicesAvailable() )
+ {
+ NavUnload() ;
+ }
+}
void UMAInitToolbox( UInt16 inMoreMastersCalls )
{
#if !TARGET_CARBON
::InitGraf(&qd.thePort);
::InitFonts();
- ::InitWindows();
::InitMenus();
::TEInit();
::InitDialogs(0L);
}
#endif // UMA_USE_WINDOWMGR
#endif
+
+ if ( sUMAHasWindowManager )
+ InitFloatingWindows() ;
+ else
+ InitWindows();
+
+ if ( NavServicesAvailable() )
+ {
+ NavLoad() ;
+ }
}
// process manager
int gPrOpenCounter = 0 ;
-void UMAPrOpen()
+OSStatus UMAPrOpen()
{
#if !TARGET_CARBON
OSErr err = noErr ;
err = PrError() ;
wxASSERT( err == noErr ) ;
}
+ return err ;
#else
- #pragma warning "TODO Printing for Carbon"
+ OSStatus err = noErr ;
+ ++gPrOpenCounter ;
+ if ( gPrOpenCounter == 1 )
+ {
+ err = PMBegin() ;
+ wxASSERT( err == noErr ) ;
+ }
+ return err ;
#endif
}
-void UMAPrClose()
+OSStatus UMAPrClose()
{
#if !TARGET_CARBON
OSErr err = noErr ;
wxASSERT( err == noErr ) ;
}
--gPrOpenCounter ;
+ return err ;
#else
- #pragma warning "TODO Printing for Carbon"
+ OSStatus err = noErr ;
+ wxASSERT( gPrOpenCounter >= 1 ) ;
+ if ( gPrOpenCounter == 1 )
+ {
+ err = PMEnd() ;
+ }
+ --gPrOpenCounter ;
+ return err ;
#endif
}
return FALSE;
}
+const wxChar* wxGetHomeDir(wxString *pstr)
+{
+ *pstr = wxMacFindFolder( (short) kOnSystemDisk, kPreferencesFolderType, kDontCreateFolder ) ;
+ return pstr->c_str() ;
+}
+
+
+
// Get user name e.g. AUTHOR
bool wxGetUserName(char *buf, int maxSize)
{
#include "wx/mac/wave.h"
wxWave::wxWave()
- : m_waveData(NULL), m_waveLength(0), m_isResource(FALSE)
+ : m_hSnd(NULL), m_waveLength(0), m_isResource(true), m_sndChan(0)
{
}
wxWave::wxWave(const wxString& sFileName, bool isResource)
- : m_waveData(NULL), m_waveLength(0), m_isResource(FALSE)
+ : m_hSnd(NULL), m_waveLength(0), m_isResource(true), m_sndChan(0)
{
Create(sFileName, isResource);
}
Free();
}
+
bool wxWave::Create(const wxString& fileName, bool isResource)
{
- Free();
+ bool ret = false;
+ m_sndname = fileName;
+ m_isResource = isResource;
+
+ if (m_isResource)
+ ret = true;
+ else
+ { /*
+ if (sndChan)
+ { // we're playing
+ FSClose(SndRefNum);
+ SndRefNum = 0;
+ SndDisposeChannel(sndChan, TRUE);
+ free(sndChan);
+ sndChan = 0;
+ KillTimer(0,timerID);
+ }
+
+ if (!lpSnd)
+ return true;
+
+ if (_access(lpSnd,0)) // no file, no service
+ return false;
+
+ // Allocate SndChannel
+ sndChan = (SndChannelPtr) malloc (sizeof(SndChannel));
+
+ if (!sndChan)
+ return false;
+
+ sndChan->qLength = 128;
+
+ if (noErr != SndNewChannel (&sndChan, sampledSynth, initMono | initNoInterp, 0))
+ {
+ free(sndChan);
+ sndChan = 0;
+ return false;
+ }
- // TODO
+ if (!(SndRefNum = MacOpenSndFile ((char *)lpSnd)))
+ {
+ SndDisposeChannel(sndChan, TRUE);
+ free(sndChan);
+ sndChan = 0;
- return FALSE;
+ return false;
+ }
+
+ bool async = false;
+
+ if (fdwSound & SND_ASYNC)
+ async = true;
+
+ if (SndStartFilePlay(sndChan, SndRefNum, 0, 81920, 0, 0, 0, async) != noErr)
+ {
+ FSClose (SndRefNum);
+ SndRefNum = 0;
+ SndDisposeChannel (sndChan, TRUE);
+ free (sndChan);
+ sndChan = 0;
+ return false;
+ }
+
+ if (async)
+ { // haven't finish yet
+ timerID = SetTimer(0, 0, 250, TimerCallBack);
+ }
+ else
+ {
+ FSClose (SndRefNum);
+ SndRefNum = 0;
+ SndDisposeChannel (sndChan, TRUE);
+ free (sndChan);
+ sndChan = 0;
+ }*/
+ }
+
+ return ret;
}
+
+//don't know what to do with looped, wth
bool wxWave::Play(bool async, bool looped) const
{
- if (!IsOk())
- return FALSE;
+ char lpSnd[32];
+ bool ret = false;
+
+ if (m_isResource)
+ {
+ strcpy(lpSnd, m_sndname);
+ c2pstr((char *) lpSnd);
+ SndListHandle hSnd;
+
+ hSnd = (SndListHandle) GetNamedResource('snd ',(const unsigned char *) lpSnd);
- // TODO
- return FALSE;
+ if ((hSnd != NULL) && (SndPlay(m_sndChan, hSnd, async) == noErr))
+ ret = true;
+ }
+
+ return ret;
}
+
bool wxWave::Free()
{
- // TODO
- return FALSE;
+ bool ret = false;
+
+ if (m_isResource)
+ {
+ m_sndname.Empty();
+ ret = true;
+ }
+ else
+ {
+ //TODO,
+ }
+
+ return ret;
}
+//code below is from an old implementation used for telinfo with MSVC crossplatform support
+//technology proceeds, so it would be the wisest to drop this code, but it's left here just
+//for the sake of a reference. BTW: Wave files can now be played with QT, starting from V3
+
+/*static short MacOpenSndFile (char * path)
+{
+ VolumeParam vp;
+ FSSpec fspec;
+ Str255 name;
+ char *c;
+
+ // first, get the volume reference number for the file. Start by
+ // making a Pstring with just the volume name
+ strcpy ((char *) name, path);
+ if (c = strchr ((char *) name, ':'))
+ {
+ c++;
+ *c = '\0';
+ }
+
+ c2pstr ((char *) name);
+ vp.ioCompletion = 0;
+ vp.ioVolIndex = -1;
+ vp.ioNamePtr = name;
+ vp.ioVRefNum = 0;
+
+ if (PBGetVInfo((ParamBlockRec *)&vp, 0) != noErr)
+ return 0;
+
+ // next, buld an FSSpec for the file
+ strcpy ((char *) name, path);
+ c2pstr ((char *) name);
+ if (FSMakeFSSpec (vp.ioVRefNum, 0, name, &fspec) != noErr)
+ return 0;
+
+ short frefnum;
+ // now open the file, and return it's reference number
+ if (FSpOpenDF(&fspec, fsRdPerm, &frefnum) != noErr)
+ return 0;
+
+ return frefnum;
+}
+
+
+void TimerCallBack(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
+{
+ if(!sndChan)
+ {
+ KillTimer(0,timerID);
+ return;
+ }
+
+ SCStatus scstat;
+
+ if (noErr == SndChannelStatus (sndChan, sizeof (SCStatus), &scstat)) {
+ if (scstat.scChannelPaused || scstat.scChannelBusy)
+ return; // not done yet
+ }
+
+ // either error or done.
+ FSClose (SndRefNum);
+ SndRefNum = 0;
+ SndDisposeChannel (sndChan, TRUE);
+ free (sndChan);
+ sndChan = 0;
+ KillTimer(0,timerID);
+}*/
+
+
*x = m_width ;
*y = m_height ;
- *x -= 2 * MacGetBorderSize( ) ;
- *y -= 2 * MacGetBorderSize( ) ;
+ *x -= MacGetLeftBorderSize( ) + MacGetRightBorderSize( ) ;
+ *y -= MacGetTopBorderSize( ) + MacGetBottomBorderSize( );
if ( (m_vScrollBar && m_vScrollBar->IsShown()) || (m_hScrollBar && m_hScrollBar->IsShown()) )
{
wxPoint wxWindow::GetClientAreaOrigin() const
{
- return wxPoint(MacGetBorderSize( ) , MacGetBorderSize( ) );
+ return wxPoint(MacGetLeftBorderSize( ) , MacGetTopBorderSize( ) );
}
// Makes an adjustment to the window position (for example, a frame that has
if ( !fontToUse )
fontToUse = &m_font;
- wxClientDC dc( this ) ;
+ wxClientDC dc( (wxWindow*) this ) ;
long lx,ly,ld,le ;
dc.GetTextExtent( string , &lx , &ly , &ld, &le, fontToUse ) ;
if ( externalLeading )
if ( height != -1 && m_vScrollBar )
height += MAC_SCROLLBAR_SIZE ;
- width += 2 * MacGetBorderSize( ) ;
- height += 2 * MacGetBorderSize( ) ;
+ width += MacGetLeftBorderSize( ) + MacGetRightBorderSize( ) ;
+ height += MacGetTopBorderSize( ) + MacGetBottomBorderSize( ) ;
DoSetSize( -1 , -1 , width , height ) ;
}
for (wxNode *node = GetChildren().First(); node; node = node->Next())
{
wxWindow *child = (wxWindow*)node->Data();
- if ( child->GetMacRootWindow() == window )
+ // added the m_isShown test --dmazzoni
+ if ( child->GetMacRootWindow() == window && child->m_isShown )
{
if (child->MacGetWindowFromPointSub(newPoint , outWin ))
return TRUE;
{
wxPoint point( screenpoint ) ;
wxWindow* win = wxFindWinFromMacWindow( window ) ;
+ if ( win )
+ {
win->ScreenToClient( point ) ;
return win->MacGetWindowFromPointSub( point , outWin ) ;
}
+ }
return FALSE ;
}
int width = m_width ;
int height = m_height ;
- width -= 2 * MacGetBorderSize() ;
- height -= 2 * MacGetBorderSize() ;
+ width -= MacGetLeftBorderSize() + MacGetRightBorderSize();
+ height -= MacGetTopBorderSize() + MacGetBottomBorderSize();
wxPoint vPoint(width-MAC_SCROLLBAR_SIZE, 0) ;
wxSize vSize(MAC_SCROLLBAR_SIZE, height - adjust) ;
SectRect(clipRect, &myClip, clipRect);
}
-long wxWindow::MacGetBorderSize( ) const
+long wxWindow::MacGetLeftBorderSize( ) const
{
if( m_macWindowData )
return 0 ;
return 0 ;
}
+long wxWindow::MacGetRightBorderSize( ) const
+{
+ if( m_macWindowData )
+ return 0 ;
+
+ if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+ {
+ return 3 ;
+ }
+ else if ( m_windowStyle &wxDOUBLE_BORDER)
+ {
+ return 3 ;
+ }
+ else if (m_windowStyle &wxSIMPLE_BORDER)
+ {
+ return 3 ;
+ }
+ return 0 ;
+}
+
+long wxWindow::MacGetTopBorderSize( ) const
+{
+ if( m_macWindowData )
+ return 0 ;
+
+ if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+ {
+ return 2 ;
+ }
+ else if ( m_windowStyle &wxDOUBLE_BORDER)
+ {
+ return 2 ;
+ }
+ else if (m_windowStyle &wxSIMPLE_BORDER)
+ {
+ return 1 ;
+ }
+ return 0 ;
+}
+
+long wxWindow::MacGetBottomBorderSize( ) const
+{
+ if( m_macWindowData )
+ return 0 ;
+
+ if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+ {
+ return 3 ;
+ }
+ else if ( m_windowStyle &wxDOUBLE_BORDER)
+ {
+ return 3 ;
+ }
+ else if (m_windowStyle &wxSIMPLE_BORDER)
+ {
+ return 3 ;
+ }
+ return 0 ;
+}
+
long wxWindow::MacRemoveBordersFromStyle( long style )
{
return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ;
if (!l)
return (XpmFileInvalid);
buf[l] = '\0';
- #if defined(macintosh) ||Êdefined(__APPLE__)
+ #if defined(macintosh) || defined(__APPLE__)
ptr = strrchr(buf, '_');
#else
ptr = rindex(buf, '_');