1 /////////////////////////////////////////////////////////////////////////////
4 // Author: Robert Roebling
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
11 #ifndef __GTKWINDOWH__
12 #define __GTKWINDOWH__
19 #include "wx/object.h"
22 #include "wx/validate.h"
23 #include "wx/cursor.h"
25 #include "wx/region.h"
28 //-----------------------------------------------------------------------------
30 //-----------------------------------------------------------------------------
32 extern const char *wxFrameNameStr
;
33 extern wxList wxTopLevelWindows
;
35 //-----------------------------------------------------------------------------
37 //-----------------------------------------------------------------------------
39 wxWindow
* wxGetActiveWindow();
41 //-----------------------------------------------------------------------------
43 //-----------------------------------------------------------------------------
45 class wxLayoutConstraints
;
49 class wxVoidClientData
;
51 #if wxUSE_WX_RESOURCES
52 class wxResourceTable
;
55 #if wxUSE_DRAG_AND_DROP
60 //-----------------------------------------------------------------------------
61 // callback definition for inserting a window (internal)
62 //-----------------------------------------------------------------------------
64 typedef void (*wxInsertChildFunction
)( wxWindow
*, wxWindow
* );
66 //-----------------------------------------------------------------------------
68 //-----------------------------------------------------------------------------
70 extern const char *wxPanelNameStr
;
71 extern const wxSize wxDefaultSize
;
72 extern const wxPoint wxDefaultPosition
;
74 //-----------------------------------------------------------------------------
76 //-----------------------------------------------------------------------------
82 virtual ~wxClientData() { }
85 //-----------------------------------------------------------------------------
87 //-----------------------------------------------------------------------------
89 class wxStringClientData
: public wxClientData
92 wxStringClientData() { }
93 wxStringClientData( wxString
&data
) { m_data
= data
; }
94 void SetData( wxString
&data
) { m_data
= data
; }
95 wxString
GetData() const { return m_data
; }
101 //-----------------------------------------------------------------------------
103 //-----------------------------------------------------------------------------
107 void debug_focus_in( GtkWidget
* widget
, const char* name
, const char* window
);
111 //-----------------------------------------------------------------------------
113 //-----------------------------------------------------------------------------
115 class wxWindow
: public wxEvtHandler
117 DECLARE_DYNAMIC_CLASS(wxWindow
)
121 wxWindow(wxWindow
*parent
, wxWindowID id
,
122 const wxPoint
& pos
= wxDefaultPosition
,
123 const wxSize
& size
= wxDefaultSize
,
125 const wxString
& name
= wxPanelNameStr
);
126 bool Create(wxWindow
*parent
, wxWindowID id
,
127 const wxPoint
& pos
= wxDefaultPosition
,
128 const wxSize
& size
= wxDefaultSize
,
130 const wxString
& name
= wxPanelNameStr
);
133 #if wxUSE_WX_RESOURCES
134 virtual bool LoadFromResource( wxWindow
*parent
, const wxString
& resourceName
,
135 const wxResourceTable
*table
= (const wxResourceTable
*) NULL
);
136 virtual wxControl
*CreateItem(const wxItemResource
* childResource
, const wxItemResource
* parentResource
,
137 const wxResourceTable
*table
= (const wxResourceTable
*) NULL
);
140 bool Close( bool force
= FALSE
);
141 virtual bool Destroy();
142 virtual bool DestroyChildren();
144 virtual void PrepareDC( wxDC
&dc
);
146 virtual void SetSize( int x
, int y
, int width
, int height
,
147 int sizeFlags
= wxSIZE_AUTO
);
148 virtual void SetSize( int width
, int height
);
150 virtual void Move( int x
, int y
);
152 virtual void GetSize( int *width
, int *height
) const;
153 wxSize
GetSize() const { int w
, h
; GetSize(& w
, & h
); return wxSize(w
, h
); }
155 virtual void SetClientSize( int const width
, int const height
);
157 virtual void GetClientSize( int *width
, int *height
) const;
158 wxSize
GetClientSize() const { int w
, h
; GetClientSize(& w
, & h
); return wxSize(w
, h
); }
160 virtual void GetPosition( int *x
, int *y
) const;
161 wxPoint
GetPosition() const { int w
, h
; GetPosition(& w
, & h
); return wxPoint(w
, h
); }
163 wxRect
GetRect() const
164 { int x
, y
, w
, h
; GetPosition(& x
, & y
); GetSize(& w
, & h
); return wxRect(x
, y
, w
, h
); }
166 virtual void Centre( int direction
= wxHORIZONTAL
);
167 inline void Center(int direction
= wxHORIZONTAL
) { Centre(direction
); }
170 virtual void SetSizeHints( int minW
, int minH
, int maxW
= -1, int maxH
= -1, int incW
= -1, int incH
= -1 );
172 /* Dialog units translations. Implemented in wincmn.cpp. */
173 wxPoint
ConvertPixelsToDialog( const wxPoint
& pt
);
174 wxPoint
ConvertDialogToPixels( const wxPoint
& pt
);
175 inline wxSize
ConvertPixelsToDialog( const wxSize
& sz
)
176 { wxPoint
pt(ConvertPixelsToDialog(wxPoint(sz
.x
, sz
.y
))); return wxSize(pt
.x
, pt
.y
); }
177 inline wxSize
ConvertDialogToPixels( const wxSize
& sz
)
178 { wxPoint
pt(ConvertDialogToPixels(wxPoint(sz
.x
, sz
.y
))); return wxSize(pt
.x
, pt
.y
); }
180 void OnSize( wxSizeEvent
&event
);
182 virtual bool Show( bool show
);
183 virtual void Enable( bool enable
);
184 virtual void MakeModal( bool modal
);
185 virtual bool IsEnabled() const { return m_isEnabled
; }
186 inline bool Enabled() const { return IsEnabled(); }
187 virtual bool OnClose();
189 virtual void SetFocus();
190 static wxWindow
*FindFocus();
192 virtual void AddChild( wxWindow
*child
);
193 wxList
& GetChildren() { return m_children
; }
195 virtual void RemoveChild( wxWindow
*child
);
196 void SetReturnCode( int retCode
);
198 wxWindow
*GetParent() const
200 wxWindow
*GetGrandParent() const
201 { return (m_parent
? m_parent
->m_parent
: (wxWindow
*)NULL
); }
202 void SetParent( wxWindow
*parent
)
203 { m_parent
= parent
; }
204 virtual wxWindow
*ReParent( wxWindow
*newParent
);
206 wxEvtHandler
*GetEventHandler() const;
207 void SetEventHandler( wxEvtHandler
*handler
);
208 void PushEventHandler( wxEvtHandler
*handler
);
209 wxEvtHandler
*PopEventHandler( bool deleteHandler
= FALSE
);
211 virtual void SetValidator( const wxValidator
&validator
);
212 virtual wxValidator
*GetValidator();
214 virtual void SetClientObject( wxClientData
*data
);
215 virtual wxClientData
*GetClientObject();
217 virtual void SetClientData( void *data
);
218 virtual void *GetClientData();
220 virtual void SetAcceleratorTable( const wxAcceleratorTable
& accel
);
221 virtual wxAcceleratorTable
*GetAcceleratorTable() { return &m_acceleratorTable
; }
223 bool IsBeingDeleted();
225 void SetId( wxWindowID id
);
226 wxWindowID
GetId() const;
228 void SetCursor( const wxCursor
&cursor
);
230 void WarpPointer(int x
, int y
);
233 void SetToolTip( const wxString
&tip
);
234 virtual void SetToolTip( wxToolTip
*tip
);
235 wxToolTip
* GetToolTip() const { return m_toolTip
; }
236 #endif // wxUSE_TOOLTIPS
238 virtual void Refresh( bool eraseBackground
= TRUE
, const wxRect
*rect
= (const wxRect
*) NULL
);
239 virtual void Clear();
241 virtual wxRegion
GetUpdateRegion() const;
242 virtual bool IsExposed( int x
, int y
) const;
243 virtual bool IsExposed( int x
, int y
, int w
, int h
) const;
244 virtual bool IsExposed( const wxPoint
& pt
) const;
245 virtual bool IsExposed( const wxRect
& rect
) const;
247 virtual wxColour
GetBackgroundColour() const;
248 virtual void SetBackgroundColour( const wxColour
&colour
);
249 virtual wxColour
GetForegroundColour() const;
250 virtual void SetForegroundColour( const wxColour
&colour
);
252 virtual int GetCharHeight() const;
253 virtual int GetCharWidth() const;
254 virtual void GetTextExtent( const wxString
& string
, int *x
, int *y
,
255 int *descent
= (int *) NULL
,
256 int *externalLeading
= (int *) NULL
,
257 const wxFont
*theFont
= (const wxFont
*) NULL
, bool use16
= FALSE
) const;
259 virtual void SetFont( const wxFont
&font
);
260 virtual wxFont
& GetFont() { return m_font
; }
262 // For backward compatibility
263 inline virtual void SetButtonFont(const wxFont
& font
) { SetFont(font
); }
264 inline virtual void SetLabelFont(const wxFont
& font
) { SetFont(font
); }
265 inline virtual wxFont
& GetLabelFont() { return GetFont(); };
266 inline virtual wxFont
& GetButtonFont() { return GetFont(); };
268 virtual void SetWindowStyleFlag( long flag
);
269 virtual long GetWindowStyleFlag() const;
271 virtual void CaptureMouse();
272 virtual void ReleaseMouse();
274 virtual void SetTitle( const wxString
&title
);
275 virtual wxString
GetTitle() const;
276 virtual void SetName( const wxString
&name
);
277 virtual wxString
GetName() const;
278 virtual wxString
GetLabel() const;
280 void OnSysColourChanged( wxSysColourChangedEvent
&WXUNUSED(event
) ) {};
281 void OnKeyDown( wxKeyEvent
&event
);
283 virtual bool IsShown() const;
285 virtual void Raise();
286 virtual void Lower();
288 virtual bool IsRetained();
289 virtual wxWindow
*FindWindow( long id
);
290 virtual wxWindow
*FindWindow( const wxString
& name
);
292 void AllowDoubleClick( bool WXUNUSED(allow
) ) {};
293 void SetDoubleClick( bool WXUNUSED(allow
) ) {};
295 virtual void ClientToScreen( int *x
, int *y
);
296 virtual void ScreenToClient( int *x
, int *y
);
298 virtual bool Validate();
299 virtual bool TransferDataToWindow();
300 virtual bool TransferDataFromWindow();
301 void OnInitDialog( wxInitDialogEvent
&event
);
302 virtual void InitDialog();
304 virtual bool PopupMenu( wxMenu
*menu
, int x
, int y
);
306 #if wxUSE_DRAG_AND_DROP
307 virtual void SetDropTarget( wxDropTarget
*dropTarget
);
308 virtual wxDropTarget
*GetDropTarget() const;
311 virtual void SetScrollbar( int orient
, int pos
, int thumbVisible
,
312 int range
, bool refresh
= TRUE
);
313 virtual void SetScrollPos( int orient
, int pos
, bool refresh
= TRUE
);
314 virtual int GetScrollPos( int orient
) const;
315 virtual int GetScrollThumb( int orient
) const;
316 virtual int GetScrollRange( int orient
) const;
317 virtual void ScrollWindow( int dx
, int dy
, const wxRect
* rect
= (wxRect
*) NULL
);
319 virtual bool AcceptsFocus() const;
321 void UpdateWindowUI();
325 virtual wxPoint
GetClientAreaOrigin() const;
326 virtual void AdjustForParentClientOrigin( int& x
, int& y
, int sizeFlags
);
330 virtual void OnInternalIdle();
332 /* used by all classes in the widget creation process */
334 void PreCreation( wxWindow
*parent
, wxWindowID id
, const wxPoint
&pos
,
335 const wxSize
&size
, long style
, const wxString
&name
);
338 /* the methods below are required because many native widgets
339 are composed of several subwidgets and setting a style for
340 the widget means setting it for all subwidgets as well.
341 also, it is nor clear, which native widget is the top
342 widget where (most of) the input goes. even tooltips have
343 to be applied to all subwidgets. */
345 virtual GtkWidget
* GetConnectWidget();
346 virtual bool IsOwnGtkWindow( GdkWindow
*window
);
347 void ConnectWidget( GtkWidget
*widget
);
349 GtkStyle
*GetWidgetStyle();
350 void SetWidgetStyle();
351 virtual void ApplyWidgetStyle();
354 virtual void ApplyToolTip( GtkTooltips
*tips
, const char *tip
);
355 #endif // wxUSE_TOOLTIPS
357 /* private member variables */
362 int m_width
,m_height
;
363 int m_minWidth
,m_minHeight
;
364 int m_maxWidth
,m_maxHeight
;
366 wxEvtHandler
*m_eventHandler
;
367 wxValidator
*m_windowValidator
;
368 #if wxUSE_DRAG_AND_DROP
369 wxDropTarget
*m_dropTarget
;
371 wxWindowID m_windowId
;
374 wxColour m_backgroundColour
;
375 wxColour m_foregroundColour
;
376 wxRegion m_updateRegion
;
380 wxString m_windowName
;
381 wxAcceleratorTable m_acceleratorTable
;
382 wxClientData
*m_clientObject
;
386 wxToolTip
*m_toolTip
;
387 #endif // wxUSE_TOOLTIPS
390 GtkWidget
*m_wxwindow
;
391 GtkAdjustment
*m_hAdjust
,*m_vAdjust
;
392 float m_oldHorizontalPos
;
393 float m_oldVerticalPos
;
401 GtkStyle
*m_widgetStyle
;
405 wxInsertChildFunction m_insertCallback
;
409 wxLayoutConstraints
*m_constraints
;
410 wxList
*m_constraintsInvolvedIn
;
411 wxSizer
*m_windowSizer
;
412 wxWindow
*m_sizerParent
;
415 wxLayoutConstraints
*GetConstraints() const;
416 void SetConstraints( wxLayoutConstraints
*constraints
);
417 void SetAutoLayout( bool autoLayout
);
418 bool GetAutoLayout() const;
420 void SetSizer( wxSizer
*sizer
);
421 wxSizer
*GetSizer() const;
422 void SetSizerParent( wxWindow
*win
);
423 wxWindow
*GetSizerParent() const;
424 void UnsetConstraints(wxLayoutConstraints
*c
);
425 inline wxList
*GetConstraintsInvolvedIn() const ;
426 void AddConstraintReference(wxWindow
*otherWin
);
427 void RemoveConstraintReference(wxWindow
*otherWin
);
428 void DeleteRelatedConstraints();
429 virtual void ResetConstraints();
430 virtual void SetConstraintSizes(bool recurse
= TRUE
);
431 virtual bool LayoutPhase1(int *noChanges
);
432 virtual bool LayoutPhase2(int *noChanges
);
433 virtual bool DoPhase(int);
434 virtual void TransformSizerToActual(int *x
, int *y
) const ;
435 virtual void SizerSetSize(int x
, int y
, int w
, int h
);
436 virtual void SizerMove(int x
, int y
);
437 virtual void SetSizeConstraint(int x
, int y
, int w
, int h
);
438 virtual void MoveConstraint(int x
, int y
);
439 virtual void GetSizeConstraint(int *w
, int *h
) const ;
440 virtual void GetClientSizeConstraint(int *w
, int *h
) const ;
441 virtual void GetPositionConstraint(int *x
, int *y
) const ;
444 DECLARE_EVENT_TABLE()
447 #endif // __GTKWINDOWH__