]>
Commit | Line | Data |
---|---|---|
8cf73271 SC |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: window.h | |
3 | // Purpose: wxWindowMac class | |
4 | // Author: Stefan Csomor | |
5 | // Modified by: | |
6 | // Created: 1998-01-01 | |
7 | // RCS-ID: $Id$ | |
8 | // Copyright: (c) Stefan Csomor | |
65571936 | 9 | // Licence: wxWindows licence |
8cf73271 SC |
10 | ///////////////////////////////////////////////////////////////////////////// |
11 | ||
12 | #ifndef _WX_WINDOW_H_ | |
13 | #define _WX_WINDOW_H_ | |
14 | ||
15 | #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) | |
16 | #pragma interface "window.h" | |
17 | #endif | |
18 | ||
19 | #include "wx/brush.h" | |
20 | ||
21 | // --------------------------------------------------------------------------- | |
22 | // forward declarations | |
23 | // --------------------------------------------------------------------------- | |
24 | ||
25 | class WXDLLEXPORT wxButton; | |
26 | class WXDLLEXPORT wxScrollBar; | |
27 | class WXDLLEXPORT wxTopLevelWindowMac; | |
28 | ||
29 | // --------------------------------------------------------------------------- | |
30 | // constants | |
31 | // --------------------------------------------------------------------------- | |
32 | ||
33 | class WXDLLEXPORT wxWindowMac: public wxWindowBase | |
34 | { | |
35 | DECLARE_DYNAMIC_CLASS(wxWindowMac) | |
36 | ||
37 | friend class wxDC; | |
38 | friend class wxPaintDC; | |
39 | ||
40 | public: | |
41 | ||
42 | wxWindowMac() | |
4f305456 | 43 | { Init(); } |
8cf73271 SC |
44 | |
45 | wxWindowMac(wxWindowMac *parent, | |
46 | wxWindowID id, | |
47 | const wxPoint& pos = wxDefaultPosition, | |
48 | const wxSize& size = wxDefaultSize, | |
49 | long style = 0, | |
50 | const wxString& name = wxPanelNameStr) | |
51 | { | |
52 | Init(); | |
53 | Create(parent, id, pos, size, style, name); | |
54 | } | |
55 | ||
56 | virtual ~wxWindowMac(); | |
57 | ||
58 | bool Create(wxWindowMac *parent, | |
59 | wxWindowID id, | |
60 | const wxPoint& pos = wxDefaultPosition, | |
61 | const wxSize& size = wxDefaultSize, | |
62 | long style = 0, | |
63 | const wxString& name = wxPanelNameStr); | |
64 | ||
65 | ||
66 | // implement base class pure virtuals | |
67 | virtual void SetTitle( const wxString& title); | |
68 | virtual wxString GetTitle() const; | |
69 | ||
70 | virtual void Raise(); | |
71 | virtual void Lower(); | |
72 | ||
73 | virtual bool Show( bool show = TRUE ); | |
74 | virtual bool Enable( bool enable = TRUE ); | |
75 | ||
76 | virtual void SetFocus(); | |
77 | ||
78 | virtual void WarpPointer(int x, int y); | |
79 | ||
80 | virtual void Refresh( bool eraseBackground = TRUE, | |
81 | const wxRect *rect = (const wxRect *) NULL ); | |
79392158 SC |
82 | virtual void Freeze() ; |
83 | virtual void Thaw() ; | |
8cf73271 SC |
84 | |
85 | virtual bool SetCursor( const wxCursor &cursor ); | |
4f305456 SC |
86 | virtual bool SetFont( const wxFont &font ) ; |
87 | virtual bool SetBackgroundColour( const wxColour &colour ); | |
88 | virtual bool SetForegroundColour( const wxColour &colour ); | |
89 | ||
8cf73271 SC |
90 | virtual int GetCharHeight() const; |
91 | virtual int GetCharWidth() const; | |
92 | virtual void GetTextExtent(const wxString& string, | |
93 | int *x, int *y, | |
94 | int *descent = (int *) NULL, | |
95 | int *externalLeading = (int *) NULL, | |
96 | const wxFont *theFont = (const wxFont *) NULL) | |
97 | const; | |
98 | ||
99 | virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); | |
100 | ||
101 | virtual void SetScrollbar( int orient, int pos, int thumbVisible, | |
102 | int range, bool refresh = TRUE ); | |
103 | virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE ); | |
104 | virtual int GetScrollPos( int orient ) const; | |
105 | virtual int GetScrollThumb( int orient ) const; | |
106 | virtual int GetScrollRange( int orient ) const; | |
107 | virtual void ScrollWindow( int dx, int dy, | |
108 | const wxRect* rect = (wxRect *) NULL ); | |
109 | ||
110 | #if wxUSE_DRAG_AND_DROP | |
111 | virtual void SetDropTarget( wxDropTarget *dropTarget ); | |
112 | #endif // wxUSE_DRAG_AND_DROP | |
113 | ||
114 | // Accept files for dragging | |
115 | virtual void DragAcceptFiles(bool accept); | |
116 | ||
8cf73271 SC |
117 | // implementation from now on |
118 | // -------------------------- | |
119 | ||
120 | void MacClientToRootWindow( int *x , int *y ) const ; | |
121 | void MacRootWindowToClient( int *x , int *y ) const ; | |
4f305456 | 122 | |
8cf73271 | 123 | void MacWindowToRootWindow( int *x , int *y ) const ; |
4f305456 SC |
124 | void MacWindowToRootWindow( short *x , short *y ) const ; |
125 | ||
8cf73271 | 126 | void MacRootWindowToWindow( int *x , int *y ) const ; |
4f305456 | 127 | void MacRootWindowToWindow( short *x , short *y ) const ; |
8cf73271 SC |
128 | |
129 | virtual wxString MacGetToolTipString( wxPoint &where ) ; | |
130 | ||
131 | // simple accessors | |
132 | // ---------------- | |
133 | ||
4f305456 | 134 | virtual WXWidget GetHandle() const { return m_macControl ; } |
8cf73271 | 135 | |
4f305456 | 136 | #if WXWIN_COMPATIBILITY_2_4 |
8cf73271 SC |
137 | bool GetTransparentBackground() const { return m_backgroundTransparent; } |
138 | void SetTransparent(bool t = TRUE) { m_backgroundTransparent = t; } | |
4f305456 | 139 | #endif |
8cf73271 SC |
140 | |
141 | // event handlers | |
142 | // -------------- | |
143 | void OnSetFocus(wxFocusEvent& event) ; | |
144 | void OnNcPaint(wxNcPaintEvent& event); | |
145 | void OnEraseBackground(wxEraseEvent& event); | |
146 | void OnMouseEvent( wxMouseEvent &event ) ; | |
147 | ||
148 | void MacOnScroll(wxScrollEvent&event ) ; | |
149 | ||
150 | bool AcceptsFocus() const ; | |
151 | ||
152 | public: | |
153 | void OnInternalIdle(); | |
154 | ||
155 | // For implementation purposes - sometimes decorations make the client area | |
156 | // smaller | |
157 | virtual wxPoint GetClientAreaOrigin() const; | |
158 | ||
159 | wxWindowMac *FindItem(long id) const; | |
160 | wxWindowMac *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const; | |
161 | ||
8cf73271 | 162 | public: |
4f305456 SC |
163 | virtual void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ; |
164 | virtual bool MacDoRedraw( WXHRGN updatergn , long time ) ; | |
165 | virtual void MacRedraw( WXHRGN updatergn , long time , bool erase) ; | |
166 | virtual bool MacCanFocus() const ; | |
8cf73271 | 167 | |
8cf73271 | 168 | // this should not be overriden in classes above wxWindowMac because it is called from its destructor via DeleteChildren |
4f305456 SC |
169 | virtual void RemoveChild( wxWindowBase *child ); |
170 | virtual void MacPaintBorders( int left , int top ) ; | |
171 | WXWindow MacGetTopLevelWindowRef() const ; | |
8cf73271 SC |
172 | wxTopLevelWindowMac* MacGetTopLevelWindow() const ; |
173 | ||
4f305456 SC |
174 | virtual long MacGetLeftBorderSize() const ; |
175 | virtual long MacGetRightBorderSize() const ; | |
176 | virtual long MacGetTopBorderSize() const ; | |
177 | virtual long MacGetBottomBorderSize() const ; | |
8cf73271 | 178 | |
4f305456 SC |
179 | static long MacRemoveBordersFromStyle( long style ) ; |
180 | ||
181 | virtual void MacSuperChangedPosition() ; | |
8cf73271 | 182 | // the absolute coortinates of this window's root have changed |
4f305456 SC |
183 | virtual void MacTopLevelWindowChangedPosition() ; |
184 | ||
185 | virtual void MacVisibilityChanged() ; | |
186 | virtual void MacEnabledStateChanged() ; | |
8ab50549 | 187 | virtual void MacHiliteChanged() ; |
336a6aba | 188 | virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ; |
4f305456 SC |
189 | |
190 | bool MacIsReallyShown() ; | |
191 | bool MacIsReallyEnabled() ; | |
8ab50549 | 192 | bool MacIsReallyHilited() ; |
4f305456 SC |
193 | |
194 | bool MacIsUserPane() { return m_macIsUserPane; } | |
195 | ||
196 | virtual void Update() ; | |
197 | virtual bool MacSetupCursor( const wxPoint& pt ) ; | |
8cf73271 | 198 | |
4f305456 SC |
199 | virtual void MacSetBackgroundBrush( const wxBrush &brush ) { m_macBackgroundBrush = brush ; } |
200 | const wxBrush& MacGetBackgroundBrush() const { return m_macBackgroundBrush ; } | |
201 | ||
202 | // returns the visible region of this control in window ie non-client coordinates | |
203 | ||
204 | wxRegion MacGetVisibleRegion( bool includeOuterStructures = false ) ; | |
205 | bool MacIsWindowScrollbar( const wxScrollBar* sb ) | |
8cf73271 | 206 | { return (m_hScrollBar == sb || m_vScrollBar == sb) ; } |
4f305456 SC |
207 | |
208 | wxList& GetSubcontrols() { return m_subControls; } | |
209 | virtual void MacInstallEventHandler() ; | |
210 | virtual void MacRedrawControl(); | |
211 | WXEVENTHANDLERREF MacGetControlEventHandler() { return m_macControlEventHandler ; } | |
212 | void MacPostControlCreate(const wxPoint& pos, const wxSize& size) ; | |
213 | ||
214 | virtual void MacControlUserPaneDrawProc(wxInt16 part) ; | |
215 | virtual wxInt16 MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) ; | |
216 | virtual wxInt16 MacControlUserPaneTrackingProc(wxInt16 x, wxInt16 y, void* actionProc) ; | |
217 | virtual void MacControlUserPaneIdleProc() ; | |
218 | virtual wxInt16 MacControlUserPaneKeyDownProc(wxInt16 keyCode, wxInt16 charCode, wxInt16 modifiers) ; | |
219 | virtual void MacControlUserPaneActivateProc(bool activating) ; | |
220 | virtual wxInt16 MacControlUserPaneFocusProc(wxInt16 action) ; | |
221 | virtual void MacControlUserPaneBackgroundProc(void* info) ; | |
222 | ||
77ffb593 | 223 | // translate wxWidgets coords into ones suitable to be passed to |
4f305456 SC |
224 | // the CreateControl calls |
225 | // | |
226 | // returns TRUE if non default coords are returned, FALSE otherwise | |
227 | bool MacGetBoundsForControl(const wxPoint& pos, | |
228 | const wxSize& size, | |
229 | int& x, int& y, | |
79392158 | 230 | int& w, int& h , bool adjustForOrigin ) const ; |
4f305456 SC |
231 | // calculates the real window position and size from the native control |
232 | void MacGetPositionAndSizeFromControl(int& x, int& y, | |
233 | int& w, int& h) const ; | |
f5ea731f SC |
234 | // gets the inset from every part |
235 | virtual void MacGetContentAreaInset( int &left , int &top , int &right , int &bottom ) ; | |
236 | ||
8d4c4868 SC |
237 | // flash the current invalid area, useful for debugging in OSX double buffered situation |
238 | void MacFlashInvalidAreas() ; | |
239 | ||
8cf73271 | 240 | protected: |
4f305456 SC |
241 | // For controls like radiobuttons which are really composite |
242 | wxList m_subControls; | |
79392158 SC |
243 | // number of calls to Freeze() minus number of calls to Thaw() |
244 | unsigned int m_frozenness; | |
ed8a0852 | 245 | // the true native ControlRef / = HIViewRef on OSX |
4f305456 | 246 | WXWidget m_macControl ; |
ed8a0852 | 247 | // true if is is not a native control but a wxWindow control |
4f305456 SC |
248 | bool m_macIsUserPane ; |
249 | wxBrush m_macBackgroundBrush ; | |
ed8a0852 SC |
250 | // topleft inset of the mac control from the wx top left corner |
251 | wxPoint m_macTopLeftInset ; | |
252 | // bottom right inset of the mac control from the wx bottom right corner | |
253 | wxPoint m_macBottomRightInset ; | |
8cf73271 | 254 | |
4f305456 SC |
255 | wxScrollBar* m_hScrollBar ; |
256 | wxScrollBar* m_vScrollBar ; | |
257 | wxString m_label ; | |
8cf73271 | 258 | |
4f305456 SC |
259 | void MacCreateScrollBars( long style ) ; |
260 | void MacRepositionScrollBars() ; | |
261 | void MacUpdateControlFont() ; | |
8ab50549 | 262 | |
4f305456 SC |
263 | void MacPropagateVisibilityChanged() ; |
264 | void MacPropagateEnabledStateChanged() ; | |
8ab50549 | 265 | void MacPropagateHiliteChanged() ; |
4f305456 | 266 | |
8d4c4868 | 267 | |
4f305456 | 268 | #if WXWIN_COMPATIBILITY_2_4 |
8cf73271 | 269 | bool m_backgroundTransparent ; |
4f305456 | 270 | #endif |
8cf73271 SC |
271 | |
272 | // implement the base class pure virtuals | |
4f305456 SC |
273 | virtual wxSize DoGetBestSize() const; |
274 | virtual wxSize DoGetSizeFromClientSize( const wxSize & size ) const; | |
8cf73271 SC |
275 | virtual void DoClientToScreen( int *x, int *y ) const; |
276 | virtual void DoScreenToClient( int *x, int *y ) const; | |
277 | virtual void DoGetPosition( int *x, int *y ) const; | |
278 | virtual void DoGetSize( int *width, int *height ) const; | |
279 | virtual void DoGetClientSize( int *width, int *height ) const; | |
280 | virtual void DoSetSize(int x, int y, | |
281 | int width, int height, | |
282 | int sizeFlags = wxSIZE_AUTO); | |
283 | virtual void DoSetClientSize(int width, int height); | |
284 | ||
285 | virtual void DoCaptureMouse(); | |
286 | virtual void DoReleaseMouse(); | |
287 | ||
288 | // move the window to the specified location and resize it: this is called | |
289 | // from both DoSetSize() and DoSetClientSize() and would usually just call | |
290 | // ::MoveWindow() except for composite controls which will want to arrange | |
291 | // themselves inside the given rectangle | |
292 | virtual void DoMoveWindow(int x, int y, int width, int height); | |
4f305456 SC |
293 | virtual void DoSetWindowVariant( wxWindowVariant variant ) ; |
294 | ||
8cf73271 SC |
295 | |
296 | #if wxUSE_TOOLTIPS | |
297 | virtual void DoSetToolTip( wxToolTip *tip ); | |
298 | #endif // wxUSE_TOOLTIPS | |
299 | ||
4f305456 SC |
300 | private : |
301 | ||
8cf73271 SC |
302 | private: |
303 | // common part of all ctors | |
304 | void Init(); | |
305 | ||
4f305456 SC |
306 | WXEVENTHANDLERREF m_macControlEventHandler ; |
307 | ||
308 | ||
8cf73271 SC |
309 | DECLARE_NO_COPY_CLASS(wxWindowMac) |
310 | DECLARE_EVENT_TABLE() | |
311 | }; | |
312 | ||
313 | #endif | |
314 | // _WX_WINDOW_H_ |