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