1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/window.h
4 // Author: Robert Roebling
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
11 #ifndef __GTKWINDOWH__
12 #define __GTKWINDOWH__
18 //-----------------------------------------------------------------------------
19 // callback definition for inserting a window (internal)
20 //-----------------------------------------------------------------------------
23 typedef void (*wxInsertChildFunction
)( wxWindowGTK
*, wxWindowGTK
* );
25 //-----------------------------------------------------------------------------
27 //-----------------------------------------------------------------------------
29 class wxWindowGTK
: public wxWindowBase
32 // creating the window
33 // -------------------
35 wxWindowGTK(wxWindow
*parent
,
37 const wxPoint
& pos
= wxDefaultPosition
,
38 const wxSize
& size
= wxDefaultSize
,
40 const wxString
& name
= wxPanelNameStr
);
41 bool Create(wxWindow
*parent
,
43 const wxPoint
& pos
= wxDefaultPosition
,
44 const wxSize
& size
= wxDefaultSize
,
46 const wxString
& name
= wxPanelNameStr
);
47 virtual ~wxWindowGTK();
49 // implement base class (pure) virtual methods
50 // -------------------------------------------
52 virtual bool Destroy();
57 virtual bool Show( bool show
= TRUE
);
58 virtual bool Enable( bool enable
= TRUE
);
60 virtual bool IsRetained() const;
62 virtual void SetFocus();
63 virtual bool AcceptsFocus() const;
65 virtual bool Reparent( wxWindowBase
*newParent
);
67 virtual void WarpPointer(int x
, int y
);
69 virtual void Refresh( bool eraseBackground
= TRUE
,
70 const wxRect
*rect
= (const wxRect
*) NULL
);
73 virtual bool SetBackgroundColour( const wxColour
&colour
);
74 virtual bool SetForegroundColour( const wxColour
&colour
);
75 virtual bool SetCursor( const wxCursor
&cursor
);
76 virtual bool SetFont( const wxFont
&font
);
78 virtual int GetCharHeight() const;
79 virtual int GetCharWidth() const;
80 virtual void GetTextExtent(const wxString
& string
,
82 int *descent
= (int *) NULL
,
83 int *externalLeading
= (int *) NULL
,
84 const wxFont
*theFont
= (const wxFont
*) NULL
)
87 #if wxUSE_MENUS_NATIVE
88 virtual bool DoPopupMenu( wxMenu
*menu
, int x
, int y
);
89 #endif // wxUSE_MENUS_NATIVE
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
);
100 #if wxUSE_DRAG_AND_DROP
101 virtual void SetDropTarget( wxDropTarget
*dropTarget
);
102 #endif // wxUSE_DRAG_AND_DROP
107 virtual WXWidget
GetHandle() const { return m_widget
; }
109 /* I don't want users to override what's done in idle so everything that
110 has to be done in idle time in order for wxGTK to work is done in
112 virtual void OnInternalIdle();
114 /* For compatibility across platforms (not in event table) */
115 void OnIdle(wxIdleEvent
& WXUNUSED(event
)) {};
117 // wxGTK-specific: called recursively by Enable,
118 // to give widgets an oppprtunity to correct their colours after they
119 // have been changed by Enable
120 virtual void OnParentEnable( bool WXUNUSED(enable
) ) {};
122 /* used by all window classes in the widget creation process */
123 bool PreCreation( wxWindowGTK
*parent
, const wxPoint
&pos
, const wxSize
&size
);
126 /* internal addition of child windows. differs from class
127 to class not by using virtual functions but by using
128 the m_insertCallback */
129 void DoAddChild(wxWindowGTK
*child
);
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. */
138 virtual GtkWidget
* GetConnectWidget();
139 virtual bool IsOwnGtkWindow( GdkWindow
*window
);
140 void ConnectWidget( GtkWidget
*widget
);
142 /* creates a new widget style if none is there
143 and sets m_widgetStyle to this value. */
144 GtkStyle
*GetWidgetStyle();
146 /* called by SetFont() and SetXXXColour etc */
147 void SetWidgetStyle();
149 /* overridden in many GTK widgets */
150 virtual void ApplyWidgetStyle();
153 virtual void ApplyToolTip( GtkTooltips
*tips
, const wxChar
*tip
);
154 #endif // wxUSE_TOOLTIPS
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 GtkUpdateSize() { m_sizeSet
= FALSE
; }
161 // position and size of the window
163 int m_width
, m_height
;
164 int m_oldClientWidth
,m_oldClientHeight
;
166 // see the docs in src/gtk/window.cpp
167 GtkWidget
*m_widget
; // mostly the widget seen by the rest of GTK
168 GtkWidget
*m_wxwindow
; // mostly the client area as per wxWindows
170 // this widget will be queried for GTK's focus events
171 GtkWidget
*m_focusWidget
;
174 // XIM support for wxWindows
180 GtkAdjustment
*m_hAdjust
,*m_vAdjust
;
181 float m_oldHorizontalPos
;
182 float m_oldVerticalPos
;
184 // extra (wxGTK-specific) flags
185 bool m_needParent
:1; // ! wxFrame, wxDialog, wxNotebookPage ?
186 bool m_noExpose
:1; // wxGLCanvas has its own redrawing
187 bool m_nativeSizeEvent
:1; // wxGLCanvas sends wxSizeEvent upon "alloc_size"
188 bool m_hasScrolling
:1;
192 bool m_isStaticBox
:1; // faster than IS_KIND_OF
193 bool m_isRadioButton
:1; // faster than IS_KIND_OF
194 bool m_isListBox
:1; // faster than IS_KIND_OF
195 bool m_isFrame
:1; // faster than IS_KIND_OF
196 bool m_acceptsFocus
:1; // not wxStaticBox, not wxStaticBitmap etc.
198 bool m_clipPaintRegion
; // TRUE after ScrollWindow()
199 bool m_queuedFullRedraw
; // TRUE after DoMoveWindow
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"
204 bool m_delayedForegroundColour
:1;
205 bool m_delayedBackgroundColour
:1;
207 // contains GTK's widgets internal information about non-default widget
208 // font and colours. we create one for each widget that gets any
209 // non-default attribute set via SetFont() or SetForegroundColour() /
210 // SetBackgroundColour().
211 GtkStyle
*m_widgetStyle
;
213 // C++ has no virtual methods in the constrcutor of any class but we need
214 // different methods of inserting a child window into a wxFrame,
215 // wxMDIFrame, wxNotebook etc. this is the callback that will get used.
216 wxInsertChildFunction m_insertCallback
;
218 // implement the base class pure virtuals
219 virtual void DoClientToScreen( int *x
, int *y
) const;
220 virtual void DoScreenToClient( int *x
, int *y
) const;
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;
224 virtual void DoSetSize(int x
, int y
,
225 int width
, int height
,
226 int sizeFlags
= wxSIZE_AUTO
);
227 virtual void DoSetClientSize(int width
, int height
);
228 virtual void DoMoveWindow(int x
, int y
, int width
, int height
);
230 virtual void DoCaptureMouse();
231 virtual void DoReleaseMouse();
234 virtual void DoSetToolTip( wxToolTip
*tip
);
235 #endif // wxUSE_TOOLTIPS
237 // common part of all ctors (can't be virtual because called from ctor)
241 DECLARE_DYNAMIC_CLASS(wxWindowGTK
)
242 DECLARE_NO_COPY_CLASS(wxWindowGTK
)
245 extern wxWindow
*wxFindFocusedChild(wxWindowGTK
*win
);
247 #endif // __GTKWINDOWH__