]> git.saurik.com Git - wxWidgets.git/commitdiff
updated mac sources (CW 5.3 working , CW6 still having code gen problems)
authorStefan Csomor <csomor@advancedconcepts.ch>
Thu, 8 Feb 2001 21:13:12 +0000 (21:13 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Thu, 8 Feb 2001 21:13:12 +0000 (21:13 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9334 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

67 files changed:
include/wx/app.h
include/wx/cmndata.h
include/wx/datetime.h
include/wx/datetime.inl
include/wx/filefn.h
include/wx/geometry.h
include/wx/mac/app.h
include/wx/mac/choice.h
include/wx/mac/dcprint.h
include/wx/mac/filedlg.h
include/wx/mac/statusbr.h
include/wx/mac/uma.h
include/wx/mac/wave.h
include/wx/mac/window.h
include/wx/utils.h
include/wx/wave.h
samples/minimal/makemac.mcp
src/common/cmndata.cpp
src/common/cwlex_yy.c
src/common/cwy_tab.c
src/common/file.cpp
src/common/fileconf.cpp
src/common/filefn.cpp
src/mac/aga.cpp
src/mac/app.cpp
src/mac/carbon/aga.cpp
src/mac/carbon/app.cpp
src/mac/carbon/choice.cpp
src/mac/carbon/corersrc.r
src/mac/carbon/dc.cpp
src/mac/carbon/dcprint.cpp
src/mac/carbon/dirdlg.cpp
src/mac/carbon/filedlg.cpp
src/mac/carbon/font.cpp
src/mac/carbon/fontenum.cpp
src/mac/carbon/frame.cpp
src/mac/carbon/listbox.cpp
src/mac/carbon/menu.cpp
src/mac/carbon/notebmac.cpp
src/mac/carbon/printmac.cpp
src/mac/carbon/textctrl.cpp
src/mac/carbon/thread.cpp
src/mac/carbon/uma.cpp
src/mac/carbon/utils.cpp
src/mac/carbon/wave.cpp
src/mac/carbon/window.cpp
src/mac/choice.cpp
src/mac/corersrc.r
src/mac/dc.cpp
src/mac/dcprint.cpp
src/mac/dirdlg.cpp
src/mac/filedlg.cpp
src/mac/font.cpp
src/mac/fontenum.cpp
src/mac/frame.cpp
src/mac/listbox.cpp
src/mac/menu.cpp
src/mac/notebmac.cpp
src/mac/printmac.cpp
src/mac/textctrl.cpp
src/mac/thread.cpp
src/mac/uma.cpp
src/mac/utils.cpp
src/mac/wave.cpp
src/mac/window.cpp
src/mac/xpm/data.c
src/makemac.mcp

index 5538e053bddc695ff0e2c4959e1c938d4668442b..0ff464639c4b54f9ac34e484e39dbfe24b70128b 100644 (file)
@@ -370,7 +370,7 @@ public:
 // 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); }
index 028c27fe4f1d8c481cab74a703365da53fd927d6..49afce94151f16f9dc2020d13d40c6f4aded02ab 100644 (file)
 #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
@@ -187,8 +191,13 @@ public:
     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:
 
@@ -284,8 +293,6 @@ class WXDLLEXPORT wxPrintDialogData: public wxObject
 
 #ifdef __WXMSW__
     void*           m_printDlgData;
-#elif defined( __WXMAC__  )
-       THPrint                 m_macPrintInfo ;
 #endif
 
 private:
@@ -388,8 +395,6 @@ public:
 
 #if defined(__WIN95__)
     void*           m_pageSetupData;
-#elif defined( __WXMAC__  )
-       THPrint         m_macPageSetupInfo ;
 #endif
 
 private:
index 69872ce28a1f1b34b5c1c3d26735829d086466c1..a9842fd982b4d5dc87efed1a6ca3f06bea2ff35d 100644 (file)
@@ -36,6 +36,19 @@ class WXDLLEXPORT wxDateSpan;
     #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
  *
index 302d65c1957a7c57e17405f99a690b8f2abaab94..3089b32111297999d0e26057bb59a5aae267aa46 100644 (file)
@@ -66,7 +66,7 @@ inline wxDateTime wxDateTime::Today()
 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;
@@ -146,10 +146,10 @@ inline time_t wxDateTime::GetTicks() const
         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)
 {
index e7a4d4f2ae0b2bb4cb30e273e752faff035ea00d..2502dc1a06cd1af81e920d243140f098d8f687e9 100644 (file)
@@ -25,7 +25,8 @@
 // ----------------------------------------------------------------------------
 
 // define off_t
-#ifndef __WXMAC__
+
+#if !defined(__WXMAC__) || defined(__DARWIN__)
     #include  <sys/types.h>
 #else
     typedef long off_t;
@@ -264,7 +265,12 @@ WXDLLEXPORT bool wxRmdir(const wxString& dir, int flags = 0);
   #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
index 47c083420a98c4f80894f82dbd353fad9ff6a184..2a8a8fb396898a078ddeb0b5e24c052e7d492eb8 100644 (file)
 
 #include "wx/defs.h"
 
+#ifndef wxUSE_GEOMETRY
+    #define wxUSE_GEOMETRY 0
+#endif
+
 #if wxUSE_GEOMETRY
 
 #include "wx/utils.h"
index 145c0232749ccd7b84388b281c56d186e9f8f572..e28f626e38048cc82029fdf600362ea0d7778d89 100644 (file)
@@ -147,10 +147,10 @@ public :
   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()
 };
index 7e8d94d2a9ed22cc68ed4c4a8c238350aa1b1946..f641fad4195b0c8f44a8265a5629a91d814521df 100644 (file)
@@ -26,9 +26,10 @@ class WXDLLEXPORT wxChoice: public wxControl
   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,
index 07f876fc85d8321c05aec4bc7a45c55b79499d92..e2e11819a37fde60218af3a8b53973c809a7fee0 100644 (file)
@@ -33,7 +33,11 @@ class WXDLLEXPORT wxPrinterDC: public wxDC
     virtual void StartPage(void) ;
     virtual void EndPage(void) ;
  protected :
+ #if TARGET_CARBON
+       PMPrintContext  m_macPrintPort ;
+ #else
        TPPrPort        m_macPrintPort ;
+ #endif
        wxPrintData m_printData ;
 };
 
index 911f7ffe85fec6895eae3f56069dbcf8d5b86554..1ce921758e15b27dc600dfb00281f64f745f1a26 100644 (file)
@@ -35,6 +35,8 @@ protected:
     wxString    m_dir;
     wxString    m_path; // Full path
     wxString    m_fileName;
+    wxArrayString m_fileNames;
+    wxArrayString m_paths;
     wxString    m_wildCard;
     int         m_filterIndex;
 public:
@@ -54,6 +56,8 @@ 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 ; }
index c45b2763060d664c1276fb1f10e81ad75aeb8d30..622cbab4529483eec86177166604bb78fd132747 100644 (file)
@@ -23,8 +23,8 @@ class WXDLLEXPORT wxStatusBarMac : public wxStatusBarGeneric
 {
   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)
   {
@@ -34,7 +34,7 @@ class WXDLLEXPORT wxStatusBarMac : public wxStatusBarGeneric
   ~wxStatusBarMac();
 
   bool Create(wxWindow *parent, wxWindowID id,
-              long style,
+              long style ,
               const wxString& name = wxPanelNameStr) ;
 
   virtual void DrawFieldText(wxDC& dc, int i);
index 927be963cd1ba5bed429b84970efb72caa410036..85ad8863b126c7b0ea63d08d8b59f7e15a5b5877 100644 (file)
 
 #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
@@ -35,6 +40,7 @@
 #endif
 
 void UMAInitToolbox( UInt16 inMoreMastersCalls) ;
+void UMACleanupToolbox() ;
 bool UMAHasAppearance() ;
 long UMAGetAppearanceVersion() ;
 
@@ -69,8 +75,8 @@ void                  UMADrawMenuBar() ;
 void                   UMAShowWatchCursor() ;
 void                   UMAShowArrowCursor() ;
 
-void                   UMAPrOpen() ;
-void                   UMAPrClose() ;
+OSStatus               UMAPrOpen() ;
+OSStatus               UMAPrClose() ;
 
 // window manager
 
index e55bd5aa5f4a220c725c37df5ca76fd28a309e12..e4934dedf802d0b4a91d755de568ce947f20a926 100644 (file)
@@ -28,14 +28,17 @@ public:
 
 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;
 };
index 98bccb03249808cb3797536d50186a297229be1d..3692c3cfb83e86fbd3e8a65b702f0c5a51ebcbfd 100644 (file)
@@ -246,7 +246,12 @@ public :
        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 ) ;
index 09094b4877881b4f2edb8108e1bc72366b3fcf06..81941fe6f0613ec63e0957f5ad45eb285fdecb21 100644 (file)
@@ -255,6 +255,12 @@ WXDLLEXPORT const wxMB2WXbuf wxGetUserHome(const wxString& user = wxEmptyString)
 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
 
 // ----------------------------------------------------------------------------
index f0756b1cdc914bdd2eab1b4c948e8b195b64f342..c5b7d0ef302c3cddacbf1a4a3f021f2f375f206f 100644 (file)
@@ -9,6 +9,8 @@
 #include "wx/qt/wave.h"
 #elif defined(__WXPM__)
 #include "wx/os2/wave.h"
+#elif defined(__WXMAC__)
+#include "wx/mac/wave.h"
 #endif
 
 #endif
index 988af88ba81cfb6d515df994d492994e7df8f786..eb0caeb8a592c2747bd2f84b5bfacce5572f3b35 100644 (file)
Binary files a/samples/minimal/makemac.mcp and b/samples/minimal/makemac.mcp differ
index 90ec1c14a4f218976c36f5920f846facc1a7eea5..f8195c8a2320403edc1bfbaa269a5434367ffa3e 100644 (file)
@@ -172,6 +172,10 @@ wxPrintData::wxPrintData()
     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 
 
@@ -184,14 +188,7 @@ wxPrintData::wxPrintData()
        (**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;
@@ -224,16 +221,12 @@ wxPrintData::wxPrintData(const wxPrintData& printData)
     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;
 }
@@ -248,8 +241,22 @@ wxPrintData::~wxPrintData()
     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
 }
 
@@ -432,6 +439,7 @@ void wxPrintData::ConvertToNative()
 
         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;
@@ -609,6 +617,7 @@ void wxPrintData::ConvertFromNative()
         }
         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;
@@ -709,20 +718,29 @@ void wxPrintData::ConvertFromNative()
 #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;
@@ -1019,16 +1037,22 @@ void wxPrintDialogData::SetOwnerWindow(wxWindow* win)
 #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
 
@@ -1228,7 +1252,7 @@ void wxPageSetupDialogData::ConvertToNative()
     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;
 
@@ -1305,6 +1329,7 @@ void wxPageSetupDialogData::ConvertFromNative()
     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;
 
@@ -1337,6 +1362,8 @@ void wxPageSetupDialogData::ConvertToNative()
 {
        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 ) ;
 
@@ -1347,12 +1374,15 @@ void wxPageSetupDialogData::ConvertToNative()
        (**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 ;
                        
@@ -1361,7 +1391,7 @@ void wxPageSetupDialogData::ConvertFromNative()
 
        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
 
index 96e91c1ca90d2898d91dffbe635039e94f2af365..3f675628968ed3478ec0469b4f1302a3fd50635a 100644 (file)
@@ -69,7 +69,7 @@ char *malloc();
 int free();
 */
 
-int read();
+//int read();
 #endif
 
 
index 1ad5970dd71b1b362e82d6c7568312fb7ffe73b1..bfbe337922aeb68f7671ec70bfa2578f11756c34 100644 (file)
@@ -22,10 +22,19 @@ int yylex(void);
 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!
index cd4f7c7a010f1fe7179a10798e6051373447f9e1..5fac43328c200d5261c141e000a77c5bad324954 100644 (file)
     // 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
@@ -189,7 +193,9 @@ bool wxFile::Create(const wxChar *szFileName, bool bOverwrite, int accessMode)
     // 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 |
@@ -293,7 +299,11 @@ size_t wxFile::Write(const void *pBuf, size_t nCount)
     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
index 0d5b0a4ae3132ede1a8a2547516dff0f1b1db0f6..bf8103304c2fb59aa2ac2483d5c1fc2808dba1d9 100644 (file)
@@ -199,19 +199,7 @@ wxString wxFileConfig::GetGlobalDir()
   #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);
index 721448750dbce5dc51178799de807bbc3edada02..6d2afb1a79614a39efede738b76ec2f59813e28d 100644 (file)
@@ -57,6 +57,7 @@
 #else
     #include <stat.h>
     #include <unistd.h>
+    #include <unix.h>
 #endif
 
 #ifdef __UNIX__
@@ -1682,16 +1683,40 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
 #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
index d356a5ac1d93380f407fe47664a746939a78bc69..58084028329c8d0ab1b4be354d3f8726e0c10425 100644 (file)
@@ -2615,6 +2615,7 @@ AGAPortHelper::~AGAPortHelper()
                TextSize( size );
                TextFace( style );
                TextMode( mode );
+               SetOrigin( 0 , 0 ) ;
                SetPort( port ) ;
        }
 }
index a11ff6db93eae87862f233e9e8d1d6f236e8cd3c..d904e133cb88b3c3fe2b58c5dcbacfab38b62f8f 100644 (file)
@@ -89,28 +89,28 @@ wxString wxApp::s_macHelpMenuTitleName = "&Help" ;
 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 ;
@@ -119,17 +119,17 @@ OSErr wxApp::MacHandleAEODoc(AppleEvent *event , AppleEvent *reply)
        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 )
@@ -510,6 +510,7 @@ void wxApp::CleanUp()
     delete wxLog::SetActiveTarget(NULL);
 #endif // wxUSE_LOG
 
+       UMACleanupToolbox() ;
        if (s_macCursorRgn)
                ::DisposeRgn(s_macCursorRgn);
 
@@ -1044,14 +1045,16 @@ void wxApp::MacHandleMouseDownEvent( EventRecord *ev )
                                        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;
@@ -1253,7 +1256,10 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev )
        
        UInt32 menuresult = UMAMenuEvent(ev) ;
        if ( HiWord( menuresult ) )
+       {
+               if ( !s_macIsInModalLoop )
                MacHandleMenuSelect( HiWord( menuresult ) , LoWord( menuresult ) ) ;
+       }
        else
        {
                short keycode ;
@@ -1373,6 +1379,14 @@ void wxApp::MacHandleUpdateEvent( EventRecord *ev )
        {
                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 )
@@ -1490,9 +1504,12 @@ void wxApp::MacHandleOSEvent( EventRecord *ev )
 
                                switch (windowPart)
                                {
+                                       // fixes for setting the cursor back from dominic mazzoni
                                        case inMenuBar :
+                                           UMAShowArrowCursor();
                                                break ;
                                        case inSysWindow :
+                                           UMAShowArrowCursor();
                                                break ;
                                        default:
                                                {
@@ -1502,6 +1519,9 @@ void wxApp::MacHandleOSEvent( EventRecord *ev )
                                                        wxWindow* win = wxFindWinFromMacWindow( window ) ;
                                                        if ( win )
                                                                win->MacMouseMoved( ev , windowPart ) ;
+                                                       else                                       
+                                                       UMAShowArrowCursor();
+
                                                }
                                                break;
                                }
index d356a5ac1d93380f407fe47664a746939a78bc69..58084028329c8d0ab1b4be354d3f8726e0c10425 100644 (file)
@@ -2615,6 +2615,7 @@ AGAPortHelper::~AGAPortHelper()
                TextSize( size );
                TextFace( style );
                TextMode( mode );
+               SetOrigin( 0 , 0 ) ;
                SetPort( port ) ;
        }
 }
index a11ff6db93eae87862f233e9e8d1d6f236e8cd3c..d904e133cb88b3c3fe2b58c5dcbacfab38b62f8f 100644 (file)
@@ -89,28 +89,28 @@ wxString wxApp::s_macHelpMenuTitleName = "&Help" ;
 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 ;
@@ -119,17 +119,17 @@ OSErr wxApp::MacHandleAEODoc(AppleEvent *event , AppleEvent *reply)
        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 )
@@ -510,6 +510,7 @@ void wxApp::CleanUp()
     delete wxLog::SetActiveTarget(NULL);
 #endif // wxUSE_LOG
 
+       UMACleanupToolbox() ;
        if (s_macCursorRgn)
                ::DisposeRgn(s_macCursorRgn);
 
@@ -1044,14 +1045,16 @@ void wxApp::MacHandleMouseDownEvent( EventRecord *ev )
                                        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;
@@ -1253,7 +1256,10 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev )
        
        UInt32 menuresult = UMAMenuEvent(ev) ;
        if ( HiWord( menuresult ) )
+       {
+               if ( !s_macIsInModalLoop )
                MacHandleMenuSelect( HiWord( menuresult ) , LoWord( menuresult ) ) ;
+       }
        else
        {
                short keycode ;
@@ -1373,6 +1379,14 @@ void wxApp::MacHandleUpdateEvent( EventRecord *ev )
        {
                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 )
@@ -1490,9 +1504,12 @@ void wxApp::MacHandleOSEvent( EventRecord *ev )
 
                                switch (windowPart)
                                {
+                                       // fixes for setting the cursor back from dominic mazzoni
                                        case inMenuBar :
+                                           UMAShowArrowCursor();
                                                break ;
                                        case inSysWindow :
+                                           UMAShowArrowCursor();
                                                break ;
                                        default:
                                                {
@@ -1502,6 +1519,9 @@ void wxApp::MacHandleOSEvent( EventRecord *ev )
                                                        wxWindow* win = wxFindWinFromMacWindow( window ) ;
                                                        if ( win )
                                                                win->MacMouseMoved( ev , windowPart ) ;
+                                                       else                                       
+                                                       UMAShowArrowCursor();
+
                                                }
                                                break;
                                }
index 1c36eef12d4d13502c256e7bcfbac7672778fe66..2b1cf2daaef2948c9d6f649334eae8358b6824b3 100644 (file)
 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,
@@ -35,6 +43,7 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id,
        
                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 ) ; 
        
index 528e79481115b5ef3117c596dee59a98b81d4ff8..4f879a59db46a2ac19c934312491b09756028912 100644 (file)
@@ -394,11 +394,11 @@ resource 'ldes' ( 128 )
 } ;
 
 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") {
index 1682209492529b1cfe5abd1cacf95ab92cad9d54..fe13b3f6b292f75774a1270235775eaeee484a10 100644 (file)
 #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
@@ -128,7 +132,7 @@ wxDC::~wxDC(void)
 
 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);
@@ -427,7 +431,12 @@ void wxDC::ComputeScaleAndOrigin(void)
   // 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);
   }
 };
 
index 257c74206b6a7707bae2d3479b742e1376374e50..b21fe548a253e89261e9b5cfc1e9a78234828152 100644 (file)
@@ -36,15 +36,13 @@ GrafPtr macPrintFormerPort = NULL ;
 
 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 ) ;
@@ -52,6 +50,7 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
                UMAPrClose() ;
        }
        
+#if !TARGET_CARBON
        if ( ::PrValidate( m_printData.m_macPrintInfo ) )
        {
                ::PrStlDialog( m_printData.m_macPrintInfo ) ;
@@ -75,23 +74,37 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
        }
        // 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() ;
                
@@ -115,7 +128,17 @@ wxPrinterDC::~wxPrinterDC(void)
                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
 }
 
@@ -130,7 +153,6 @@ void wxPrinterDC::EndDoc(void)
 
 void wxPrinterDC::StartPage(void) 
 {
-#if !TARGET_CARBON
        if ( !m_ok )
                return ;
 
@@ -150,11 +172,15 @@ void wxPrinterDC::StartPage(void)
        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() ;
@@ -169,19 +195,29 @@ void wxPrinterDC::StartPage(void)
                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 )
@@ -194,7 +230,16 @@ void wxPrinterDC::EndPage(void)
                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
 
 }
index 02bbef6a204bad2100a085c8786858f9820e07b6..51f4df142e2ada43fdb84b493e2a6fec284c9284 100644 (file)
 
 #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;
@@ -38,8 +44,6 @@ struct UserDataRec {
 typedef struct UserDataRec
        UserDataRec, *UserDataRecPtr;
 
-#if !TARGET_CARBON
-
 enum {
        kSelectItem = 10,                       // select button item number
        kSFGetFolderDlgID = 250,        // dialog resource number
@@ -307,7 +311,6 @@ static pascal short SFGetFolderDialogHook(short item, DialogPtr theDlgPtr, Ptr d
        
        return item;
 }
-#endif
 
 void StandardGetFolder( ConstStr255Param message , ConstStr255Param path , FileFilterYDUPP fileFilter, StandardFileReply *theSFR)
 {
@@ -433,6 +436,9 @@ static pascal Boolean OnlyVisibleFoldersCustomFileFilter(CInfoPBPtr myCInfoPBPtr
        return !(visibleFlag && folderFlag);
 }
 
+#endif
+
+
 wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
         const wxString& defaultPath,
         long style, const wxPoint& pos)
@@ -445,6 +451,8 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
 
 int wxDirDialog::ShowModal()
 {
+       #if !TARGET_CARBON
+       if ( !gUseNavServices )
        {
                Str255                          prompt ;
                Str255                          path ;
@@ -457,16 +465,15 @@ int wxDirDialog::ShowModal()
 
                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 = "" ;
@@ -477,7 +484,105 @@ int wxDirDialog::ShowModal()
                        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;
 }
 
index 7837183e2aef2d18e0fea4344eec463399db25de..dc4f90e22c9a74e4521915e2cc42bf80ce8f4d52 100644 (file)
 #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" ,
@@ -189,7 +226,7 @@ static pascal Boolean SFGetFolderModalDialogFilter(DialogPtr theDlgPtr, EventRec
                
        return false;
 }
-#endif
+#endif !TARGET_CARBON
 
 void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const char *filter , FileFilterYDUPP fileFilter, StandardFileReply *theSFR)
 {
@@ -451,6 +488,9 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
 
 int wxFileDialog::ShowModal()
 {
+       #if !TARGET_CARBON
+       if ( !gUseNavServices )
+       {
        if ( m_dialogStyle & wxSAVE )
        {
                StandardFileReply       reply ;
@@ -488,7 +528,7 @@ int wxFileDialog::ShowModal()
                strcpy((char *)prompt, m_message) ;
                c2pstr((char *)prompt ) ;
        
-               strcpy((char *)path, m_path ) ;
+                       strcpy((char *)path, m_dir ) ;
                c2pstr((char *)path ) ;
 
                StandardFileReply       reply ;
@@ -515,6 +555,137 @@ int wxFileDialog::ShowModal()
        }
     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
index ecffc9fd941d59244dc5d710d92340b785981080..79d93657fbd3ed0f76f3c06d3e209219ccab2817 100644 (file)
@@ -16,6 +16,7 @@
 #include "wx/defs.h"
 #include "wx/string.h"
 #include "wx/font.h"
+#include "wx/fontutil.h"
 #include "wx/gdicmn.h"
 
 #include "wx/fontutil.h"
@@ -119,6 +120,12 @@ void wxFont::Init()
         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;
@@ -143,12 +150,6 @@ bool wxFont::Create(int pointSize,
     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)
index 99cd68441ad9de7641580d276309485476ad105b..f06fd5baaa524ece3e605cfe10e7e24d3d36183f 100644 (file)
@@ -33,6 +33,7 @@
 #endif
 
 #include "wx/fontenum.h"
+#include "wx/fontutil.h"
 #include "wx/fontmap.h"
 #include "wx/fontutil.h"
 
index b5498fec48450d102bf501997a0d0485eb4d28e5..2a4ee0b9689f259274e136a115da0e1f11206e7a 100644 (file)
@@ -199,8 +199,9 @@ wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id,
 {
     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;
 }
@@ -216,7 +217,7 @@ void wxFrame::PositionStatusBar()
 
     // 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);
    }
 }
 
@@ -296,8 +297,7 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
   {
     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
 
index 17efb46fabf84aa26f483b5b0ad704777b4029c5..03ae6e0572daa7c1bef190320aacc956b761c0a3 100644 (file)
@@ -180,6 +180,7 @@ int wxListBox::DoAppend(const wxString& item)
                m_dataArray.Add( NULL );
        }
        m_noItems ++;
+       DoSetItemClientData( index , NULL ) ;
        MacAppend( item ) ;
 
        return index ;
@@ -255,6 +256,16 @@ int wxListBox::FindString(const wxString& st) const
                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
        {
index 9a66f806d2a33aa0cdb10eba2d5f9afe160aea1c..099f196f34eb0110bc9ae1f93128302cdd02dfc4 100644 (file)
@@ -700,8 +700,37 @@ void wxMenuBar::MacInstallMenuBar()
                                        }
                                }
                        }
-                       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 ) ;
index ab97b53540b24c151b69b20fc22d884988edb2c2..d2e96608969023106b8cab54c536640c3fb8c224 100644 (file)
@@ -42,6 +42,9 @@ const short kwxMacTabBottomMargin = 16 ;
 // ----------------------------------------------------------------------------
 
 #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)
 
index 08a6bf77adc5cff8fed862dd499249361a3e0c25..50c666ce95ea10502c74889e8f89dd60c1061a55 100644 (file)
@@ -136,7 +136,6 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
   // Create an abort window
   wxBeginBusyCursor();
 
-/*
   wxWindow *win = CreateAbortWindow(parent, printout);
   wxYield();
 
@@ -149,7 +148,6 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
   sm_abortWindow = win;
   sm_abortWindow->Show(TRUE);
   wxYield();
-*/
 
   printout->OnBeginPrinting();
   
@@ -178,6 +176,11 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
       }
       else
       {
+               GrafPtr thePort ;
+               GetPort( &thePort ) ;
+               wxYield() ;
+               SetPort( thePort ) ;
+
         dc->StartPage();
         keepGoing = printout->OnPrintPage(pn);
         dc->EndPage();
index af3919bb7bd4ca122df4e2cf3dbfcc9c3a4fd069..dd35860824a55510f3cc0305215f0b3f5f7f4f09 100644 (file)
@@ -111,6 +111,14 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
 
        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
@@ -152,8 +160,7 @@ void wxTextCtrl::SetValue(const wxString& st)
        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
@@ -208,7 +215,7 @@ void wxTextCtrl::Paste()
                UMAGetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
                TEFromScrap() ;
                TEPaste( teH ) ;
-//     MacInvalidateControl() ;
+               UMADrawControl( m_macControl ) ;
        }
 }
 
index 34b7fe57ead7aaf95669ba7c8310b2fc1ab584f6..a37865ee7a5768bb344ed0d63dc07c9fa887c498 100644 (file)
@@ -801,9 +801,11 @@ bool wxThreadModule::OnInit()
        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 )
        {
index 4dce1ce377002275bd563efca535af9618c102e7..f95b4c52bd0425d79cc228e962f2fdebd140d47f 100644 (file)
@@ -1,6 +1,9 @@
 #include <wx/mac/uma.h>
 #include <wx/mac/aga.h>
 
+
+#include "Navigation.h"
+
 // init
 
 static bool    sUMAHasAppearance = false ;
@@ -14,7 +17,19 @@ static long sUMAWindowManagerAttr = 0 ;
 
 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
@@ -24,7 +39,6 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
 
        ::InitGraf(&qd.thePort);
        ::InitFonts();
-       ::InitWindows();
        ::InitMenus();
        ::TEInit();
        ::InitDialogs(0L);
@@ -60,6 +74,16 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
        }
 #endif // UMA_USE_WINDOWMGR
 #endif
+               
+       if ( sUMAHasWindowManager )
+               InitFloatingWindows() ;
+       else
+               InitWindows();
+
+       if ( NavServicesAvailable() )
+       {
+               NavLoad() ;
+       }
 }
 
 // process manager
@@ -250,7 +274,7 @@ void UMAInsertMenu( MenuRef insertMenu , SInt16 afterId )
 
 int gPrOpenCounter = 0 ;
 
-void UMAPrOpen() 
+OSStatus UMAPrOpen() 
 {
 #if !TARGET_CARBON
        OSErr err = noErr ;
@@ -261,12 +285,20 @@ void UMAPrOpen()
                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 ;
@@ -278,8 +310,16 @@ void UMAPrClose()
                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
 }
 
index b312321562d22959b355a7e2acb9cb8f95946c60..6d4fa1b5da5ae663c4879cffae8772bfc6cc474e 100644 (file)
@@ -47,6 +47,14 @@ bool wxGetUserId(char *buf, int maxSize)
     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)
 {
index 804d07a0972b33184ee30d10ed87836353652e32..5df346f8254ccf74f8ed0cffc10cad36e11b3456 100644 (file)
 #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);
 }
@@ -34,28 +34,196 @@ wxWave::~wxWave()
     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);
+}*/
+
+
index e602f93fabec8748d20fbfa1304b25047cafbe0c..9d98f35302d11a65de9607dd5773226994da9758 100644 (file)
@@ -437,8 +437,8 @@ void wxWindow::DoGetClientSize(int *x, int *y) const
     *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()) )
   {
@@ -627,7 +627,7 @@ void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 
 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
@@ -725,7 +725,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
     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 )
@@ -1417,8 +1417,8 @@ void wxWindow::DoSetClientSize(int width, int height)
                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 ) ;
        }
@@ -1443,7 +1443,8 @@ bool wxWindow::MacGetWindowFromPointSub( const wxPoint &point , wxWindow** outWi
        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;
@@ -1462,9 +1463,12 @@ bool wxWindow::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindow** ou
        {
                        wxPoint point( screenpoint ) ;
                        wxWindow* win = wxFindWinFromMacWindow( window ) ;
+                       if ( win )
+                       {
                        win->ScreenToClient( point ) ;
                        return win->MacGetWindowFromPointSub( point , outWin ) ;
        }
+       }
        return FALSE ;
 }
 
@@ -1907,8 +1911,8 @@ void wxWindow::MacRepositionScrollBars()
        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) ;
@@ -2183,7 +2187,7 @@ void wxWindow::MacGetPortClientParams(Point* localOrigin, Rect* clipRect, Window
        SectRect(clipRect, &myClip, clipRect);
 }
 
-long wxWindow::MacGetBorderSize( ) const
+long wxWindow::MacGetLeftBorderSize( ) const
 {
        if( m_macWindowData )
                return 0 ;
@@ -2203,6 +2207,66 @@ long wxWindow::MacGetBorderSize( ) const
        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 ) ;
index 1c36eef12d4d13502c256e7bcfbac7672778fe66..2b1cf2daaef2948c9d6f649334eae8358b6824b3 100644 (file)
 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,
@@ -35,6 +43,7 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id,
        
                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 ) ; 
        
index 528e79481115b5ef3117c596dee59a98b81d4ff8..4f879a59db46a2ac19c934312491b09756028912 100644 (file)
@@ -394,11 +394,11 @@ resource 'ldes' ( 128 )
 } ;
 
 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") {
index 1682209492529b1cfe5abd1cacf95ab92cad9d54..fe13b3f6b292f75774a1270235775eaeee484a10 100644 (file)
 #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
@@ -128,7 +132,7 @@ wxDC::~wxDC(void)
 
 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);
@@ -427,7 +431,12 @@ void wxDC::ComputeScaleAndOrigin(void)
   // 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);
   }
 };
 
index 257c74206b6a7707bae2d3479b742e1376374e50..b21fe548a253e89261e9b5cfc1e9a78234828152 100644 (file)
@@ -36,15 +36,13 @@ GrafPtr macPrintFormerPort = NULL ;
 
 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 ) ;
@@ -52,6 +50,7 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
                UMAPrClose() ;
        }
        
+#if !TARGET_CARBON
        if ( ::PrValidate( m_printData.m_macPrintInfo ) )
        {
                ::PrStlDialog( m_printData.m_macPrintInfo ) ;
@@ -75,23 +74,37 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
        }
        // 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() ;
                
@@ -115,7 +128,17 @@ wxPrinterDC::~wxPrinterDC(void)
                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
 }
 
@@ -130,7 +153,6 @@ void wxPrinterDC::EndDoc(void)
 
 void wxPrinterDC::StartPage(void) 
 {
-#if !TARGET_CARBON
        if ( !m_ok )
                return ;
 
@@ -150,11 +172,15 @@ void wxPrinterDC::StartPage(void)
        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() ;
@@ -169,19 +195,29 @@ void wxPrinterDC::StartPage(void)
                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 )
@@ -194,7 +230,16 @@ void wxPrinterDC::EndPage(void)
                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
 
 }
index 02bbef6a204bad2100a085c8786858f9820e07b6..51f4df142e2ada43fdb84b493e2a6fec284c9284 100644 (file)
 
 #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;
@@ -38,8 +44,6 @@ struct UserDataRec {
 typedef struct UserDataRec
        UserDataRec, *UserDataRecPtr;
 
-#if !TARGET_CARBON
-
 enum {
        kSelectItem = 10,                       // select button item number
        kSFGetFolderDlgID = 250,        // dialog resource number
@@ -307,7 +311,6 @@ static pascal short SFGetFolderDialogHook(short item, DialogPtr theDlgPtr, Ptr d
        
        return item;
 }
-#endif
 
 void StandardGetFolder( ConstStr255Param message , ConstStr255Param path , FileFilterYDUPP fileFilter, StandardFileReply *theSFR)
 {
@@ -433,6 +436,9 @@ static pascal Boolean OnlyVisibleFoldersCustomFileFilter(CInfoPBPtr myCInfoPBPtr
        return !(visibleFlag && folderFlag);
 }
 
+#endif
+
+
 wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
         const wxString& defaultPath,
         long style, const wxPoint& pos)
@@ -445,6 +451,8 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
 
 int wxDirDialog::ShowModal()
 {
+       #if !TARGET_CARBON
+       if ( !gUseNavServices )
        {
                Str255                          prompt ;
                Str255                          path ;
@@ -457,16 +465,15 @@ int wxDirDialog::ShowModal()
 
                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 = "" ;
@@ -477,7 +484,105 @@ int wxDirDialog::ShowModal()
                        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;
 }
 
index 7837183e2aef2d18e0fea4344eec463399db25de..dc4f90e22c9a74e4521915e2cc42bf80ce8f4d52 100644 (file)
 #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" ,
@@ -189,7 +226,7 @@ static pascal Boolean SFGetFolderModalDialogFilter(DialogPtr theDlgPtr, EventRec
                
        return false;
 }
-#endif
+#endif !TARGET_CARBON
 
 void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const char *filter , FileFilterYDUPP fileFilter, StandardFileReply *theSFR)
 {
@@ -451,6 +488,9 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
 
 int wxFileDialog::ShowModal()
 {
+       #if !TARGET_CARBON
+       if ( !gUseNavServices )
+       {
        if ( m_dialogStyle & wxSAVE )
        {
                StandardFileReply       reply ;
@@ -488,7 +528,7 @@ int wxFileDialog::ShowModal()
                strcpy((char *)prompt, m_message) ;
                c2pstr((char *)prompt ) ;
        
-               strcpy((char *)path, m_path ) ;
+                       strcpy((char *)path, m_dir ) ;
                c2pstr((char *)path ) ;
 
                StandardFileReply       reply ;
@@ -515,6 +555,137 @@ int wxFileDialog::ShowModal()
        }
     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
index ecffc9fd941d59244dc5d710d92340b785981080..79d93657fbd3ed0f76f3c06d3e209219ccab2817 100644 (file)
@@ -16,6 +16,7 @@
 #include "wx/defs.h"
 #include "wx/string.h"
 #include "wx/font.h"
+#include "wx/fontutil.h"
 #include "wx/gdicmn.h"
 
 #include "wx/fontutil.h"
@@ -119,6 +120,12 @@ void wxFont::Init()
         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;
@@ -143,12 +150,6 @@ bool wxFont::Create(int pointSize,
     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)
index 99cd68441ad9de7641580d276309485476ad105b..f06fd5baaa524ece3e605cfe10e7e24d3d36183f 100644 (file)
@@ -33,6 +33,7 @@
 #endif
 
 #include "wx/fontenum.h"
+#include "wx/fontutil.h"
 #include "wx/fontmap.h"
 #include "wx/fontutil.h"
 
index b5498fec48450d102bf501997a0d0485eb4d28e5..2a4ee0b9689f259274e136a115da0e1f11206e7a 100644 (file)
@@ -199,8 +199,9 @@ wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id,
 {
     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;
 }
@@ -216,7 +217,7 @@ void wxFrame::PositionStatusBar()
 
     // 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);
    }
 }
 
@@ -296,8 +297,7 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
   {
     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
 
index 17efb46fabf84aa26f483b5b0ad704777b4029c5..03ae6e0572daa7c1bef190320aacc956b761c0a3 100644 (file)
@@ -180,6 +180,7 @@ int wxListBox::DoAppend(const wxString& item)
                m_dataArray.Add( NULL );
        }
        m_noItems ++;
+       DoSetItemClientData( index , NULL ) ;
        MacAppend( item ) ;
 
        return index ;
@@ -255,6 +256,16 @@ int wxListBox::FindString(const wxString& st) const
                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
        {
index 9a66f806d2a33aa0cdb10eba2d5f9afe160aea1c..099f196f34eb0110bc9ae1f93128302cdd02dfc4 100644 (file)
@@ -700,8 +700,37 @@ void wxMenuBar::MacInstallMenuBar()
                                        }
                                }
                        }
-                       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 ) ;
index ab97b53540b24c151b69b20fc22d884988edb2c2..d2e96608969023106b8cab54c536640c3fb8c224 100644 (file)
@@ -42,6 +42,9 @@ const short kwxMacTabBottomMargin = 16 ;
 // ----------------------------------------------------------------------------
 
 #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)
 
index 08a6bf77adc5cff8fed862dd499249361a3e0c25..50c666ce95ea10502c74889e8f89dd60c1061a55 100644 (file)
@@ -136,7 +136,6 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
   // Create an abort window
   wxBeginBusyCursor();
 
-/*
   wxWindow *win = CreateAbortWindow(parent, printout);
   wxYield();
 
@@ -149,7 +148,6 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
   sm_abortWindow = win;
   sm_abortWindow->Show(TRUE);
   wxYield();
-*/
 
   printout->OnBeginPrinting();
   
@@ -178,6 +176,11 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
       }
       else
       {
+               GrafPtr thePort ;
+               GetPort( &thePort ) ;
+               wxYield() ;
+               SetPort( thePort ) ;
+
         dc->StartPage();
         keepGoing = printout->OnPrintPage(pn);
         dc->EndPage();
index af3919bb7bd4ca122df4e2cf3dbfcc9c3a4fd069..dd35860824a55510f3cc0305215f0b3f5f7f4f09 100644 (file)
@@ -111,6 +111,14 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
 
        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
@@ -152,8 +160,7 @@ void wxTextCtrl::SetValue(const wxString& st)
        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
@@ -208,7 +215,7 @@ void wxTextCtrl::Paste()
                UMAGetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
                TEFromScrap() ;
                TEPaste( teH ) ;
-//     MacInvalidateControl() ;
+               UMADrawControl( m_macControl ) ;
        }
 }
 
index 34b7fe57ead7aaf95669ba7c8310b2fc1ab584f6..a37865ee7a5768bb344ed0d63dc07c9fa887c498 100644 (file)
@@ -801,9 +801,11 @@ bool wxThreadModule::OnInit()
        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 )
        {
index 4dce1ce377002275bd563efca535af9618c102e7..f95b4c52bd0425d79cc228e962f2fdebd140d47f 100644 (file)
@@ -1,6 +1,9 @@
 #include <wx/mac/uma.h>
 #include <wx/mac/aga.h>
 
+
+#include "Navigation.h"
+
 // init
 
 static bool    sUMAHasAppearance = false ;
@@ -14,7 +17,19 @@ static long sUMAWindowManagerAttr = 0 ;
 
 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
@@ -24,7 +39,6 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
 
        ::InitGraf(&qd.thePort);
        ::InitFonts();
-       ::InitWindows();
        ::InitMenus();
        ::TEInit();
        ::InitDialogs(0L);
@@ -60,6 +74,16 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
        }
 #endif // UMA_USE_WINDOWMGR
 #endif
+               
+       if ( sUMAHasWindowManager )
+               InitFloatingWindows() ;
+       else
+               InitWindows();
+
+       if ( NavServicesAvailable() )
+       {
+               NavLoad() ;
+       }
 }
 
 // process manager
@@ -250,7 +274,7 @@ void UMAInsertMenu( MenuRef insertMenu , SInt16 afterId )
 
 int gPrOpenCounter = 0 ;
 
-void UMAPrOpen() 
+OSStatus UMAPrOpen() 
 {
 #if !TARGET_CARBON
        OSErr err = noErr ;
@@ -261,12 +285,20 @@ void UMAPrOpen()
                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 ;
@@ -278,8 +310,16 @@ void UMAPrClose()
                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
 }
 
index b312321562d22959b355a7e2acb9cb8f95946c60..6d4fa1b5da5ae663c4879cffae8772bfc6cc474e 100644 (file)
@@ -47,6 +47,14 @@ bool wxGetUserId(char *buf, int maxSize)
     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)
 {
index 804d07a0972b33184ee30d10ed87836353652e32..5df346f8254ccf74f8ed0cffc10cad36e11b3456 100644 (file)
 #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);
 }
@@ -34,28 +34,196 @@ wxWave::~wxWave()
     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);
+}*/
+
+
index e602f93fabec8748d20fbfa1304b25047cafbe0c..9d98f35302d11a65de9607dd5773226994da9758 100644 (file)
@@ -437,8 +437,8 @@ void wxWindow::DoGetClientSize(int *x, int *y) const
     *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()) )
   {
@@ -627,7 +627,7 @@ void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 
 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
@@ -725,7 +725,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
     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 )
@@ -1417,8 +1417,8 @@ void wxWindow::DoSetClientSize(int width, int height)
                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 ) ;
        }
@@ -1443,7 +1443,8 @@ bool wxWindow::MacGetWindowFromPointSub( const wxPoint &point , wxWindow** outWi
        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;
@@ -1462,9 +1463,12 @@ bool wxWindow::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindow** ou
        {
                        wxPoint point( screenpoint ) ;
                        wxWindow* win = wxFindWinFromMacWindow( window ) ;
+                       if ( win )
+                       {
                        win->ScreenToClient( point ) ;
                        return win->MacGetWindowFromPointSub( point , outWin ) ;
        }
+       }
        return FALSE ;
 }
 
@@ -1907,8 +1911,8 @@ void wxWindow::MacRepositionScrollBars()
        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) ;
@@ -2183,7 +2187,7 @@ void wxWindow::MacGetPortClientParams(Point* localOrigin, Rect* clipRect, Window
        SectRect(clipRect, &myClip, clipRect);
 }
 
-long wxWindow::MacGetBorderSize( ) const
+long wxWindow::MacGetLeftBorderSize( ) const
 {
        if( m_macWindowData )
                return 0 ;
@@ -2203,6 +2207,66 @@ long wxWindow::MacGetBorderSize( ) const
        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 ) ;
index 3c374fd3914b0457dde4538950d4deb54301c32f..cba30633ab76ecbf998af5647a44b2e07c0ac035 100644 (file)
@@ -423,7 +423,7 @@ xpmParseHeader(data)
            if (!l)
                return (XpmFileInvalid);
            buf[l] = '\0';
-           #if defined(macintosh) ||Êdefined(__APPLE__)
+           #if defined(macintosh) || defined(__APPLE__)
            ptr = strrchr(buf, '_');
            #else
            ptr = rindex(buf, '_');
index d73c8a78cfaa1c660f2a442dc4897fb6fd2e0a2f..06b11d6021b81b139cf1ffba22e762a468b7e604 100644 (file)
Binary files a/src/makemac.mcp and b/src/makemac.mcp differ