1 /////////////////////////////////////////////////////////////////////////////
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 //-----------------------------------------------------------------------------
22 typedef void (*wxInsertChildFunction
)( wxWindow
*, wxWindow
* );
24 //-----------------------------------------------------------------------------
26 //-----------------------------------------------------------------------------
28 class wxWindow
: public wxWindowBase
30 DECLARE_DYNAMIC_CLASS(wxWindow
)
33 // creating the window
34 // -------------------
36 wxWindow(wxWindow
*parent
,
38 const wxPoint
& pos
= wxDefaultPosition
,
39 const wxSize
& size
= wxDefaultSize
,
41 const wxString
& name
= wxPanelNameStr
);
42 bool Create(wxWindow
*parent
,
44 const wxPoint
& pos
= wxDefaultPosition
,
45 const wxSize
& size
= wxDefaultSize
,
47 const wxString
& name
= wxPanelNameStr
);
50 // implement base class (pure) virtual methods
51 // -------------------------------------------
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( wxWindow
*newParent
);
67 virtual void WarpPointer(int x
, int y
);
68 virtual void CaptureMouse();
69 virtual void ReleaseMouse();
71 virtual void Refresh( bool eraseBackground
= TRUE
,
72 const wxRect
*rect
= (const wxRect
*) NULL
);
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
);
80 virtual int GetCharHeight() const;
81 virtual int GetCharWidth() const;
82 virtual void GetTextExtent(const wxString
& string
,
84 int *descent
= (int *) NULL
,
85 int *externalLeading
= (int *) NULL
,
86 const wxFont
*theFont
= (const wxFont
*) NULL
)
89 virtual bool DoPopupMenu( wxMenu
*menu
, int x
, int y
);
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 // also sets the global flag
110 void SetScrolling(bool scroll
);
112 bool HasScrolling() const { return m_hasScrolling
; }
113 bool IsScrolling() const { return m_isScrolling
; }
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
118 virtual void OnInternalIdle();
120 /* For compatibility across platforms (not in event table) */
121 void OnIdle(wxIdleEvent
& WXUNUSED(event
)) {};
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
);
128 /* internal addition of child windows. differs from class
129 to class not by using virtual functions but by using
130 the m_insertCallback */
131 void DoAddChild(wxWindow
*child
);
133 /* the methods below are required because many native widgets
134 are composed of several subwidgets and setting a style for
135 the widget means setting it for all subwidgets as well.
136 also, it is nor clear, which native widget is the top
137 widget where (most of) the input goes. even tooltips have
138 to be applied to all subwidgets. */
140 virtual GtkWidget
* GetConnectWidget();
141 virtual bool IsOwnGtkWindow( GdkWindow
*window
);
142 void ConnectWidget( GtkWidget
*widget
);
144 /* creates a new widget style if none is there
145 and sets m_widgetStyle to this value. */
146 GtkStyle
*GetWidgetStyle();
148 /* called by SetFont() and SetXXXColour etc */
149 void SetWidgetStyle();
151 /* overridden in many GTK widgets */
152 virtual void ApplyWidgetStyle();
155 virtual void ApplyToolTip( GtkTooltips
*tips
, const wxChar
*tip
);
156 #endif // wxUSE_TOOLTIPS
158 // called from GTK signales handlers. it indicates that
159 // the layouting functions have to be called later on
160 // (i.e. in idle time, implemented in OnInternalIdle() ).
161 void UpdateSize() { m_sizeSet
= FALSE
; }
163 // position and size of the window
165 int m_width
, m_height
;
167 /* see the docs in src/gtk/window.cpp */
169 GtkWidget
*m_wxwindow
;
171 /* scrolling stuff */
172 GtkAdjustment
*m_hAdjust
,*m_vAdjust
;
173 float m_oldHorizontalPos
;
174 float m_oldVerticalPos
;
176 // we need an extra XGC flag set to get exposed
177 // events from overlapping children upon moving
178 // them. this flag will be set in this GC and
179 // the GC will be used in wxWindow::ScrollWindow().
182 // extra (wxGTK-specific) flags
183 bool m_needParent
:1; /* ! wxFrame, wxDialog, wxNotebookPage ? */
184 bool m_hasScrolling
:1;
185 bool m_isScrolling
:1;
189 bool m_isStaticBox
:1; /* faster than IS_KIND_OF */
190 bool m_isRadioButton
:1; /* faster than IS_KIND_OF */
191 bool m_isFrame
:1; /* faster than IS_KIND_OF */
192 bool m_acceptsFocus
:1; /* ! wxStaticBox etc. */
194 // these are true if the style were set before the widget was realized
195 // (typcally in the constructor) but the actual GTK style must not be set
196 // before the widget has been "realized"
197 bool m_delayedFont
:1;
198 bool m_delayedForegroundColour
:1;
199 bool m_delayedBackgroundColour
:1;
200 bool m_delayedCursor
:1;
202 // the cursor is set in OnInternalIdle(). this fields holds
203 // a reference to the cursor currently set in theGdk window
204 // so that we don't have to set it more than once
205 wxCursor m_currentGdkCursor
;
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
);
230 virtual void DoSetToolTip( wxToolTip
*tip
);
231 #endif // wxUSE_TOOLTIPS
233 // common part of all ctors (can't be virtual because called from ctor)
237 DECLARE_NO_COPY_CLASS(wxWindow
);
240 #endif // __GTKWINDOWH__