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 void ClientToScreen( int *x
, int *y
) const;
90 virtual void ScreenToClient( int *x
, int *y
) const;
92 virtual bool PopupMenu( wxMenu
*menu
, int x
, int y
);
94 virtual void SetScrollbar( int orient
, int pos
, int thumbVisible
,
95 int range
, bool refresh
= TRUE
);
96 virtual void SetScrollPos( int orient
, int pos
, bool refresh
= TRUE
);
97 virtual int GetScrollPos( int orient
) const;
98 virtual int GetScrollThumb( int orient
) const;
99 virtual int GetScrollRange( int orient
) const;
100 virtual void ScrollWindow( int dx
, int dy
,
101 const wxRect
* rect
= (wxRect
*) NULL
);
103 #if wxUSE_DRAG_AND_DROP
104 virtual void SetDropTarget( wxDropTarget
*dropTarget
);
105 #endif // wxUSE_DRAG_AND_DROP
110 // wxWindows callbacks
111 void OnKeyDown( wxKeyEvent
&event
);
114 bool HasVMT() const { return m_hasVMT
; }
116 int GetX() const { return m_x
; }
117 int GetY() const { return m_y
; }
118 int GetWidth() const { return m_width
; }
119 int GetHeight() const { return m_height
; }
121 GtkWidget
*GetWxWindow() const { return m_wxwindow
; }
122 GtkWidget
*GetWidget() const { return GetHandle(); }
124 GtkAdjustment
*GetHAdjust() const { return m_hAdjust
; }
125 GtkAdjustment
*GetVAdjust() const { return m_vAdjust
; }
127 float GetOldHorizontalPos() const { return m_oldHorizontalPos
; }
128 float GetOldVerticalPos() const { return m_oldVerticalPos
; }
130 void SetOldHorizontalPos(float fpos
) { m_oldHorizontalPos
= fpos
; }
131 void SetOldVerticalPos(float fpos
) { m_oldVerticalPos
= fpos
; }
133 bool IsSizeSet() const { return m_sizeSet
; }
135 // also sets the global flag
136 void SetScrolling(bool scroll
);
138 bool HasScrolling() const { return m_hasScrolling
; }
139 bool IsScrolling() const { return m_isScrolling
; }
140 bool IsStaticBox() const { return m_isStaticBox
; }
142 /* I don't want users to override what's done in idle so everything that
143 has to be done in idle time in order for wxGTK to work is done in
145 virtual void OnInternalIdle();
147 /* For compatibility across platforms (not in event table) */
148 void OnIdle(wxIdleEvent
& WXUNUSED(event
)) {};
150 /* used by all classes in the widget creation process */
151 void PreCreation( wxWindow
*parent
, wxWindowID id
, const wxPoint
&pos
,
152 const wxSize
&size
, long style
, const wxString
&name
);
155 void InsertChild(wxWindow
*child
) { (*m_insertCallback
)(this, child
); }
156 void DoAddChild(wxWindow
*child
) { AddChild(child
); InsertChild(child
); }
158 /* the methods below are required because many native widgets
159 are composed of several subwidgets and setting a style for
160 the widget means setting it for all subwidgets as well.
161 also, it is nor clear, which native widget is the top
162 widget where (most of) the input goes. even tooltips have
163 to be applied to all subwidgets. */
165 virtual GtkWidget
* GetConnectWidget();
166 virtual bool IsOwnGtkWindow( GdkWindow
*window
);
167 void ConnectWidget( GtkWidget
*widget
);
169 GtkStyle
*GetWidgetStyle();
170 void SetWidgetStyle();
171 virtual void ApplyWidgetStyle();
174 virtual void ApplyToolTip( GtkTooltips
*tips
, const wxChar
*tip
);
175 #endif // wxUSE_TOOLTIPS
177 // called from GTK signales handlers
178 void UpdateSize() { m_sizeSet
= FALSE
; }
179 void InternalSetPosition(int x
, int y
) { m_x
= x
; m_y
= y
; }
180 void InternalSetSize(int w
, int h
)
181 { m_width
= w
; m_height
= h
; UpdateSize(); }
184 // position and size of the window
186 int m_width
, m_height
;
188 // see the docs in src/gtk/window.cpp
189 GtkWidget
*m_wxwindow
;
192 GtkAdjustment
*m_hAdjust
,*m_vAdjust
;
193 float m_oldHorizontalPos
,
197 // extra (wxGTK-specific) flags
198 bool m_needParent
:1; /* ! wxFrame, wxDialog, wxNotebookPage ? */
199 bool m_hasScrolling
:1;
200 bool m_isScrolling
:1;
204 bool m_isStaticBox
:1; /* faster than IS_KIND_OF */
205 bool m_isFrame
:1; /* faster than IS_KIND_OF */
206 bool m_acceptsFocus
:1; /* ! wxStaticBox etc. */
208 GtkStyle
*m_widgetStyle
;
210 wxInsertChildFunction m_insertCallback
;
212 // implement the base class pure virtuals
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
);
222 virtual void DoSetToolTip( wxToolTip
*tip
);
223 #endif // wxUSE_TOOLTIPS
225 // common part of all ctors (can't be virtual because called from ctor)
229 DECLARE_EVENT_TABLE()
232 #endif // __GTKWINDOWH__