git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58243 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			485 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			485 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/osx/cocoa/private.h
 | |
| // Purpose:     Private declarations: as this header is only included by
 | |
| //              wxWidgets itself, it may contain identifiers which don't start
 | |
| //              with "wx".
 | |
| // Author:      Stefan Csomor
 | |
| // Modified by:
 | |
| // Created:     1998-01-01
 | |
| // RCS-ID:      $Id: private.h 53819 2008-05-29 14:11:45Z SC $
 | |
| // Copyright:   (c) Stefan Csomor
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_PRIVATE_COCOA_H_
 | |
| #define _WX_PRIVATE_COCOA_H_
 | |
| 
 | |
| #include "wx/osx/core/private.h"
 | |
| 
 | |
| #include "wx/defs.h"
 | |
| 
 | |
| #include <ApplicationServices/ApplicationServices.h>
 | |
| 
 | |
| #if wxOSX_USE_ATSU_TEXT
 | |
|     // we need theming and atsu
 | |
|     #include <Carbon/Carbon.h>
 | |
| #endif
 | |
| 
 | |
| #ifdef __OBJC__
 | |
|     #import <Cocoa/Cocoa.h>
 | |
| #endif
 | |
| 
 | |
| //
 | |
| // shared between Cocoa and Carbon
 | |
| //
 | |
| 
 | |
| // bring in themeing types without pulling in the headers
 | |
| 
 | |
| #if wxUSE_GUI
 | |
| typedef SInt16 ThemeBrush;
 | |
| CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
 | |
| OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
 | |
|                                CGContextRef    inContext,
 | |
|                                const CGRect *  inBounds,
 | |
|                                CGImageRef      inImage) ;
 | |
| WX_NSImage WXDLLIMPEXP_CORE wxOSXCreateNSImageFromCGImage( CGImageRef image );
 | |
| #endif
 | |
| 
 | |
| long UMAGetSystemVersion() ;
 | |
| WXDLLIMPEXP_BASE void wxMacStringToPascal( const wxString&from , StringPtr to );
 | |
| WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL );
 | |
| WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef );
 | |
| WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname );
 | |
| 
 | |
| //
 | |
| //
 | |
| //
 | |
| 
 | |
| #if wxUSE_GUI
 | |
| 
 | |
| class WXDLLIMPEXP_CORE wxWidgetCocoaImpl : public wxWidgetImpl
 | |
| {
 | |
| public :
 | |
|     wxWidgetCocoaImpl( wxWindowMac* peer , WXWidget w, bool isRootControl = false ) ;    
 | |
|     wxWidgetCocoaImpl() ;    
 | |
|     ~wxWidgetCocoaImpl();    
 | |
|     
 | |
|     void Init();
 | |
|     
 | |
|     virtual bool        IsVisible() const ;
 | |
|     virtual void        SetVisibility(bool);
 | |
| 
 | |
|     virtual void        Raise();
 | |
|     
 | |
|     virtual void        Lower();
 | |
| 
 | |
|     virtual void        ScrollRect( const wxRect *rect, int dx, int dy );
 | |
| 
 | |
|     virtual WXWidget    GetWXWidget() const { return m_osxView; }
 | |
| 
 | |
|     virtual void        SetBackgroundColour(const wxColour&);
 | |
| 
 | |
|     virtual void        GetContentArea( int &left , int &top , int &width , int &height ) const;
 | |
|     virtual void        Move(int x, int y, int width, int height);
 | |
|     virtual void        GetPosition( int &x, int &y ) const;
 | |
|     virtual void        GetSize( int &width, int &height ) const;
 | |
|     virtual void        SetControlSize( wxWindowVariant variant );
 | |
| 
 | |
|     virtual void        SetNeedsDisplay( const wxRect* where = NULL );
 | |
|     virtual bool        GetNeedsDisplay() const;
 | |
| 
 | |
|     virtual bool        CanFocus() const;
 | |
|     // return true if successful
 | |
|     virtual bool        SetFocus();
 | |
|     virtual bool        HasFocus() const;
 | |
| 
 | |
|     void                RemoveFromParent();
 | |
|     void                Embed( wxWidgetImpl *parent );
 | |
| 
 | |
|     void                SetDefaultButton( bool isDefault );
 | |
|     void                PerformClick();
 | |
|     void                SetLabel(const wxString& title, wxFontEncoding encoding);
 | |
| 
 | |
|     void                SetCursor( const wxCursor & cursor );
 | |
|     void                CaptureMouse();
 | |
|     void                ReleaseMouse();
 | |
| 
 | |
|     wxInt32             GetValue() const;
 | |
|     void                SetValue( wxInt32 v );
 | |
|     void                SetBitmap( const wxBitmap& bitmap );
 | |
|     void                SetupTabs( const wxNotebook ¬ebook );
 | |
|     void                GetBestRect( wxRect *r ) const;
 | |
|     bool                IsEnabled() const;
 | |
|     void                Enable( bool enable );
 | |
|     bool                ButtonClickDidStateChange() { return true ;}
 | |
|     void                SetMinimum( wxInt32 v );
 | |
|     void                SetMaximum( wxInt32 v );
 | |
|     wxInt32             GetMinimum() const;
 | |
|     wxInt32             GetMaximum() const;
 | |
|     void                PulseGauge();
 | |
|     void                SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
 | |
| 
 | |
|     void                SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
 | |
| 
 | |
|     void                InstallEventHandler( WXWidget control = NULL );
 | |
|     
 | |
|     virtual bool        DoHandleMouseEvent(NSEvent *event); 
 | |
|     virtual bool        DoHandleKeyEvent(NSEvent *event); 
 | |
|     virtual void        DoNotifyFocusEvent(bool receivedFocus); 
 | |
| 
 | |
| protected:
 | |
|     WXWidget m_osxView;
 | |
|     DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl)
 | |
| };
 | |
| 
 | |
| DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow );
 | |
| 
 | |
| class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl
 | |
| {
 | |
| public :
 | |
|     wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) ;
 | |
|     wxNonOwnedWindowCocoaImpl();
 | |
|     
 | |
|     virtual ~wxNonOwnedWindowCocoaImpl();
 | |
|     
 | |
|     virtual void Destroy() ;
 | |
|     void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
 | |
|     long style, long extraStyle, const wxString& name ) ;
 | |
|     
 | |
|     WXWindow GetWXWindow() const;
 | |
|     void Raise();    
 | |
|     void Lower();
 | |
|     bool Show(bool show);    
 | |
|     bool ShowWithEffect(bool show, wxShowEffect effect, unsigned timeout);
 | |
|         
 | |
|     void Update();
 | |
|     bool SetTransparent(wxByte alpha);
 | |
|     bool SetBackgroundColour(const wxColour& col );
 | |
|     void SetExtraStyle( long exStyle );    
 | |
|     bool SetBackgroundStyle(wxBackgroundStyle style);    
 | |
|     bool CanSetTransparent();
 | |
| 
 | |
|     void MoveWindow(int x, int y, int width, int height);
 | |
|     void GetPosition( int &x, int &y ) const;
 | |
|     void GetSize( int &width, int &height ) const;
 | |
| 
 | |
|     void GetContentArea( int &left , int &top , int &width , int &height ) const;    
 | |
|     bool SetShape(const wxRegion& region);
 | |
|     
 | |
|     virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) ;
 | |
|     
 | |
|     virtual bool IsMaximized() const;
 | |
|     
 | |
|     virtual bool IsIconized() const;
 | |
|     
 | |
|     virtual void Iconize( bool iconize );
 | |
|     
 | |
|     virtual void Maximize(bool maximize);
 | |
|     
 | |
|     virtual bool IsFullScreen() const;
 | |
|     
 | |
|     virtual bool ShowFullScreen(bool show, long style);
 | |
| 
 | |
|     virtual void RequestUserAttention(int flags);
 | |
|     
 | |
|     virtual void ScreenToWindow( int *x, int *y );
 | |
|     
 | |
|     virtual void WindowToScreen( int *x, int *y );
 | |
|     
 | |
|     wxNonOwnedWindow*   GetWXPeer() { return m_wxPeer; }
 | |
| protected :
 | |
|     WX_wxNSWindow         m_macWindow;
 | |
|     void *              m_macFullScreenData ;
 | |
|     DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl)
 | |
| };    
 | |
| 
 | |
| #ifdef __OBJC__
 | |
| 
 | |
|     extern NSRect wxToNSRect( NSView* parent, const wxRect& r );
 | |
|     extern wxRect wxFromNSRect( NSView* parent, const NSRect& rect );
 | |
|     extern NSPoint wxToNSPoint( NSView* parent, const wxPoint& p );
 | |
|     extern wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p );
 | |
|     
 | |
|     NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size , 
 | |
|         bool adjustForOrigin = true );
 | |
|         
 | |
|     // common code snippets for cocoa implementations
 | |
|     // later to be done using injection in method table
 | |
|         
 | |
|     #define WXCOCOAIMPL_COMMON_EVENTS_INTERFACE -(void)mouseDown:(NSEvent *)event ;\
 | |
|         - (void)rightMouseDown:(NSEvent *)event ;\
 | |
|         - (void)otherMouseDown:(NSEvent *)event ;\
 | |
|         - (void)mouseUp:(NSEvent *)event ;\
 | |
|         - (void)rightMouseUp:(NSEvent *)event ;\
 | |
|         - (void)otherMouseUp:(NSEvent *)event ;\
 | |
|         - (void)mouseMoved:(NSEvent *)event;\
 | |
|         - (void)mouseDragged:(NSEvent *)event;\
 | |
|         - (void)rightMouseDragged:(NSEvent *)event;\
 | |
|         - (void)otherMouseDragged:(NSEvent *)event;\
 | |
|         - (void)scrollWheel:(NSEvent *)theEvent;\
 | |
|         - (void)mouseEntered:(NSEvent *)event;\
 | |
|         - (void)mouseExited:(NSEvent *)event;\
 | |
|         - (void)keyDown:(NSEvent *)event;\
 | |
|         - (void)keyUp:(NSEvent *)event;\
 | |
|         - (BOOL)performKeyEquivalent:(NSEvent *)event;\
 | |
|         - (void)flagsChanged:(NSEvent *)event;\
 | |
|         - (BOOL)becomeFirstResponder;\
 | |
|         - (BOOL)resignFirstResponder;\
 | |
|         - (void)resetCursorRects;
 | |
| 
 | |
| 
 | |
|     #define WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION_NO_MOUSEDOWN        -(void)rightMouseDown:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super rightMouseDown:event];\
 | |
|         }\
 | |
|         -(void)otherMouseDown:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super otherMouseDown:event];\
 | |
|         }\
 | |
|         -(void)mouseUp:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super mouseUp:event];\
 | |
|         }\
 | |
|         -(void)rightMouseUp:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super rightMouseUp:event];\
 | |
|         }\
 | |
|         -(void)otherMouseUp:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super otherMouseUp:event];\
 | |
|         }\
 | |
|         -(void)mouseMoved:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super mouseMoved:event];\
 | |
|         }\
 | |
|         -(void)mouseDragged:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super mouseDragged:event];\
 | |
|         }\
 | |
|         -(void)rightMouseDragged:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super rightMouseDragged:event];\
 | |
|         }\
 | |
|         -(void)otherMouseDragged:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super otherMouseDragged:event];\
 | |
|         }\
 | |
|         -(void)scrollWheel:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super scrollWheel:event];\
 | |
|         }\
 | |
|         -(void)mouseEntered:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super mouseEntered:event];\
 | |
|         }\
 | |
|         -(void)mouseExited:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super mouseExited:event];\
 | |
|         }\
 | |
|         -(BOOL)performKeyEquivalent:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleKeyEvent(event) )\
 | |
|                 return [super performKeyEquivalent:event];\
 | |
|             return YES;\
 | |
|         }\
 | |
|         -(void)keyDown:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleKeyEvent(event) )\
 | |
|                 [super keyDown:event];\
 | |
|         }\
 | |
|         -(void)keyUp:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleKeyEvent(event) )\
 | |
|                 [super keyUp:event];\
 | |
|         }\
 | |
|         -(void)flagsChanged:(NSEvent *)event\
 | |
|         {\
 | |
|             if ( !impl->DoHandleKeyEvent(event) )\
 | |
|                 [super flagsChanged:event];\
 | |
|         }\
 | |
|         - (BOOL) becomeFirstResponder\
 | |
|         {\
 | |
|             BOOL r = [super becomeFirstResponder];\
 | |
|             if ( r )\
 | |
|                 impl->DoNotifyFocusEvent( true );\
 | |
|             return r;\
 | |
|         }\
 | |
|         - (BOOL) resignFirstResponder\
 | |
|         {\
 | |
|             BOOL r = [super resignFirstResponder];\
 | |
|             if ( r )\
 | |
|                 impl->DoNotifyFocusEvent( false );\
 | |
|             return r;\
 | |
|         }\
 | |
|         - (void) resetCursorRects\
 | |
|         {\
 | |
|             if ( impl )\
 | |
|             {\
 | |
|                 wxWindow* wxpeer = impl->GetWXPeer();\
 | |
|                 if ( wxpeer )\
 | |
|                 {\
 | |
|                     NSCursor *cursor = (NSCursor*)wxpeer->GetCursor().GetHCURSOR();\
 | |
|                     if (cursor == NULL)\
 | |
|                         [super resetCursorRects];\
 | |
|                     else\
 | |
|                         [self addCursorRect: [self bounds]\
 | |
|                             cursor: cursor];\
 | |
|                 }\
 | |
|             }\
 | |
|         }
 | |
| 
 | |
|     #define WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION -(void)mouseDown:(NSEvent *)event \
 | |
|         {\
 | |
|             if ( !impl->DoHandleMouseEvent(event) )\
 | |
|                 [super mouseDown:event];\
 | |
|         }\
 | |
|         WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION_NO_MOUSEDOWN
 | |
| 
 | |
|     #define WXCOCOAIMPL_COMMON_MEMBERS wxWidgetCocoaImpl* impl;
 | |
|     
 | |
|     #define WXCOCOAIMPL_COMMON_INTERFACE \
 | |
|         - (void)setImplementation: (wxWidgetCocoaImpl *) theImplementation;\
 | |
|         - (wxWidgetCocoaImpl*) implementation;\
 | |
|         - (BOOL) isFlipped;\
 | |
|         WXCOCOAIMPL_COMMON_EVENTS_INTERFACE
 | |
| 
 | |
|     #define WXCOCOAIMPL_COMMON_IMPLEMENTATION_BASE - (void)setImplementation: (wxWidgetCocoaImpl *) theImplementation\
 | |
|         {\
 | |
|             impl = theImplementation;\
 | |
|         }\
 | |
|         - (wxWidgetCocoaImpl*) implementation\
 | |
|         {\
 | |
|             return impl;\
 | |
|         }\
 | |
| 
 | |
|     #define WXCOCOAIMPL_COMMON_IMPLEMENTATION WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION \
 | |
|         WXCOCOAIMPL_COMMON_IMPLEMENTATION_BASE \
 | |
|         - (BOOL) isFlipped\
 | |
|         {\
 | |
|             return YES;\
 | |
|         }
 | |
| 
 | |
|     #define WXCOCOAIMPL_COMMON_IMPLEMENTATION_NO_MOUSEDOWN WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION_NO_MOUSEDOWN \
 | |
|         WXCOCOAIMPL_COMMON_IMPLEMENTATION_BASE \
 | |
|         - (BOOL) isFlipped\
 | |
|         {\
 | |
|             return YES;\
 | |
|         }
 | |
| 
 | |
| 
 | |
|      #define WXCOCOAIMPL_COMMON_IMPLEMENTATION_NOT_FLIPPED WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION \
 | |
|         WXCOCOAIMPL_COMMON_IMPLEMENTATION_BASE \
 | |
|         - (BOOL) isFlipped\
 | |
|         {\
 | |
|             return NO;\
 | |
|         }
 | |
| 
 | |
|     // used for many wxControls
 | |
|     
 | |
|     @interface wxNSButton : NSButton
 | |
|     {
 | |
|         WXCOCOAIMPL_COMMON_MEMBERS
 | |
|     }
 | |
| 
 | |
|     WXCOCOAIMPL_COMMON_INTERFACE
 | |
|     - (void) clickedAction: (id) sender;
 | |
| 
 | |
|     @end
 | |
| 
 | |
|     @interface wxNSBox : NSBox
 | |
|     {
 | |
|         WXCOCOAIMPL_COMMON_MEMBERS
 | |
|     }
 | |
| 
 | |
|     WXCOCOAIMPL_COMMON_INTERFACE
 | |
| 
 | |
|     @end
 | |
| 
 | |
|     @interface wxNSTextField : NSTextField
 | |
|     {
 | |
|        WXCOCOAIMPL_COMMON_MEMBERS
 | |
|     }
 | |
| 
 | |
|     WXCOCOAIMPL_COMMON_INTERFACE
 | |
|     
 | |
|     @end
 | |
| 
 | |
|     @interface wxNSMenu : NSMenu
 | |
|     {
 | |
|        wxMenuImpl* impl;
 | |
|     }
 | |
| 
 | |
|     - (void) setImplementation:(wxMenuImpl*) item;
 | |
|     - (wxMenuImpl*) implementation;
 | |
| 
 | |
|     @end 
 | |
| 
 | |
|     @interface wxNSMenuItem : NSMenuItem
 | |
|     {
 | |
|        wxMenuItemImpl* impl;
 | |
|     }
 | |
| 
 | |
|     - (void) setImplementation:(wxMenuItemImpl*) item;
 | |
|     - (wxMenuItemImpl*) implementation;
 | |
| 
 | |
|     - (void)clickedAction:(id)sender;
 | |
|     - (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
 | |
| 
 | |
|     @end 
 | |
| 
 | |
| #endif // __OBJC__
 | |
| 
 | |
| // NSCursor
 | |
| 
 | |
| WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type );
 | |
| WX_NSCursor  wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY );
 | |
| void  wxMacCocoaSetCursor( WX_NSCursor cursor );
 | |
| void  wxMacCocoaHideCursor();
 | |
| void  wxMacCocoaShowCursor();
 | |
| 
 | |
| typedef struct tagClassicCursor
 | |
| {
 | |
|     wxUint16 bits[16];
 | |
|     wxUint16 mask[16];
 | |
|     wxInt16 hotspot[2];
 | |
| }ClassicCursor;
 | |
| 
 | |
| const short kwxCursorBullseye = 0;
 | |
| const short kwxCursorBlank = 1;
 | |
| const short kwxCursorPencil = 2;
 | |
| const short kwxCursorMagnifier = 3;
 | |
| const short kwxCursorNoEntry = 4;
 | |
| const short kwxCursorPaintBrush = 5;
 | |
| const short kwxCursorPointRight = 6;
 | |
| const short kwxCursorPointLeft = 7;
 | |
| const short kwxCursorQuestionArrow = 8;
 | |
| const short kwxCursorRightArrow = 9;
 | |
| const short kwxCursorSizeNS = 10;
 | |
| const short kwxCursorSize = 11;
 | |
| const short kwxCursorSizeNESW = 12;
 | |
| const short kwxCursorSizeNWSE = 13;
 | |
| const short kwxCursorRoller = 14;
 | |
| const short kwxCursorLast = kwxCursorRoller;
 | |
| 
 | |
| // exposing our fallback cursor map
 | |
| 
 | |
| extern ClassicCursor gMacCursors[];
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif
 | |
|     // _WX_PRIVATE_COCOA_H_
 | |
| 
 |