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 wxWindowList wxTopLevelWindows
;
35 //-----------------------------------------------------------------------------
37 //-----------------------------------------------------------------------------
39 extern 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
)
120 // creating the window
121 // -------------------
123 wxWindow(wxWindow
*parent
, wxWindowID id
,
124 const wxPoint
& pos
= wxDefaultPosition
,
125 const wxSize
& size
= wxDefaultSize
,
127 const wxString
& name
= wxPanelNameStr
);
128 bool Create(wxWindow
*parent
, wxWindowID id
,
129 const wxPoint
& pos
= wxDefaultPosition
,
130 const wxSize
& size
= wxDefaultSize
,
132 const wxString
& name
= wxPanelNameStr
);
135 #if wxUSE_WX_RESOURCES
136 virtual bool LoadFromResource(wxWindow
*parent
,
137 const wxString
& resourceName
,
138 const wxResourceTable
*table
= (const wxResourceTable
*) NULL
);
139 virtual wxControl
*CreateItem(const wxItemResource
* childResource
,
140 const wxItemResource
* parentResource
,
141 const wxResourceTable
*table
= (const wxResourceTable
*) NULL
);
142 #endif // wxUSE_WX_RESOURCES
144 // closing the window
145 // ------------------
146 bool Close( bool force
= FALSE
);
147 virtual bool Destroy();
148 virtual bool DestroyChildren();
150 bool IsBeingDeleted();
155 // set the window size and/or position
156 void SetSize( int x
, int y
, int width
, int height
,
157 int sizeFlags
= wxSIZE_AUTO
)
158 { DoSetSize(x
, y
, width
, height
, sizeFlags
); }
160 void SetSize( int width
, int height
)
161 { DoSetSize( -1, -1, width
, height
, wxSIZE_USE_EXISTING
); }
163 void SetSize( const wxSize
& size
)
164 { SetSize( size
.x
, size
.y
); }
166 void SetSize(const wxRect
& rect
, int sizeFlags
= wxSIZE_AUTO
)
167 { DoSetSize(rect
.x
, rect
.y
, rect
.width
, rect
.height
, sizeFlags
); }
169 void Move( int x
, int y
)
170 { DoSetSize( x
, y
, -1, -1, wxSIZE_USE_EXISTING
); }
172 void Move(const wxPoint
& pt
)
173 { Move(pt
.x
, pt
.y
); }
175 // client size is the size of area available for subwindows
176 void SetClientSize( int width
, int height
)
177 { DoSetClientSize(width
, height
); }
179 void SetClientSize( const wxSize
& size
)
180 { DoSetClientSize(size
.x
, size
.y
); }
182 void SetClientSize(const wxRect
& rect
)
183 { SetClientSize( rect
.width
, rect
.height
); }
185 // get the window position and/or size
186 virtual void GetPosition( int *x
, int *y
) const;
187 wxPoint
GetPosition() const
190 GetPosition(& w
, & h
);
192 return wxPoint(w
, h
);
195 virtual void GetSize( int *width
, int *height
) const;
197 wxSize
GetSize() const
204 wxRect
GetRect() const
207 GetPosition(& x
, & y
);
210 return wxRect(x
, y
, w
, h
);
213 virtual void GetClientSize( int *width
, int *height
) const;
214 wxSize
GetClientSize() const
217 GetClientSize(& w
, & h
);
221 // position with respect to the the parent window
222 virtual void Centre( int direction
= wxHORIZONTAL
);
223 void Center(int direction
= wxHORIZONTAL
) { Centre(direction
); }
226 // set min/max size of the window
227 virtual void SetSizeHints( int minW
, int minH
,
228 int maxW
= -1, int maxH
= -1,
229 int incW
= -1, int incH
= -1 );
231 // Dialog units translations. Implemented in wincmn.cpp.
232 // -----------------------------------------------------
234 wxPoint
ConvertPixelsToDialog( const wxPoint
& pt
);
235 wxPoint
ConvertDialogToPixels( const wxPoint
& pt
);
236 wxSize
ConvertPixelsToDialog( const wxSize
& sz
)
238 wxPoint
pt(ConvertPixelsToDialog(wxPoint(sz
.x
, sz
.y
)));
240 return wxSize(pt
.x
, pt
.y
);
243 wxSize
ConvertDialogToPixels( const wxSize
& sz
)
245 wxPoint
pt(ConvertDialogToPixels(wxPoint(sz
.x
, sz
.y
)));
247 return wxSize(pt
.x
, pt
.y
);
250 void OnSize( wxSizeEvent
&event
);
255 virtual bool Show( bool show
);
256 virtual void Enable( bool enable
);
257 virtual void MakeModal( bool modal
);
258 virtual bool IsEnabled() const { return m_isEnabled
; }
259 inline bool Enabled() const { return IsEnabled(); }
261 virtual void SetFocus();
262 static wxWindow
*FindFocus();
264 void SetReturnCode( int retCode
);
267 // parent/children relations
268 // -------------------------
270 virtual void AddChild( wxWindow
*child
);
271 wxList
& GetChildren() { return m_children
; }
273 virtual void RemoveChild( wxWindow
*child
);
275 wxWindow
*GetParent() const
277 wxWindow
*GetGrandParent() const
278 { return (m_parent
? m_parent
->m_parent
: (wxWindow
*)NULL
); }
279 void SetParent( wxWindow
*parent
)
280 { m_parent
= parent
; }
281 virtual wxWindow
*ReParent( wxWindow
*newParent
);
283 // event handler stuff
284 // -------------------
286 wxEvtHandler
*GetEventHandler() const;
287 void SetEventHandler( wxEvtHandler
*handler
);
288 void PushEventHandler( wxEvtHandler
*handler
);
289 wxEvtHandler
*PopEventHandler( bool deleteHandler
= FALSE
);
291 // validators and client data
292 // --------------------------
294 virtual void SetValidator( const wxValidator
&validator
);
295 virtual wxValidator
*GetValidator();
297 virtual void SetClientObject( wxClientData
*data
);
298 virtual wxClientData
*GetClientObject();
300 virtual void SetClientData( void *data
);
301 virtual void *GetClientData();
305 virtual void SetAcceleratorTable( const wxAcceleratorTable
& accel
);
306 virtual wxAcceleratorTable
*GetAcceleratorTable() { return &m_acceleratorTable
; }
308 void SetId( wxWindowID id
);
309 wxWindowID
GetId() const;
311 void SetCursor( const wxCursor
&cursor
);
313 virtual void PrepareDC( wxDC
&dc
);
315 void WarpPointer(int x
, int y
);
318 void SetToolTip( const wxString
&tip
);
319 virtual void SetToolTip( wxToolTip
*tip
);
320 wxToolTip
* GetToolTip() const { return m_toolTip
; }
321 #endif // wxUSE_TOOLTIPS
323 virtual void Refresh( bool eraseBackground
= TRUE
, const wxRect
*rect
= (const wxRect
*) NULL
);
324 virtual void Clear();
326 virtual wxRegion
GetUpdateRegion() const;
327 virtual bool IsExposed( int x
, int y
) const;
328 virtual bool IsExposed( int x
, int y
, int w
, int h
) const;
329 virtual bool IsExposed( const wxPoint
& pt
) const;
330 virtual bool IsExposed( const wxRect
& rect
) const;
335 virtual wxColour
GetBackgroundColour() const;
336 virtual void SetBackgroundColour( const wxColour
&colour
);
337 virtual wxColour
GetForegroundColour() const;
338 virtual void SetForegroundColour( const wxColour
&colour
);
343 virtual int GetCharHeight() const;
344 virtual int GetCharWidth() const;
345 virtual void GetTextExtent( const wxString
& string
, int *x
, int *y
,
346 int *descent
= (int *) NULL
,
347 int *externalLeading
= (int *) NULL
,
348 const wxFont
*theFont
= (const wxFont
*) NULL
, bool use16
= FALSE
) const;
350 virtual void SetFont( const wxFont
&font
);
351 virtual wxFont
& GetFont() { return m_font
; }
353 // For backward compatibility
354 virtual void SetButtonFont(const wxFont
& font
) { SetFont(font
); }
355 virtual void SetLabelFont(const wxFont
& font
) { SetFont(font
); }
356 virtual wxFont
& GetLabelFont() { return GetFont(); };
357 virtual wxFont
& GetButtonFont() { return GetFont(); };
359 virtual void SetWindowStyleFlag( long flag
);
360 virtual long GetWindowStyleFlag() const;
362 virtual void CaptureMouse();
363 virtual void ReleaseMouse();
365 virtual void SetTitle( const wxString
&title
);
366 virtual wxString
GetTitle() const;
367 virtual void SetName( const wxString
&name
);
368 virtual wxString
GetName() const;
369 virtual wxString
GetLabel() const;
371 void OnSysColourChanged( wxSysColourChangedEvent
&WXUNUSED(event
) ) { }
372 void OnKeyDown( wxKeyEvent
&event
);
374 virtual bool IsShown() const;
376 virtual void Raise();
377 virtual void Lower();
379 virtual bool IsRetained();
380 virtual wxWindow
*FindWindow( long id
);
381 virtual wxWindow
*FindWindow( const wxString
& name
);
383 void AllowDoubleClick( bool WXUNUSED(allow
) ) { }
384 void SetDoubleClick( bool WXUNUSED(allow
) ) { }
386 virtual void ClientToScreen( int *x
, int *y
);
387 virtual void ScreenToClient( int *x
, int *y
);
389 virtual bool Validate();
390 virtual bool TransferDataToWindow();
391 virtual bool TransferDataFromWindow();
392 void OnInitDialog( wxInitDialogEvent
&event
);
393 virtual void InitDialog();
395 virtual bool PopupMenu( wxMenu
*menu
, int x
, int y
);
397 #if wxUSE_DRAG_AND_DROP
398 virtual void SetDropTarget( wxDropTarget
*dropTarget
);
399 virtual wxDropTarget
*GetDropTarget() const;
402 virtual void SetScrollbar( int orient
, int pos
, int thumbVisible
,
403 int range
, bool refresh
= TRUE
);
404 virtual void SetScrollPos( int orient
, int pos
, bool refresh
= TRUE
);
405 virtual int GetScrollPos( int orient
) const;
406 virtual int GetScrollThumb( int orient
) const;
407 virtual int GetScrollRange( int orient
) const;
408 virtual void ScrollWindow( int dx
, int dy
, const wxRect
* rect
= (wxRect
*) NULL
);
410 virtual bool AcceptsFocus() const;
412 void UpdateWindowUI();
416 virtual wxPoint
GetClientAreaOrigin() const;
417 virtual void AdjustForParentClientOrigin( int& x
, int& y
, int sizeFlags
);
421 virtual void OnInternalIdle();
423 // For compatibility across platforms (not in event table)
424 void OnIdle(wxIdleEvent
& WXUNUSED(event
)) {};
426 /* used by all classes in the widget creation process */
428 void PreCreation( wxWindow
*parent
, wxWindowID id
, const wxPoint
&pos
,
429 const wxSize
&size
, long style
, const wxString
&name
);
432 /* the methods below are required because many native widgets
433 are composed of several subwidgets and setting a style for
434 the widget means setting it for all subwidgets as well.
435 also, it is nor clear, which native widget is the top
436 widget where (most of) the input goes. even tooltips have
437 to be applied to all subwidgets. */
439 virtual GtkWidget
* GetConnectWidget();
440 virtual bool IsOwnGtkWindow( GdkWindow
*window
);
441 void ConnectWidget( GtkWidget
*widget
);
443 GtkStyle
*GetWidgetStyle();
444 void SetWidgetStyle();
445 virtual void ApplyWidgetStyle();
448 virtual void ApplyToolTip( GtkTooltips
*tips
, const char *tip
);
449 #endif // wxUSE_TOOLTIPS
451 /* private member variables */
456 int m_width
,m_height
;
457 int m_minWidth
,m_minHeight
;
458 int m_maxWidth
,m_maxHeight
;
460 wxEvtHandler
*m_eventHandler
;
461 wxValidator
*m_windowValidator
;
462 #if wxUSE_DRAG_AND_DROP
463 wxDropTarget
*m_dropTarget
;
465 wxWindowID m_windowId
;
468 wxColour m_backgroundColour
;
469 wxColour m_foregroundColour
;
470 wxRegion m_updateRegion
;
474 wxString m_windowName
;
475 wxAcceleratorTable m_acceleratorTable
;
476 wxClientData
*m_clientObject
;
480 wxToolTip
*m_toolTip
;
481 #endif // wxUSE_TOOLTIPS
484 GtkWidget
*m_wxwindow
;
485 GtkAdjustment
*m_hAdjust
,*m_vAdjust
;
486 float m_oldHorizontalPos
;
487 float m_oldVerticalPos
;
495 GtkStyle
*m_widgetStyle
;
499 wxInsertChildFunction m_insertCallback
;
503 wxLayoutConstraints
*m_constraints
;
504 wxList
*m_constraintsInvolvedIn
;
505 wxSizer
*m_windowSizer
;
506 wxWindow
*m_sizerParent
;
509 wxLayoutConstraints
*GetConstraints() const;
510 void SetConstraints( wxLayoutConstraints
*constraints
);
511 void SetAutoLayout( bool autoLayout
);
512 bool GetAutoLayout() const;
514 void SetSizer( wxSizer
*sizer
);
515 wxSizer
*GetSizer() const;
516 void SetSizerParent( wxWindow
*win
);
517 wxWindow
*GetSizerParent() const;
518 void UnsetConstraints(wxLayoutConstraints
*c
);
519 inline wxList
*GetConstraintsInvolvedIn() const ;
520 void AddConstraintReference(wxWindow
*otherWin
);
521 void RemoveConstraintReference(wxWindow
*otherWin
);
522 void DeleteRelatedConstraints();
523 virtual void ResetConstraints();
524 virtual void SetConstraintSizes(bool recurse
= TRUE
);
525 virtual bool LayoutPhase1(int *noChanges
);
526 virtual bool LayoutPhase2(int *noChanges
);
527 virtual bool DoPhase(int);
528 virtual void TransformSizerToActual(int *x
, int *y
) const ;
529 virtual void SizerSetSize(int x
, int y
, int w
, int h
);
530 virtual void SizerMove(int x
, int y
);
531 virtual void SetSizeConstraint(int x
, int y
, int w
, int h
);
532 virtual void MoveConstraint(int x
, int y
);
533 virtual void GetSizeConstraint(int *w
, int *h
) const ;
534 virtual void GetClientSizeConstraint(int *w
, int *h
) const ;
535 virtual void GetPositionConstraint(int *x
, int *y
) const ;
538 // common part of all ctors
541 // this is the virtual function to be overriden in any derived class which
542 // wants to change how SetSize() or Move() works - it is called by all
543 // versions of these functions in the base class
544 virtual void DoSetSize(int x
, int y
,
545 int width
, int height
,
546 int sizeFlags
= wxSIZE_AUTO
);
548 // same as DoSetSize() for the client size
549 virtual void DoSetClientSize(int width
, int height
);
552 DECLARE_EVENT_TABLE()
555 #endif // __GTKWINDOWH__