]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk/window.h
wxMouseEvent's coordinates are now relative to client area origin in wxGTK
[wxWidgets.git] / include / wx / gtk / window.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/window.h
3 // Purpose:
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10
11 #ifndef __GTKWINDOWH__
12 #define __GTKWINDOWH__
13
14 #ifdef __GNUG__
15 #pragma interface
16 #endif
17
18 //-----------------------------------------------------------------------------
19 // callback definition for inserting a window (internal)
20 //-----------------------------------------------------------------------------
21
22 class wxWindowGTK;
23 typedef void (*wxInsertChildFunction)( wxWindowGTK*, wxWindowGTK* );
24
25 //-----------------------------------------------------------------------------
26 // wxWindowGTK
27 //-----------------------------------------------------------------------------
28
29 class wxWindowGTK : public wxWindowBase
30 {
31 public:
32 // creating the window
33 // -------------------
34 wxWindowGTK();
35 wxWindowGTK(wxWindow *parent,
36 wxWindowID id,
37 const wxPoint& pos = wxDefaultPosition,
38 const wxSize& size = wxDefaultSize,
39 long style = 0,
40 const wxString& name = wxPanelNameStr);
41 bool Create(wxWindow *parent,
42 wxWindowID id,
43 const wxPoint& pos = wxDefaultPosition,
44 const wxSize& size = wxDefaultSize,
45 long style = 0,
46 const wxString& name = wxPanelNameStr);
47 virtual ~wxWindowGTK();
48
49 // implement base class (pure) virtual methods
50 // -------------------------------------------
51
52 virtual bool Destroy();
53
54 virtual void Raise();
55 virtual void Lower();
56
57 virtual bool Show( bool show = TRUE );
58 virtual bool Enable( bool enable = TRUE );
59
60 virtual bool IsRetained() const;
61
62 virtual void SetFocus();
63 virtual bool AcceptsFocus() const;
64
65 virtual bool Reparent( wxWindowBase *newParent );
66
67 virtual void WarpPointer(int x, int y);
68 virtual void CaptureMouse();
69 virtual void ReleaseMouse();
70
71 virtual void Refresh( bool eraseBackground = TRUE,
72 const wxRect *rect = (const wxRect *) NULL );
73 virtual void Clear();
74
75 virtual bool SetBackgroundColour( const wxColour &colour );
76 virtual bool SetForegroundColour( const wxColour &colour );
77 virtual bool SetCursor( const wxCursor &cursor );
78 virtual bool SetFont( const wxFont &font );
79
80 virtual int GetCharHeight() const;
81 virtual int GetCharWidth() const;
82 virtual void GetTextExtent(const wxString& string,
83 int *x, int *y,
84 int *descent = (int *) NULL,
85 int *externalLeading = (int *) NULL,
86 const wxFont *theFont = (const wxFont *) NULL)
87 const;
88
89 #if wxUSE_MENUS_NATIVE
90 virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
91 #endif // wxUSE_MENUS_NATIVE
92
93 virtual void SetScrollbar( int orient, int pos, int thumbVisible,
94 int range, bool refresh = TRUE );
95 virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
96 virtual int GetScrollPos( int orient ) const;
97 virtual int GetScrollThumb( int orient ) const;
98 virtual int GetScrollRange( int orient ) const;
99 virtual void ScrollWindow( int dx, int dy,
100 const wxRect* rect = (wxRect *) NULL );
101
102 #if wxUSE_DRAG_AND_DROP
103 virtual void SetDropTarget( wxDropTarget *dropTarget );
104 #endif // wxUSE_DRAG_AND_DROP
105
106 // implementation
107 // --------------
108
109 virtual WXWidget GetHandle() const { return m_widget; }
110
111 /* I don't want users to override what's done in idle so everything that
112 has to be done in idle time in order for wxGTK to work is done in
113 OnInternalIdle */
114 virtual void OnInternalIdle();
115
116 /* For compatibility across platforms (not in event table) */
117 void OnIdle(wxIdleEvent& WXUNUSED(event)) {};
118
119 // wxGTK-specific: called recursively by Enable,
120 // to give widgets an oppprtunity to correct their colours after they
121 // have been changed by Enable
122 virtual void OnParentEnable( bool WXUNUSED(enable) ) {};
123
124 /* used by all window classes in the widget creation process */
125 bool PreCreation( wxWindowGTK *parent, const wxPoint &pos, const wxSize &size );
126 void PostCreation();
127
128 /* internal addition of child windows. differs from class
129 to class not by using virtual functions but by using
130 the m_insertCallback */
131 void DoAddChild(wxWindowGTK *child);
132
133 /* the methods below are required because many native widgets
134 are composed of several subwidgets and setting a style for
135 the widget means setting it for all subwidgets as well.
136 also, it is nor clear, which native widget is the top
137 widget where (most of) the input goes. even tooltips have
138 to be applied to all subwidgets. */
139
140 virtual GtkWidget* GetConnectWidget();
141 virtual bool IsOwnGtkWindow( GdkWindow *window );
142 void ConnectWidget( GtkWidget *widget );
143
144 /* creates a new widget style if none is there
145 and sets m_widgetStyle to this value. */
146 GtkStyle *GetWidgetStyle();
147
148 /* called by SetFont() and SetXXXColour etc */
149 void SetWidgetStyle();
150
151 /* overridden in many GTK widgets */
152 virtual void ApplyWidgetStyle();
153
154 #if wxUSE_TOOLTIPS
155 virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip );
156 #endif // wxUSE_TOOLTIPS
157
158 // called from GTK signales handlers. it indicates that
159 // the layouting functions have to be called later on
160 // (i.e. in idle time, implemented in OnInternalIdle() ).
161 void GtkUpdateSize() { m_sizeSet = FALSE; }
162
163 // position and size of the window
164 int m_x, m_y;
165 int m_width, m_height;
166 int m_oldClientWidth,m_oldClientHeight;
167
168 // see the docs in src/gtk/window.cpp
169 GtkWidget *m_widget; // mostly the widget seen by the rest of GTK
170 GtkWidget *m_wxwindow; // mostly the client area as per wxWindows
171
172 // this widget will be queried for GTK's focus events
173 GtkWidget *m_focusWidget;
174
175 #if HAVE_XIM
176 // XIM support for wxWindows
177 GdkIC *m_ic;
178 GdkICAttr *m_icattr;
179 #endif
180
181 // scrolling stuff
182 GtkAdjustment *m_hAdjust,*m_vAdjust;
183 float m_oldHorizontalPos;
184 float m_oldVerticalPos;
185
186 // extra (wxGTK-specific) flags
187 bool m_needParent:1; // ! wxFrame, wxDialog, wxNotebookPage ?
188 bool m_noExpose:1; // wxGLCanvas has its own redrawing
189 bool m_nativeSizeEvent:1; // wxGLCanvas sends wxSizeEvent upon "alloc_size"
190 bool m_hasScrolling:1;
191 bool m_hasVMT:1;
192 bool m_sizeSet:1;
193 bool m_resizing:1;
194 bool m_isStaticBox:1; // faster than IS_KIND_OF
195 bool m_isRadioButton:1; // faster than IS_KIND_OF
196 bool m_isListBox:1; // faster than IS_KIND_OF
197 bool m_isFrame:1; // faster than IS_KIND_OF
198 bool m_acceptsFocus:1; // not wxStaticBox, not wxStaticBitmap etc.
199 bool m_isScrolling;
200 bool m_clipPaintRegion; // TRUE after ScrollWindow()
201 bool m_queuedFullRedraw; // TRUE after DoMoveWindow
202
203 // these are true if the style were set before the widget was realized
204 // (typcally in the constructor) but the actual GTK style must not be set
205 // before the widget has been "realized"
206 bool m_delayedForegroundColour:1;
207 bool m_delayedBackgroundColour:1;
208
209 // contains GTK's widgets internal information about non-default widget
210 // font and colours. we create one for each widget that gets any
211 // non-default attribute set via SetFont() or SetForegroundColour() /
212 // SetBackgroundColour().
213 GtkStyle *m_widgetStyle;
214
215 // C++ has no virtual methods in the constrcutor of any class but we need
216 // different methods of inserting a child window into a wxFrame,
217 // wxMDIFrame, wxNotebook etc. this is the callback that will get used.
218 wxInsertChildFunction m_insertCallback;
219
220 // implement the base class pure virtuals
221 virtual void DoClientToScreen( int *x, int *y ) const;
222 virtual void DoScreenToClient( int *x, int *y ) const;
223 virtual void DoGetPosition( int *x, int *y ) const;
224 virtual void DoGetSize( int *width, int *height ) const;
225 virtual void DoGetClientSize( int *width, int *height ) const;
226 virtual void DoSetSize(int x, int y,
227 int width, int height,
228 int sizeFlags = wxSIZE_AUTO);
229 virtual void DoSetClientSize(int width, int height);
230 virtual void DoMoveWindow(int x, int y, int width, int height);
231
232 #if wxUSE_TOOLTIPS
233 virtual void DoSetToolTip( wxToolTip *tip );
234 #endif // wxUSE_TOOLTIPS
235
236 // common part of all ctors (can't be virtual because called from ctor)
237 void Init();
238
239 private:
240 DECLARE_DYNAMIC_CLASS(wxWindowGTK)
241 DECLARE_NO_COPY_CLASS(wxWindowGTK)
242 };
243
244 extern wxWindow *wxFindFocusedChild(wxWindowGTK *win);
245
246 #endif // __GTKWINDOWH__