/////////////////////////////////////////////////////////////////////////////
-// Name: window.h
+// Name: include/wx/mac/carbon/window.h
// Purpose: wxWindowMac class
// Author: Stefan Csomor
// Modified by:
#ifndef _WX_WINDOW_H_
#define _WX_WINDOW_H_
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma interface "window.h"
-#endif
-
#include "wx/brush.h"
-
-// ---------------------------------------------------------------------------
-// forward declarations
-// ---------------------------------------------------------------------------
+#include "wx/dc.h"
class WXDLLEXPORT wxButton;
class WXDLLEXPORT wxScrollBar;
class WXDLLEXPORT wxTopLevelWindowMac;
-// ---------------------------------------------------------------------------
-// constants
-// ---------------------------------------------------------------------------
+class wxMacControl ;
class WXDLLEXPORT wxWindowMac: public wxWindowBase
{
DECLARE_DYNAMIC_CLASS(wxWindowMac)
-
+
friend class wxDC;
friend class wxPaintDC;
-
+
public:
-
- wxWindowMac()
- : m_macBackgroundBrush()
- , m_macVisibleRegion()
- , m_x(0), m_y(0), m_width(0), m_height(0)
- , m_hScrollBar(NULL), m_vScrollBar(NULL)
- , m_label(wxEmptyString)
- { Init(); }
-
- wxWindowMac(wxWindowMac *parent,
+ wxWindowMac();
+
+ wxWindowMac( wxWindowMac *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
- const wxString& name = wxPanelNameStr)
- {
- Init();
- Create(parent, id, pos, size, style, name);
- }
+ const wxString& name = wxPanelNameStr );
virtual ~wxWindowMac();
- bool Create(wxWindowMac *parent,
+ bool Create( wxWindowMac *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
- const wxString& name = wxPanelNameStr);
-
+ const wxString& name = wxPanelNameStr );
// implement base class pure virtuals
- virtual void SetTitle( const wxString& title);
- virtual wxString GetTitle() const;
+ virtual void SetLabel( const wxString& label );
+ virtual wxString GetLabel() const;
virtual void Raise();
virtual void Lower();
- virtual bool Show( bool show = TRUE );
- virtual bool Enable( bool enable = TRUE );
+ virtual bool Show( bool show = true );
+ virtual void DoEnable( bool enable );
+ virtual void OnEnabled( bool enabled );
virtual void SetFocus();
- virtual void WarpPointer(int x, int y);
+ virtual void WarpPointer( int x, int y );
- virtual void Refresh( bool eraseBackground = TRUE,
- const wxRect *rect = (const wxRect *) NULL );
+ virtual void Refresh( bool eraseBackground = true,
+ const wxRect *rect = NULL );
+ virtual void Freeze();
+ virtual void Thaw();
+ virtual bool IsFrozen() const;
+
+ virtual void Update() ;
+ virtual void ClearBackground();
virtual bool SetCursor( const wxCursor &cursor );
- virtual bool SetFont(const wxFont& font)
- { return wxWindowBase::SetFont(font); }
+ virtual bool SetFont( const wxFont &font );
+ virtual bool SetBackgroundColour( const wxColour &colour );
+ virtual bool SetForegroundColour( const wxColour &colour );
+
virtual int GetCharHeight() const;
virtual int GetCharWidth() const;
- virtual void GetTextExtent(const wxString& string,
+ virtual void GetTextExtent( const wxString& string,
int *x, int *y,
- int *descent = (int *) NULL,
- int *externalLeading = (int *) NULL,
- const wxFont *theFont = (const wxFont *) NULL)
+ int *descent = NULL,
+ int *externalLeading = NULL,
+ const wxFont *theFont = NULL )
const;
-
+protected:
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
-
+public:
virtual void SetScrollbar( int orient, int pos, int thumbVisible,
- int range, bool refresh = TRUE );
- virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
+ int range, bool refresh = true );
+ virtual void SetScrollPos( int orient, int pos, bool refresh = true );
virtual int GetScrollPos( int orient ) const;
virtual int GetScrollThumb( int orient ) const;
virtual int GetScrollRange( int orient ) const;
virtual void ScrollWindow( int dx, int dy,
const wxRect* rect = (wxRect *) NULL );
+ virtual bool Reparent( wxWindowBase *newParent );
#if wxUSE_DRAG_AND_DROP
virtual void SetDropTarget( wxDropTarget *dropTarget );
-#endif // wxUSE_DRAG_AND_DROP
+#endif
// Accept files for dragging
- virtual void DragAcceptFiles(bool accept);
-
- // Native resource loading (implemented in src/msw/nativdlg.cpp)
- // FIXME: should they really be all virtual?
- wxWindowMac* GetWindowChild1(wxWindowID id);
- wxWindowMac* GetWindowChild(wxWindowID id);
+ virtual void DragAcceptFiles( bool accept );
// implementation from now on
// --------------------------
- void MacClientToRootWindow( int *x , int *y ) const ;
- void MacRootWindowToClient( int *x , int *y ) const ;
- void MacWindowToRootWindow( int *x , int *y ) const ;
- void MacRootWindowToWindow( int *x , int *y ) const ;
-
- virtual wxString MacGetToolTipString( wxPoint &where ) ;
+ void MacClientToRootWindow( int *x , int *y ) const;
+ void MacRootWindowToClient( int *x , int *y ) const;
+
+ void MacWindowToRootWindow( int *x , int *y ) const;
+ void MacWindowToRootWindow( short *x , short *y ) const;
+
+ void MacRootWindowToWindow( int *x , int *y ) const;
+ void MacRootWindowToWindow( short *x , short *y ) const;
+
+ virtual wxString MacGetToolTipString( wxPoint &where );
// simple accessors
// ----------------
-// WXHWND GetHWND() const { return m_hWnd; }
-// void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; }
- virtual WXWidget GetHandle() const { return (WXWidget) NULL ; }
-
- bool GetTransparentBackground() const { return m_backgroundTransparent; }
- void SetTransparent(bool t = TRUE) { m_backgroundTransparent = t; }
+ virtual WXWidget GetHandle() const;
+ virtual bool SetTransparent(wxByte alpha);
+ virtual bool CanSetTransparent();
+ virtual wxByte GetTransparent() const ;
+
// event handlers
// --------------
- void OnSetFocus(wxFocusEvent& event) ;
- void OnNcPaint(wxNcPaintEvent& event);
- void OnEraseBackground(wxEraseEvent& event);
- void OnMouseEvent( wxMouseEvent &event ) ;
+ void OnSetFocus( wxFocusEvent& event );
+ void OnPaint( wxPaintEvent& event );
+ void OnNcPaint( wxNcPaintEvent& event );
+ void OnEraseBackground(wxEraseEvent& event );
+ void OnMouseEvent( wxMouseEvent &event );
- void MacOnScroll(wxScrollEvent&event ) ;
-
- bool AcceptsFocus() const ;
+ void MacOnScroll( wxScrollEvent&event );
+
+ bool AcceptsFocus() const;
+
+ virtual bool IsDoubleBuffered() const { return true; }
+
+public:
+ static long MacRemoveBordersFromStyle( long style ) ;
public:
void OnInternalIdle();
- // For implementation purposes - sometimes decorations make the client area
- // smaller
+ // For implementation purposes:
+ // sometimes decorations make the client area smaller
virtual wxPoint GetClientAreaOrigin() const;
wxWindowMac *FindItem(long id) const;
- wxWindowMac *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const;
+ wxWindowMac *FindItemByHWND(WXHWND hWnd, bool controlOnly = false) const;
- // Make a Windows extended style from the given wxWindows window style
- static WXDWORD MakeExtendedStyle(long style,
- bool eliminateBorders = TRUE);
- // Determine whether 3D effects are wanted
- WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) const;
+ virtual void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ;
+ virtual bool MacDoRedraw( WXHRGN updatergn , long time ) ;
+ virtual bool MacCanFocus() const ;
- // MSW only: TRUE if this control is part of the main control
- virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return FALSE; };
+ // this should not be overriden in classes above wxWindowMac
+ // because it is called from its destructor via DeleteChildren
+ virtual void RemoveChild( wxWindowBase *child );
+ virtual void MacPaintBorders( int left , int top ) ;
- // Setup background and foreground colours correctly
- virtual void SetupColours();
+ // invalidates the borders and focus area around the control;
+ // must not be virtual as it will be called during destruction
+ void MacInvalidateBorders() ;
-public:
- static bool MacGetWindowFromPoint( const wxPoint &point , wxWindowMac** outWin ) ;
- virtual bool MacGetWindowFromPointSub( const wxPoint &point , wxWindowMac** outWin ) ;
- virtual void MacRedraw( WXHRGN updatergn , long time , bool erase) ;
- virtual bool MacCanFocus() const { return true ; }
-
- virtual bool MacDispatchMouseEvent(wxMouseEvent& event ) ;
- // this should not be overriden in classes above wxWindowMac because it is called from its destructor via DeleteChildren
- virtual void RemoveChild( wxWindowBase *child );
- virtual void MacPaintBorders( int left , int top ) ;
- WXWindow MacGetRootWindow() const ;
+ WXWindow MacGetTopLevelWindowRef() const ;
wxTopLevelWindowMac* MacGetTopLevelWindow() const ;
-
- virtual WXWidget MacGetContainerForEmbedding() ;
-
- virtual long MacGetLeftBorderSize() const ;
- virtual long MacGetRightBorderSize() const ;
- virtual long MacGetTopBorderSize() const ;
- virtual long MacGetBottomBorderSize() const ;
-
- static long MacRemoveBordersFromStyle( long style ) ;
- virtual void MacSuperChangedPosition() ;
- // the absolute coordinates of this item within the toplevel window may have changed
- virtual void MacUpdateDimensions() {}
- // the absolute coortinates of this window's root have changed
- virtual void MacTopLevelWindowChangedPosition() ;
- virtual void MacSuperShown( bool show ) ;
- virtual void MacSuperEnabled( bool enable ) ;
- bool MacIsReallyShown() const ;
- virtual void Update() ;
- // for compatibility
- void MacUpdateImmediately() { Update() ; }
- virtual bool MacSetupCursor( const wxPoint& pt ) ;
-
-// virtual bool MacSetPortDrawingParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindowMac* rootwin ) ;
-// virtual void MacGetPortParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin ) ;
-// virtual void MacGetPortClientParams(Point* localOrigin, Rect* clipRect, WindowRef *window , wxWindowMac** rootwin) ;
- const wxBrush& MacGetBackgroundBrush() ;
- const wxRegion& MacGetVisibleRegion( bool respectChildrenAndSiblings = true ) ;
- bool MacIsWindowScrollbar( const wxScrollBar* sb )
- { return (m_hScrollBar == sb || m_vScrollBar == sb) ; }
- static wxWindowMac* s_lastMouseWindow ;
-private:
+
+ virtual long MacGetLeftBorderSize() const ;
+ virtual long MacGetRightBorderSize() const ;
+ virtual long MacGetTopBorderSize() const ;
+ virtual long MacGetBottomBorderSize() const ;
+
+ virtual void MacSuperChangedPosition() ;
+
+ // absolute coordinates of this window's root have changed
+ virtual void MacTopLevelWindowChangedPosition() ;
+
+ virtual void MacChildAdded() ;
+ virtual void MacVisibilityChanged() ;
+ virtual void MacEnabledStateChanged() ;
+ virtual void MacHiliteChanged() ;
+ virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
+
+ bool MacIsReallyShown() ;
+ bool MacIsReallyEnabled() ;
+ bool MacIsReallyHilited() ;
+
+ bool MacIsUserPane() { return m_macIsUserPane; }
+
+ virtual bool MacSetupCursor( const wxPoint& pt ) ;
+ virtual void MacSetBackgroundBrush( const wxBrush &brush ) ;
+ const wxBrush& MacGetBackgroundBrush() const { return m_macBackgroundBrush ; }
+
+ // return the rectangle that would be visible of this control,
+ // regardless whether controls are hidden
+ // only taking into account clipping by parent windows
+ const wxRect& MacGetClippedClientRect() const ;
+ const wxRect& MacGetClippedRect() const ;
+ const wxRect& MacGetClippedRectWithOuterStructure() const ;
+
+ // returns the visible region of this control in window ie non-client coordinates
+ const wxRegion& MacGetVisibleRegion( bool includeOuterStructures = false ) ;
+
+ // returns true if children have to clipped to the content area
+ // (e.g., scrolled windows)
+ bool MacClipChildren() const { return m_clipChildren ; }
+ void MacSetClipChildren( bool clip ) { m_clipChildren = clip ; }
+
+ // returns true if the grandchildren need to be clipped to the children's content area
+ // (e.g., splitter windows)
+ virtual bool MacClipGrandChildren() const { return false ; }
+ bool MacIsWindowScrollbar( const wxWindow* sb )
+ { return ((wxWindow*)m_hScrollBar == sb || (wxWindow*)m_vScrollBar == sb) ; }
+
+ virtual void MacInstallEventHandler(WXWidget native) ;
+ void MacPostControlCreate(const wxPoint& pos, const wxSize& size) ;
+ wxList& GetSubcontrols() { return m_subControls; }
+ WXEVENTHANDLERREF MacGetControlEventHandler() { return m_macControlEventHandler ; }
+
+#ifndef __WXMAC_OSX__
+ virtual void MacControlUserPaneDrawProc(wxInt16 part) ;
+ virtual wxInt16 MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) ;
+ virtual wxInt16 MacControlUserPaneTrackingProc(wxInt16 x, wxInt16 y, void* actionProc) ;
+ virtual void MacControlUserPaneIdleProc() ;
+ virtual wxInt16 MacControlUserPaneKeyDownProc(wxInt16 keyCode, wxInt16 charCode, wxInt16 modifiers) ;
+ virtual void MacControlUserPaneActivateProc(bool activating) ;
+ virtual wxInt16 MacControlUserPaneFocusProc(wxInt16 action) ;
+ virtual void MacControlUserPaneBackgroundProc(void* info) ;
+#endif
+
+ // translate wxWidgets coords into ones suitable
+ // to be passed to CreateControl calls
+ //
+ // returns true if non-default coords are returned, false otherwise
+ bool MacGetBoundsForControl(const wxPoint& pos,
+ const wxSize& size,
+ int& x, int& y,
+ int& w, int& h , bool adjustForOrigin ) const ;
+
+ // calculates the real window position and size from the native control
+ void MacGetPositionAndSizeFromControl(int& x, int& y,
+ int& w, int& h) const ;
+
+ // gets the inset from every part
+ virtual void MacGetContentAreaInset( int &left , int &top , int &right , int &bottom ) ;
+
+ // visibly flash the current invalid area:
+ // useful for debugging in OSX composited (double-buffered) situation
+ void MacFlashInvalidAreas() ;
+
+ // the 'true' OS level control for this wxWindow
+ wxMacControl* GetPeer() const { return m_peer ; }
+
+#if wxMAC_USE_CORE_GRAPHICS
+ void * MacGetCGContextRef() { return m_cgContextRef ; }
+ void MacSetCGContextRef(void * cg) { m_cgContextRef = cg ; }
+#endif
+
protected:
- wxBrush m_macBackgroundBrush ;
- wxRegion m_macVisibleRegion ;
- int m_x ;
- int m_y ;
- int m_width ;
- int m_height ;
-
- wxScrollBar* m_hScrollBar ;
- wxScrollBar* m_vScrollBar ;
- wxString m_label ;
-
- void MacCreateScrollBars( long style ) ;
- void MacRepositionScrollBars() ;
+ // For controls like radio buttons which are genuinely composite
+ wxList m_subControls;
- bool m_backgroundTransparent ;
+ // number of calls to Freeze() minus number of calls to Thaw()
+ unsigned int m_frozenness;
+
+ // the peer object, allowing for cleaner API support
+ wxMacControl * m_peer ;
+
+#if wxMAC_USE_CORE_GRAPHICS
+ void * m_cgContextRef ;
+#endif
+
+ // cache the clipped rectangles within the window hierarchy
+ void MacUpdateClippedRects() const ;
+
+ mutable bool m_cachedClippedRectValid ;
+ mutable wxRect m_cachedClippedRectWithOuterStructure ;
+ mutable wxRect m_cachedClippedRect ;
+ mutable wxRect m_cachedClippedClientRect ;
+ mutable wxRegion m_cachedClippedRegionWithOuterStructure ;
+ mutable wxRegion m_cachedClippedRegion ;
+ mutable wxRegion m_cachedClippedClientRegion ;
+
+ // true if is is not a native control but a wxWindow control
+ bool m_macIsUserPane ;
+ wxBrush m_macBackgroundBrush ;
+
+ // insets of the mac control from the wx top left corner
+ wxPoint m_macTopLeftInset ;
+ wxPoint m_macBottomRightInset ;
+ wxByte m_macAlpha ;
+
+ wxScrollBar* m_hScrollBar ;
+ wxScrollBar* m_vScrollBar ;
+ wxString m_label ;
+
+ // set to true if we do a sharp clip at the content area of this window
+ // must be dynamic as eg a panel normally is not clipping precisely, but if
+ // it becomes the target window of a scrolled window it has to...
+ bool m_clipChildren ;
+
+ virtual bool MacIsChildOfClientArea( const wxWindow* child ) const ;
+
+ void MacCreateScrollBars( long style ) ;
+ void MacRepositionScrollBars() ;
+ void MacUpdateControlFont() ;
+
+ void MacPropagateVisibilityChanged() ;
+ void MacPropagateHiliteChanged() ;
// implement the base class pure virtuals
+ virtual wxSize DoGetBestSize() const;
+ virtual wxSize DoGetSizeFromClientSize( const wxSize & size ) const;
virtual void DoClientToScreen( int *x, int *y ) const;
virtual void DoScreenToClient( int *x, int *y ) const;
virtual void DoGetPosition( int *x, int *y ) const;
// from both DoSetSize() and DoSetClientSize() and would usually just call
// ::MoveWindow() except for composite controls which will want to arrange
// themselves inside the given rectangle
- virtual void DoMoveWindow(int x, int y, int width, int height);
+ virtual void DoMoveWindow( int x, int y, int width, int height );
+ virtual void DoSetWindowVariant( wxWindowVariant variant );
#if wxUSE_TOOLTIPS
virtual void DoSetToolTip( wxToolTip *tip );
-#endif // wxUSE_TOOLTIPS
+#endif
private:
// common part of all ctors
void Init();
+ WXEVENTHANDLERREF m_macControlEventHandler ;
+
DECLARE_NO_COPY_CLASS(wxWindowMac)
DECLARE_EVENT_TABLE()
};
-#endif
- // _WX_WINDOW_H_
+#endif // _WX_WINDOW_H_