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