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