]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk/window.h
4c6fc6fa8f5b64974b6e44ef1684255c9e45163c
[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 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); }
95
96 virtual bool PopupMenu( wxMenu *menu, int x, int y );
97
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 );
106
107 #if wxUSE_DRAG_AND_DROP
108 virtual void SetDropTarget( wxDropTarget *dropTarget );
109 #endif // wxUSE_DRAG_AND_DROP
110
111 // implementation
112 // --------------
113
114 virtual WXWidget GetHandle() const { return m_widget; }
115
116 // also sets the global flag
117 void SetScrolling(bool scroll);
118
119 bool HasScrolling() const { return m_hasScrolling; }
120 bool IsScrolling() const { return m_isScrolling; }
121
122 /* I don't want users to override what's done in idle so everything that
123 has to be done in idle time in order for wxGTK to work is done in
124 OnInternalIdle */
125 virtual void OnInternalIdle();
126
127 /* For compatibility across platforms (not in event table) */
128 void OnIdle(wxIdleEvent& WXUNUSED(event)) {};
129
130 /* used by all classes in the widget creation process */
131 void PreCreation( wxWindow *parent, wxWindowID id, const wxPoint &pos,
132 const wxSize &size, long style, const wxString &name );
133 void PostCreation();
134
135 void InsertChild(wxWindow *child) { (*m_insertCallback)(this, child); }
136 void DoAddChild(wxWindow *child) { AddChild(child); InsertChild(child); }
137
138 /* the methods below are required because many native widgets
139 are composed of several subwidgets and setting a style for
140 the widget means setting it for all subwidgets as well.
141 also, it is nor clear, which native widget is the top
142 widget where (most of) the input goes. even tooltips have
143 to be applied to all subwidgets. */
144
145 virtual GtkWidget* GetConnectWidget();
146 virtual bool IsOwnGtkWindow( GdkWindow *window );
147 void ConnectWidget( GtkWidget *widget );
148
149 // creates a new widget style if none is there
150 // and sets m_widgetStyle to this value.
151 GtkStyle *GetWidgetStyle();
152
153 // called by SetFont() and SetXXXColour etc
154 void SetWidgetStyle();
155
156 // overridden in many GTK widgets
157 virtual void ApplyWidgetStyle();
158
159 #if wxUSE_TOOLTIPS
160 virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip );
161 #endif // wxUSE_TOOLTIPS
162
163 // called from GTK signales handlers. it indicates that
164 // the layouting functions have to be called later on
165 // (i.e. in idle time, implemented in OnInternalIdle() ).
166 void UpdateSize() { m_sizeSet = FALSE; }
167
168 // position and size of the window
169 int m_x, m_y;
170 int m_width, m_height;
171
172 // see the docs in src/gtk/window.cpp
173 GtkWidget *m_widget;
174 GtkWidget *m_wxwindow;
175
176 // scrolling stuff
177 GtkAdjustment *m_hAdjust,*m_vAdjust;
178 float m_oldHorizontalPos;
179 float m_oldVerticalPos;
180
181 // we need an extra XGC flag set to get exposed
182 // events from overlapping children upon moving
183 // them. this flag will be set in this GC and
184 // the GC will be used in wxWindow::ScrollWindow().
185 GdkGC *m_scrollGC;
186
187 // extra (wxGTK-specific) flags
188 bool m_needParent:1; /* ! wxFrame, wxDialog, wxNotebookPage ? */
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;
194 bool m_isStaticBox:1; /* faster than IS_KIND_OF */
195 bool m_isFrame:1; /* faster than IS_KIND_OF */
196 bool m_acceptsFocus:1; /* ! wxStaticBox etc. */
197
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"
201 bool m_delayedFont:1;
202 bool m_delayedForegroundColour:1;
203 bool m_delayedBackgroundColour:1;
204 bool m_delayedCursor:1;
205
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().
210 GtkStyle *m_widgetStyle;
211
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.
215 wxInsertChildFunction m_insertCallback;
216
217 // implement the base class pure virtuals
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;
221 virtual void DoSetSize(int x, int y,
222 int width, int height,
223 int sizeFlags = wxSIZE_AUTO);
224 virtual void DoSetClientSize(int width, int height);
225
226 #if wxUSE_TOOLTIPS
227 virtual void DoSetToolTip( wxToolTip *tip );
228 #endif // wxUSE_TOOLTIPS
229
230 // common part of all ctors (can't be virtual because called from ctor)
231 void Init();
232
233 private:
234 DECLARE_NO_COPY_CLASS(wxWindow);
235 };
236
237 #endif // __GTKWINDOWH__