]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk/window.h
tons of fixes for wxGTK/Univ - seems to work, more or less, now
[wxWidgets.git] / include / wx / gtk / window.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/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 class wxWindowGTK;
23 typedef void (*wxInsertChildFunction)( wxWindowGTK*, wxWindowGTK* );
24
25 //-----------------------------------------------------------------------------
26 // wxWindowGTK
27 //-----------------------------------------------------------------------------
28
29 class wxWindowGTK : public wxWindowBase
30 {
31 public:
32 // creating the window
33 // -------------------
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);
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);
47 virtual ~wxWindowGTK();
48
49 // implement base class (pure) virtual methods
50 // -------------------------------------------
51 virtual bool Destroy();
52
53 virtual void Raise();
54 virtual void Lower();
55
56 virtual bool Show( bool show = TRUE );
57 virtual bool Enable( bool enable = TRUE );
58
59 virtual bool IsRetained() const;
60
61 virtual void SetFocus();
62 virtual bool AcceptsFocus() const;
63
64 virtual bool Reparent( wxWindowBase *newParent );
65
66 virtual void WarpPointer(int x, int y);
67 virtual void CaptureMouse();
68 virtual void ReleaseMouse();
69
70 virtual void Refresh( bool eraseBackground = TRUE,
71 const wxRect *rect = (const wxRect *) NULL );
72 virtual void Clear();
73
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 );
78
79 virtual int GetCharHeight() const;
80 virtual int GetCharWidth() const;
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;
87
88 #if wxUSE_MENUS
89 virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
90 #endif // wxUSE_MENUS
91
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 );
100
101 #if wxUSE_DRAG_AND_DROP
102 virtual void SetDropTarget( wxDropTarget *dropTarget );
103 #endif // wxUSE_DRAG_AND_DROP
104
105 // implementation
106 // --------------
107
108 virtual WXWidget GetHandle() const { return m_widget; }
109
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 */
113 virtual void OnInternalIdle();
114
115 /* For compatibility across platforms (not in event table) */
116 void OnIdle(wxIdleEvent& WXUNUSED(event)) {};
117
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
123 /* used by all window classes in the widget creation process */
124 bool PreCreation( wxWindowGTK *parent, const wxPoint &pos, const wxSize &size );
125 void PostCreation();
126
127 /* internal addition of child windows. differs from class
128 to class not by using virtual functions but by using
129 the m_insertCallback */
130 void DoAddChild(wxWindowGTK *child);
131
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. */
138
139 virtual GtkWidget* GetConnectWidget();
140 virtual bool IsOwnGtkWindow( GdkWindow *window );
141 void ConnectWidget( GtkWidget *widget );
142
143 /* creates a new widget style if none is there
144 and sets m_widgetStyle to this value. */
145 GtkStyle *GetWidgetStyle();
146
147 /* called by SetFont() and SetXXXColour etc */
148 void SetWidgetStyle();
149
150 /* overridden in many GTK widgets */
151 virtual void ApplyWidgetStyle();
152
153 #if wxUSE_TOOLTIPS
154 virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip );
155 #endif // wxUSE_TOOLTIPS
156
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() ).
160 void GtkUpdateSize() { m_sizeSet = FALSE; }
161
162 // position and size of the window
163 int m_x, m_y;
164 int m_width, m_height;
165 int m_oldClientWidth,m_oldClientHeight;
166
167 /* see the docs in src/gtk/window.cpp */
168 GtkWidget *m_widget;
169 GtkWidget *m_wxwindow;
170
171 #if HAVE_XIM
172 /* XIM support for wxWindows */
173 GdkIC *m_ic;
174 GdkICAttr *m_icattr;
175 #endif
176
177 /* scrolling stuff */
178 GtkAdjustment *m_hAdjust,*m_vAdjust;
179 float m_oldHorizontalPos;
180 float m_oldVerticalPos;
181
182 // extra (wxGTK-specific) flags
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" */
186 bool m_hasScrolling:1;
187 bool m_hasVMT:1;
188 bool m_sizeSet:1;
189 bool m_resizing:1;
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. */
194 bool m_isScrolling;
195 bool m_clipPaintRegion; /* TRUE after ScrollWindow() */
196 bool m_queuedFullRedraw; /* TRUE after DoMoveWindow */
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_delayedForegroundColour:1;
202 bool m_delayedBackgroundColour:1;
203
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().
208 GtkStyle *m_widgetStyle;
209
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.
213 wxInsertChildFunction m_insertCallback;
214
215 // implement the base class pure virtuals
216 virtual void DoClientToScreen( int *x, int *y ) const;
217 virtual void DoScreenToClient( int *x, int *y ) const;
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 virtual void DoMoveWindow(int x, int y, int width, int height);
226
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
234 private:
235 DECLARE_DYNAMIC_CLASS(wxWindowGTK)
236 DECLARE_NO_COPY_CLASS(wxWindowGTK);
237 };
238
239 extern wxWindow *wxFindFocusedChild(wxWindowGTK *win);
240
241 #endif // __GTKWINDOWH__