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