| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 |
- /////////////////////////////////////////////////////////////////////////////
- // 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
- // Copyright: (c) Stefan Csomor
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_PRIVATE_COCOA_H_
- #define _WX_PRIVATE_COCOA_H_
- #include <ApplicationServices/ApplicationServices.h>
- #ifdef __OBJC__
- #import <Cocoa/Cocoa.h>
- #endif
- //
- // shared between Cocoa and Carbon
- //
- // bring in theming 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 wxOSXGetNSImageFromCGImage( CGImageRef image, double scale = 1.0 );
- CGImageRef WXDLLIMPEXP_CORE wxOSXCreateCGImageFromNSImage( WX_NSImage nsimage, double *scale = NULL );
- CGContextRef WXDLLIMPEXP_CORE wxOSXCreateBitmapContextFromNSImage( WX_NSImage nsimage);
- wxBitmap WXDLLIMPEXP_CORE wxOSXCreateSystemBitmap(const wxString& id, const wxString &client, const wxSize& size);
- WXWindow WXDLLIMPEXP_CORE wxOSXGetMainWindow();
- class WXDLLIMPEXP_FWD_CORE wxDialog;
- class WXDLLIMPEXP_CORE wxWidgetCocoaImpl : public wxWidgetImpl
- {
- public :
- wxWidgetCocoaImpl( wxWindowMac* peer , WXWidget w, bool isRootControl = false, bool isUserPane = false ) ;
- wxWidgetCocoaImpl() ;
- ~wxWidgetCocoaImpl();
- void Init();
- virtual bool IsVisible() const ;
- virtual void SetVisibility(bool);
- // we provide a static function which can be reused from
- // wxNonOwnedWindowCocoaImpl too
- static bool ShowViewOrWindowWithEffect(wxWindow *win,
- bool show,
- wxShowEffect effect,
- unsigned timeout);
- virtual bool ShowWithEffect(bool show,
- wxShowEffect effect,
- unsigned timeout);
- 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 bool SetBackgroundStyle(wxBackgroundStyle style);
- 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 void SetDrawingEnabled(bool enabled);
- 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();
- virtual void SetLabel(const wxString& title, wxFontEncoding encoding);
- void SetCursor( const wxCursor & cursor );
- void CaptureMouse();
- void ReleaseMouse();
- #if wxUSE_DRAG_AND_DROP
- void SetDropTarget(wxDropTarget* target);
- #endif
- wxInt32 GetValue() const;
- void SetValue( wxInt32 v );
- wxBitmap GetBitmap() const;
- void SetBitmap( const wxBitmap& bitmap );
- void SetBitmapPosition( wxDirection dir );
- 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 SetToolTip( wxToolTip* tooltip );
- void InstallEventHandler( WXWidget control = NULL );
- virtual bool DoHandleMouseEvent(NSEvent *event);
- virtual bool DoHandleKeyEvent(NSEvent *event);
- virtual bool DoHandleCharEvent(NSEvent *event, NSString *text);
- virtual void DoNotifyFocusEvent(bool receivedFocus, wxWidgetImpl* otherWindow);
- virtual void SetupKeyEvent(wxKeyEvent &wxevent, NSEvent * nsEvent, NSString* charString = NULL);
- virtual void SetupMouseEvent(wxMouseEvent &wxevent, NSEvent * nsEvent);
- void SetupCoordinates(wxCoord &x, wxCoord &y, NSEvent *nsEvent);
- virtual bool SetupCursor(NSEvent* event);
- #if !wxOSX_USE_NATIVE_FLIPPED
- void SetFlipped(bool flipped);
- virtual bool IsFlipped() const { return m_isFlipped; }
- #endif
- virtual double GetContentScaleFactor() const;
-
- // cocoa thunk connected calls
- #if wxUSE_DRAG_AND_DROP
- virtual unsigned int draggingEntered(void* sender, WXWidget slf, void* _cmd);
- virtual void draggingExited(void* sender, WXWidget slf, void* _cmd);
- virtual unsigned int draggingUpdated(void* sender, WXWidget slf, void* _cmd);
- virtual bool performDragOperation(void* sender, WXWidget slf, void* _cmd);
- #endif
- virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
- virtual void cursorUpdate(WX_NSEvent event, WXWidget slf, void* _cmd);
- virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
- virtual void insertText(NSString* text, WXWidget slf, void* _cmd);
- virtual void doCommandBySelector(void* sel, WXWidget slf, void* _cmd);
- virtual bool performKeyEquivalent(WX_NSEvent event, WXWidget slf, void* _cmd);
- virtual bool acceptsFirstResponder(WXWidget slf, void* _cmd);
- virtual bool becomeFirstResponder(WXWidget slf, void* _cmd);
- virtual bool resignFirstResponder(WXWidget slf, void* _cmd);
- #if !wxOSX_USE_NATIVE_FLIPPED
- virtual bool isFlipped(WXWidget slf, void* _cmd);
- #endif
- virtual void drawRect(void* rect, WXWidget slf, void* _cmd);
- virtual void controlAction(WXWidget slf, void* _cmd, void* sender);
- virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender);
- // for wxTextCtrl-derived classes, put here since they don't all derive
- // from the same pimpl class.
- virtual void controlTextDidChange();
- protected:
- WXWidget m_osxView;
- NSEvent* m_lastKeyDownEvent;
- #if !wxOSX_USE_NATIVE_FLIPPED
- bool m_isFlipped;
- #endif
- // if it the control has an editor, that editor will already send some
- // events, don't resend them
- bool m_hasEditor;
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl)
- };
- DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow );
- class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl
- {
- public :
- wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) ;
- wxNonOwnedWindowCocoaImpl();
- virtual ~wxNonOwnedWindowCocoaImpl();
- virtual void WillBeDestroyed() ;
- void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
- long style, long extraStyle, const wxString& name ) ;
- void Create( wxWindow* parent, WXWindow nativeWindow );
- WXWindow GetWXWindow() const;
- void Raise();
- void Lower();
- bool Show(bool show);
- virtual bool ShowWithEffect(bool show,
- wxShowEffect effect,
- unsigned timeout);
- void Update();
- bool SetTransparent(wxByte alpha);
- bool SetBackgroundColour(const wxColour& col );
- void SetExtraStyle( long exStyle );
- void SetWindowStyleFlag( long style );
- 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 ShowWithoutActivating();
- virtual void RequestUserAttention(int flags);
- virtual void ScreenToWindow( int *x, int *y );
- virtual void WindowToScreen( int *x, int *y );
- virtual bool IsActive();
- virtual void SetModified(bool modified);
- virtual bool IsModified() const;
- virtual void SetRepresentedFilename(const wxString& filename);
- wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
-
- CGWindowLevel GetWindowLevel() const { return m_macWindowLevel; }
- void RestoreWindowLevel();
-
- static WX_NSResponder GetNextFirstResponder() ;
- protected :
- CGWindowLevel m_macWindowLevel;
- WXWindow m_macWindow;
- void * m_macFullScreenData ;
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl)
- };
- DECLARE_WXCOCOA_OBJC_CLASS( wxNSButton );
- class wxButtonCocoaImpl : public wxWidgetCocoaImpl, public wxButtonImpl
- {
- public:
- wxButtonCocoaImpl(wxWindowMac *wxpeer, wxNSButton *v);
- virtual void SetBitmap(const wxBitmap& bitmap);
- #if wxUSE_MARKUP
- virtual void SetLabelMarkup(const wxString& markup);
- #endif // wxUSE_MARKUP
-
- void SetPressedBitmap( const wxBitmap& bitmap );
- void GetLayoutInset(int &left , int &top , int &right, int &bottom) const;
- void SetAcceleratorFromLabel(const wxString& label);
- NSButton *GetNSButton() const;
- };
- #ifdef __OBJC__
- typedef void (*wxOSX_TextEventHandlerPtr)(NSView* self, SEL _cmd, NSString *event);
- typedef void (*wxOSX_EventHandlerPtr)(NSView* self, SEL _cmd, NSEvent *event);
- typedef BOOL (*wxOSX_PerformKeyEventHandlerPtr)(NSView* self, SEL _cmd, NSEvent *event);
- typedef BOOL (*wxOSX_FocusHandlerPtr)(NSView* self, SEL _cmd);
- WXDLLIMPEXP_CORE NSScreen* wxOSXGetMenuScreen();
- WXDLLIMPEXP_CORE NSRect wxToNSRect( NSView* parent, const wxRect& r );
- WXDLLIMPEXP_CORE wxRect wxFromNSRect( NSView* parent, const NSRect& rect );
- WXDLLIMPEXP_CORE NSPoint wxToNSPoint( NSView* parent, const wxPoint& p );
- WXDLLIMPEXP_CORE wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p );
- NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size ,
- bool adjustForOrigin = true );
- WXDLLIMPEXP_CORE NSView* wxOSXGetViewFromResponder( NSResponder* responder );
- // used for many wxControls
- @interface wxNSButton : NSButton
- {
- NSTrackingRectTag rectTag;
- }
- @end
- @interface wxNSBox : NSBox
- {
- }
- @end
- @interface wxNSTextFieldEditor : NSTextView
- {
- NSEvent* lastKeyDownEvent;
- }
- @end
- @interface wxNSTextField : NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
- {
- wxNSTextFieldEditor* fieldEditor;
- }
- - (wxNSTextFieldEditor*) fieldEditor;
- - (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
- @end
- @interface wxNSSecureTextField : NSSecureTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
- {
- }
- @end
- @interface wxNSTextView : NSTextView wxOSX_10_6_AND_LATER(<NSTextViewDelegate>)
- {
- }
- - (void)textDidChange:(NSNotification *)aNotification;
- @end
- @interface wxNSComboBox : NSComboBox
- {
- wxNSTextFieldEditor* fieldEditor;
- }
- - (wxNSTextFieldEditor*) fieldEditor;
- - (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
- @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
- void WXDLLIMPEXP_CORE wxOSXCocoaClassAddWXMethods(Class c);
- /*
- We need this for ShowModal, as the sheet just disables the parent window and
- returns control to the app, whereas we don't want to return from ShowModal
- until the sheet has been dismissed.
- */
- @interface ModalDialogDelegate : NSObject
- {
- BOOL sheetFinished;
- int resultCode;
- wxDialog* impl;
- }
- - (void)setImplementation: (wxDialog *)dialog;
- - (BOOL)finished;
- - (int)code;
- - (void)waitForSheetToFinish;
- - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
- @end
- // This interface must be exported in shared 64 bit multilib build but
- // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1)
- // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit
- // builds but seems to be unnecessary there so to avoid the expense of a
- // configure check verifying if this does work or not with the current
- // compiler we just only use it for 64 bit builds where this is always
- // supported.
- //
- // NB: Currently this is the only place where we need to export an
- // interface but if we need to do it elsewhere we should define a
- // WXEXPORT_OBJC macro once and reuse it in all places it's needed
- // instead of duplicating this preprocessor check.
- #ifdef __LP64__
- WXEXPORT
- #endif // 64 bit builds
- @interface wxNSAppController : NSObject wxOSX_10_6_AND_LATER(<NSApplicationDelegate>)
- {
- }
- @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 kwxCursorWatch = 15;
- const short kwxCursorLast = kwxCursorWatch;
- // exposing our fallback cursor map
- extern ClassicCursor gMacCursors[];
- extern NSLayoutManager* gNSLayoutManager;
- #endif
- #endif
- // _WX_PRIVATE_COCOA_H_
|