1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        include/wx/mac/carbon/window.h 
   3 // Purpose:     wxWindowMac class 
   4 // Author:      Stefan Csomor 
   8 // Copyright:   (c) Stefan Csomor 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  18 class WXDLLIMPEXP_FWD_CORE wxButton
; 
  19 class WXDLLIMPEXP_FWD_CORE wxScrollBar
; 
  20 class WXDLLIMPEXP_FWD_CORE wxNonOwnedWindow
; 
  22 class WXDLLIMPEXP_FWD_CORE wxMacControl 
; 
  23 class WXDLLIMPEXP_FWD_CORE wxWidgetImpl 
; 
  25 class WXDLLIMPEXP_CORE wxWindowMac
: public wxWindowBase
 
  27     DECLARE_DYNAMIC_CLASS(wxWindowMac
) 
  30     friend class wxPaintDC
; 
  35     wxWindowMac( wxWindowMac 
*parent
, 
  37                 const wxPoint
& pos 
= wxDefaultPosition
, 
  38                 const wxSize
& size 
= wxDefaultSize
, 
  40                 const wxString
& name 
= wxPanelNameStr 
); 
  42     virtual ~wxWindowMac(); 
  44     bool Create( wxWindowMac 
*parent
, 
  46                 const wxPoint
& pos 
= wxDefaultPosition
, 
  47                 const wxSize
& size 
= wxDefaultSize
, 
  49                 const wxString
& name 
= wxPanelNameStr 
); 
  51     // implement base class pure virtuals 
  52     virtual void SetLabel( const wxString
& label 
); 
  53     virtual wxString 
GetLabel() const; 
  58     virtual bool Show( bool show 
= true ); 
  60     virtual bool IsShownOnScreen() const; 
  62     virtual void SetFocus(); 
  64     virtual void WarpPointer( int x
, int y 
); 
  66     virtual void Refresh( bool eraseBackground 
= true, 
  67                           const wxRect 
*rect 
= NULL 
); 
  69     virtual void Update() ; 
  70     virtual void ClearBackground(); 
  72     virtual bool SetCursor( const wxCursor 
&cursor 
); 
  73     virtual bool SetFont( const wxFont 
&font 
); 
  74     virtual bool SetBackgroundColour( const wxColour 
&colour 
); 
  75     virtual bool SetForegroundColour( const wxColour 
&colour 
); 
  77     virtual int GetCharHeight() const; 
  78     virtual int GetCharWidth() const; 
  79     virtual void GetTextExtent( const wxString
& string
, 
  82                                int *externalLeading 
= NULL
, 
  83                                const wxFont 
*theFont 
= NULL 
) 
  86     virtual void DoEnable( bool enable 
); 
  88     virtual bool DoPopupMenu( wxMenu 
*menu
, int x
, int y 
); 
  91     virtual void DoFreeze(); 
  92     virtual void DoThaw(); 
  95     virtual void SetScrollbar( int orient
, int pos
, int thumbVisible
, 
  96                                int range
, bool refresh 
= true ); 
  97     virtual void SetScrollPos( int orient
, int pos
, bool refresh 
= true ); 
  98     virtual int GetScrollPos( int orient 
) const; 
  99     virtual int GetScrollThumb( int orient 
) const; 
 100     virtual int GetScrollRange( int orient 
) const; 
 101     virtual void ScrollWindow( int dx
, int dy
, 
 102                                const wxRect
* rect 
= (wxRect 
*) NULL 
); 
 103     virtual void AlwaysShowScrollbars(bool horz 
= true, bool vert 
= true); 
 104     virtual bool IsScrollbarAlwaysShown(int orient
) const 
 106         return orient 
== wxHORIZONTAL 
? m_hScrollBarAlwaysShown
 
 107                                       : m_vScrollBarAlwaysShown
; 
 110     virtual bool Reparent( wxWindowBase 
*newParent 
); 
 112 #if wxUSE_DRAG_AND_DROP 
 113     virtual void SetDropTarget( wxDropTarget 
*dropTarget 
); 
 116     // Accept files for dragging 
 117     virtual void DragAcceptFiles( bool accept 
); 
 119     // implementation from now on 
 120     // -------------------------- 
 122     void MacClientToRootWindow( int *x 
, int *y 
) const; 
 124     void MacWindowToRootWindow( int *x 
, int *y 
) const; 
 126     void MacRootWindowToWindow( int *x 
, int *y 
) const; 
 128     virtual wxString 
MacGetToolTipString( wxPoint 
&where 
); 
 133     virtual WXWidget 
GetHandle() const; 
 135     virtual bool SetTransparent(wxByte alpha
); 
 136     virtual bool CanSetTransparent(); 
 137     virtual wxByte 
GetTransparent() const ; 
 141     void OnPaint( wxPaintEvent
& event 
); 
 142     void OnNcPaint( wxNcPaintEvent
& event 
); 
 143     void OnEraseBackground(wxEraseEvent
& event 
); 
 144     void OnMouseEvent( wxMouseEvent 
&event 
); 
 146     void MacOnScroll( wxScrollEvent
&event 
); 
 148     virtual bool AcceptsFocus() const; 
 150     virtual bool IsDoubleBuffered() const { return true; } 
 153     static long         MacRemoveBordersFromStyle( long style 
) ; 
 156     void OnInternalIdle(); 
 158     // For implementation purposes: 
 159     // sometimes decorations make the client area smaller 
 160     virtual wxPoint 
GetClientAreaOrigin() const; 
 162     wxWindowMac 
*FindItem(long id
) const; 
 163     wxWindowMac 
*FindItemByHWND(WXHWND hWnd
, bool controlOnly 
= false) const; 
 165     virtual void        MacHandleControlClick( WXWidget control 
, wxInt16 controlpart 
, bool mouseStillDown 
) ; 
 166     virtual bool        MacDoRedraw( void* updatergn 
, long time 
) ; 
 168     // this should not be overriden in classes above wxWindowMac 
 169     // because it is called from its destructor via DeleteChildren 
 170     virtual void        RemoveChild( wxWindowBase 
*child 
); 
 171     virtual void        MacPaintBorders( int left 
, int top 
) ; 
 172     void                MacPaintGrowBox(); 
 174     // invalidates the borders and focus area around the control; 
 175     // must not be virtual as it will be called during destruction 
 176     void                MacInvalidateBorders() ; 
 178     WXWindow            
MacGetTopLevelWindowRef() const ; 
 179     wxNonOwnedWindow
*   MacGetTopLevelWindow() const ; 
 181     virtual long        MacGetLeftBorderSize() const ; 
 182     virtual long        MacGetRightBorderSize() const ; 
 183     virtual long        MacGetTopBorderSize() const ; 
 184     virtual long        MacGetBottomBorderSize() const ; 
 186     virtual void        MacSuperChangedPosition() ; 
 188     // absolute coordinates of this window's root have changed 
 189     virtual void        MacTopLevelWindowChangedPosition() ; 
 191     virtual void        MacChildAdded() ; 
 192     virtual void        MacVisibilityChanged() ; 
 193     virtual void        MacEnabledStateChanged() ; 
 194     virtual void        MacHiliteChanged() ; 
 195     virtual wxInt32     
MacControlHit( WXEVENTHANDLERREF handler 
, WXEVENTREF event 
) ; 
 197     bool                MacIsReallyEnabled() ; 
 198     bool                MacIsReallyHilited() ; 
 200     bool                MacIsUserPane() { return m_macIsUserPane
; } 
 202     virtual bool        MacSetupCursor( const wxPoint
& pt 
) ; 
 204     // return the rectangle that would be visible of this control, 
 205     // regardless whether controls are hidden 
 206     // only taking into account clipping by parent windows 
 207     const wxRect
&       MacGetClippedClientRect() const ; 
 208     const wxRect
&       MacGetClippedRect() const ; 
 209     const wxRect
&       MacGetClippedRectWithOuterStructure() const ; 
 211     // returns the visible region of this control in window ie non-client coordinates 
 212     const wxRegion
&     MacGetVisibleRegion( bool includeOuterStructures 
= false ) ; 
 214     // returns true if children have to clipped to the content area 
 215     // (e.g., scrolled windows) 
 216     bool                MacClipChildren() const { return m_clipChildren 
; } 
 217     void                MacSetClipChildren( bool clip 
) { m_clipChildren 
= clip 
; } 
 219     // returns true if the grandchildren need to be clipped to the children's content area 
 220     // (e.g., splitter windows) 
 221     virtual bool        MacClipGrandChildren() const { return false ; } 
 222     bool                MacIsWindowScrollbar( const wxWindow
* sb 
) const 
 223     { return ((wxWindow
*)m_hScrollBar 
== sb 
|| (wxWindow
*)m_vScrollBar 
== sb
) ; } 
 224     virtual bool IsClientAreaChild(const wxWindow 
*child
) const 
 226         return !MacIsWindowScrollbar(child
) && 
 227                wxWindowBase::IsClientAreaChild(child
); 
 230     void                MacPostControlCreate(const wxPoint
& pos
, const wxSize
& size
) ; 
 231     wxList
&             GetSubcontrols() { return m_subControls
; } 
 233     // translate wxWidgets coords into ones suitable 
 234     // to be passed to CreateControl calls 
 236     // returns true if non-default coords are returned, false otherwise 
 237     bool                MacGetBoundsForControl(const wxPoint
& pos
, 
 240                                            int& w
, int& h 
, bool adjustForOrigin 
) const ; 
 242     // the 'true' OS level control for this wxWindow 
 244     wxMacControl
*       GetPeer() const { return m_peer 
; } 
 246     wxWidgetImpl
*       GetPeer() const { return m_peer 
; } 
 249     void *              MacGetCGContextRef() { return m_cgContextRef 
; } 
 250     void                MacSetCGContextRef(void * cg
) { m_cgContextRef 
= cg 
; } 
 252     // osx specific event handling common for all osx-ports 
 254     virtual bool        HandleClicked( double timestampsec 
); 
 256     // For controls like radio buttons which are genuinely composite 
 257     wxList              m_subControls
; 
 260     // the peer object, allowing for cleaner API support 
 261     wxMacControl 
*       m_peer 
; 
 263     wxWidgetImpl 
*       m_peer 
; 
 265     void *              m_cgContextRef 
; 
 267     // cache the clipped rectangles within the window hierarchy 
 268     void                MacUpdateClippedRects() const ; 
 270     mutable bool        m_cachedClippedRectValid 
; 
 271     mutable wxRect      m_cachedClippedRectWithOuterStructure 
; 
 272     mutable wxRect      m_cachedClippedRect 
; 
 273     mutable wxRect      m_cachedClippedClientRect 
; 
 274     mutable wxRegion    m_cachedClippedRegionWithOuterStructure 
; 
 275     mutable wxRegion    m_cachedClippedRegion 
; 
 276     mutable wxRegion    m_cachedClippedClientRegion 
; 
 278     // true if is is not a native control but a wxWindow control 
 279     bool                m_macIsUserPane 
; 
 281     // insets of the mac control from the wx top left corner 
 282     wxPoint             m_macTopLeftInset 
; 
 283     wxPoint             m_macBottomRightInset 
; 
 286     wxScrollBar
*        m_hScrollBar 
; 
 287     wxScrollBar
*        m_vScrollBar 
; 
 288     bool                m_hScrollBarAlwaysShown
; 
 289     bool                m_vScrollBarAlwaysShown
; 
 292     // set to true if we do a sharp clip at the content area of this window 
 293     // must be dynamic as eg a panel normally is not clipping precisely, but if 
 294     // it becomes the target window of a scrolled window it has to... 
 295     bool                m_clipChildren 
; 
 297     virtual bool        MacIsChildOfClientArea( const wxWindow
* child 
) const ; 
 299     bool                MacHasScrollBarCorner() const; 
 300     void                MacCreateScrollBars( long style 
) ; 
 301     void                MacRepositionScrollBars() ; 
 302     void                MacUpdateControlFont() ; 
 304     // implement the base class pure virtuals 
 305     virtual wxSize 
DoGetBestSize() const; 
 306     virtual wxSize 
DoGetSizeFromClientSize( const wxSize 
& size 
) const; 
 307     virtual void DoClientToScreen( int *x
, int *y 
) const; 
 308     virtual void DoScreenToClient( int *x
, int *y 
) const; 
 309     virtual void DoGetPosition( int *x
, int *y 
) const; 
 310     virtual void DoGetSize( int *width
, int *height 
) const; 
 311     virtual void DoGetClientSize( int *width
, int *height 
) const; 
 312     virtual void DoSetSize(int x
, int y
, 
 313                            int width
, int height
, 
 314                            int sizeFlags 
= wxSIZE_AUTO
); 
 315     virtual void DoSetClientSize(int width
, int height
); 
 317     virtual void DoCaptureMouse(); 
 318     virtual void DoReleaseMouse(); 
 320     // move the window to the specified location and resize it: this is called 
 321     // from both DoSetSize() and DoSetClientSize() and would usually just call 
 322     // ::MoveWindow() except for composite controls which will want to arrange 
 323     // themselves inside the given rectangle 
 324     virtual void DoMoveWindow( int x
, int y
, int width
, int height 
); 
 325     virtual void DoSetWindowVariant( wxWindowVariant variant 
); 
 328     virtual void DoSetToolTip( wxToolTip 
*tip 
); 
 332     // common part of all ctors 
 335     // show/hide scrollbars as needed, common part of SetScrollbar() and 
 336     // AlwaysShowScrollbars() 
 337     void DoUpdateScrollbarVisibility(); 
 340     DECLARE_NO_COPY_CLASS(wxWindowMac
) 
 341     DECLARE_EVENT_TABLE() 
 344 #endif // _WX_WINDOW_H_