]> git.saurik.com Git - wxWidgets.git/blame - include/wx/gtk1/window.h
Added
[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
f03fc89f 65 virtual bool Reparent( wxWindow *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
f03fc89f
VZ
89 virtual void ClientToScreen( int *x, int *y ) const;
90 virtual void ScreenToClient( int *x, int *y ) const;
7af6f327
RD
91 wxPoint ClientToScreen(const wxPoint& pt) const
92 { int x = pt.x; int y = pt.y; ClientToScreen(& x, & y); return wxPoint(x, y); }
93 wxPoint ScreenToClient(const wxPoint& pt) const
94 { int x = pt.x; int y = pt.y; ScreenToClient(& x, & y); return wxPoint(x, y); }
8bbe427f 95
f03fc89f 96 virtual bool PopupMenu( wxMenu *menu, int x, int y );
8bbe427f 97
f03fc89f
VZ
98 virtual void SetScrollbar( int orient, int pos, int thumbVisible,
99 int range, bool refresh = TRUE );
100 virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
101 virtual int GetScrollPos( int orient ) const;
102 virtual int GetScrollThumb( int orient ) const;
103 virtual int GetScrollRange( int orient ) const;
104 virtual void ScrollWindow( int dx, int dy,
105 const wxRect* rect = (wxRect *) NULL );
8bbe427f 106
f03fc89f
VZ
107#if wxUSE_DRAG_AND_DROP
108 virtual void SetDropTarget( wxDropTarget *dropTarget );
109#endif // wxUSE_DRAG_AND_DROP
8bbe427f 110
f03fc89f
VZ
111 // implementation
112 // --------------
c801d85f 113
d7c24517
VZ
114 virtual WXWidget GetHandle() const { return m_widget; }
115
f03fc89f 116 // wxWindows callbacks
bfc6fde4 117 void OnKeyDown( wxKeyEvent &event );
aed8df38 118
f03fc89f
VZ
119 // also sets the global flag
120 void SetScrolling(bool scroll);
8bbe427f 121
f03fc89f
VZ
122 bool HasScrolling() const { return m_hasScrolling; }
123 bool IsScrolling() const { return m_isScrolling; }
301cd871 124
ab2b3dd4
RR
125 /* I don't want users to override what's done in idle so everything that
126 has to be done in idle time in order for wxGTK to work is done in
127 OnInternalIdle */
bfc6fde4 128 virtual void OnInternalIdle();
ff8bfdbb 129
f362b96d 130 /* For compatibility across platforms (not in event table) */
20e85460
JS
131 void OnIdle(wxIdleEvent& WXUNUSED(event)) {};
132
bfc6fde4 133 /* used by all classes in the widget creation process */
bfc6fde4
VZ
134 void PreCreation( wxWindow *parent, wxWindowID id, const wxPoint &pos,
135 const wxSize &size, long style, const wxString &name );
136 void PostCreation();
ff8bfdbb 137
f03fc89f
VZ
138 void InsertChild(wxWindow *child) { (*m_insertCallback)(this, child); }
139 void DoAddChild(wxWindow *child) { AddChild(child); InsertChild(child); }
140
bfc6fde4
VZ
141 /* the methods below are required because many native widgets
142 are composed of several subwidgets and setting a style for
143 the widget means setting it for all subwidgets as well.
144 also, it is nor clear, which native widget is the top
145 widget where (most of) the input goes. even tooltips have
146 to be applied to all subwidgets. */
ff8bfdbb 147
bfc6fde4
VZ
148 virtual GtkWidget* GetConnectWidget();
149 virtual bool IsOwnGtkWindow( GdkWindow *window );
150 void ConnectWidget( GtkWidget *widget );
8bbe427f 151
739730ca
RR
152 // creates a new widget style if none is there
153 // and sets m_widgetStyle to this value.
bfc6fde4 154 GtkStyle *GetWidgetStyle();
7af6f327 155
739730ca 156 // called by SetFont() and SetXXXColour etc
bfc6fde4 157 void SetWidgetStyle();
7af6f327 158
739730ca 159 // overridden in many GTK widgets
bfc6fde4 160 virtual void ApplyWidgetStyle();
ff8bfdbb
VZ
161
162#if wxUSE_TOOLTIPS
74ce55e9 163 virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip );
ff8bfdbb 164#endif // wxUSE_TOOLTIPS
301cd871 165
739730ca
RR
166 // called from GTK signales handlers. it indicates that
167 // the layouting functions have to be called later on
168 // (i.e. in idle time, implemented in OnInternalIdle() ).
f03fc89f 169 void UpdateSize() { m_sizeSet = FALSE; }
ff8bfdbb 170
f03fc89f
VZ
171 // position and size of the window
172 int m_x, m_y;
173 int m_width, m_height;
bcf1fa6b 174
f03fc89f 175 // see the docs in src/gtk/window.cpp
a2053b27 176 GtkWidget *m_widget;
bfc6fde4 177 GtkWidget *m_wxwindow;
f03fc89f
VZ
178
179 // scrolling stuff
bfc6fde4 180 GtkAdjustment *m_hAdjust,*m_vAdjust;
739730ca
RR
181 float m_oldHorizontalPos;
182 float m_oldVerticalPos;
183
184 // we need an extra XGC flag set to get exposed
185 // events from overlapping children upon moving
186 // them. this flag will be set in this GC and
187 // the GC will be used in wxWindow::ScrollWindow().
bfc6fde4 188 GdkGC *m_scrollGC;
bcf1fa6b 189
f03fc89f
VZ
190 // extra (wxGTK-specific) flags
191 bool m_needParent:1; /* ! wxFrame, wxDialog, wxNotebookPage ? */
192 bool m_hasScrolling:1;
193 bool m_isScrolling:1;
194 bool m_hasVMT:1;
195 bool m_sizeSet:1;
196 bool m_resizing:1;
197 bool m_isStaticBox:1; /* faster than IS_KIND_OF */
198 bool m_isFrame:1; /* faster than IS_KIND_OF */
199 bool m_acceptsFocus:1; /* ! wxStaticBox etc. */
7af6f327 200
d7c24517
VZ
201 // these are true if the style were set before the widget was realized
202 // (typcally in the constructor) but the actual GTK style must not be set
203 // before the widget has been "realized"
739730ca
RR
204 bool m_delayedFont:1;
205 bool m_delayedForegroundColour:1;
206 bool m_delayedBackgroundColour:1;
207 bool m_delayedCursor:1;
208
d7c24517
VZ
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().
f03fc89f 213 GtkStyle *m_widgetStyle;
bfc6fde4 214
d7c24517
VZ
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.
f03fc89f 218 wxInsertChildFunction m_insertCallback;
68995f26 219
f03fc89f
VZ
220 // implement the base class pure virtuals
221 virtual void DoGetPosition( int *x, int *y ) const;
222 virtual void DoGetSize( int *width, int *height ) const;
223 virtual void DoGetClientSize( int *width, int *height ) const;
bfc6fde4
VZ
224 virtual void DoSetSize(int x, int y,
225 int width, int height,
226 int sizeFlags = wxSIZE_AUTO);
bfc6fde4 227 virtual void DoSetClientSize(int width, int height);
aed8df38 228
f03fc89f
VZ
229#if wxUSE_TOOLTIPS
230 virtual void DoSetToolTip( wxToolTip *tip );
231#endif // wxUSE_TOOLTIPS
232
233 // common part of all ctors (can't be virtual because called from ctor)
234 void Init();
235
68dda785 236private:
a23fd0e1 237 DECLARE_NO_COPY_CLASS(wxWindow);
bfc6fde4 238 DECLARE_EVENT_TABLE()
c801d85f
KB
239};
240
241#endif // __GTKWINDOWH__