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 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 /* used by all classes in the widget creation process */
425 void PreCreation( wxWindow
*parent
, wxWindowID id
, const wxPoint
&pos
,
426 const wxSize
&size
, long style
, const wxString
&name
);
429 /* the methods below are required because many native widgets
430 are composed of several subwidgets and setting a style for
431 the widget means setting it for all subwidgets as well.
432 also, it is nor clear, which native widget is the top
433 widget where (most of) the input goes. even tooltips have
434 to be applied to all subwidgets. */
436 virtual GtkWidget
* GetConnectWidget();
437 virtual bool IsOwnGtkWindow( GdkWindow
*window
);
438 void ConnectWidget( GtkWidget
*widget
);
440 GtkStyle
*GetWidgetStyle();
441 void SetWidgetStyle();
442 virtual void ApplyWidgetStyle();
445 virtual void ApplyToolTip( GtkTooltips
*tips
, const char *tip
);
446 #endif // wxUSE_TOOLTIPS
448 /* private member variables */
453 int m_width
,m_height
;
454 int m_minWidth
,m_minHeight
;
455 int m_maxWidth
,m_maxHeight
;
457 wxEvtHandler
*m_eventHandler
;
458 wxValidator
*m_windowValidator
;
459 #if wxUSE_DRAG_AND_DROP
460 wxDropTarget
*m_dropTarget
;
462 wxWindowID m_windowId
;
465 wxColour m_backgroundColour
;
466 wxColour m_foregroundColour
;
467 wxRegion m_updateRegion
;
471 wxString m_windowName
;
472 wxAcceleratorTable m_acceleratorTable
;
473 wxClientData
*m_clientObject
;
477 wxToolTip
*m_toolTip
;
478 #endif // wxUSE_TOOLTIPS
481 GtkWidget
*m_wxwindow
;
482 GtkAdjustment
*m_hAdjust
,*m_vAdjust
;
483 float m_oldHorizontalPos
;
484 float m_oldVerticalPos
;
492 GtkStyle
*m_widgetStyle
;
496 wxInsertChildFunction m_insertCallback
;
500 wxLayoutConstraints
*m_constraints
;
501 wxList
*m_constraintsInvolvedIn
;
502 wxSizer
*m_windowSizer
;
503 wxWindow
*m_sizerParent
;
506 wxLayoutConstraints
*GetConstraints() const;
507 void SetConstraints( wxLayoutConstraints
*constraints
);
508 void SetAutoLayout( bool autoLayout
);
509 bool GetAutoLayout() const;
511 void SetSizer( wxSizer
*sizer
);
512 wxSizer
*GetSizer() const;
513 void SetSizerParent( wxWindow
*win
);
514 wxWindow
*GetSizerParent() const;
515 void UnsetConstraints(wxLayoutConstraints
*c
);
516 inline wxList
*GetConstraintsInvolvedIn() const ;
517 void AddConstraintReference(wxWindow
*otherWin
);
518 void RemoveConstraintReference(wxWindow
*otherWin
);
519 void DeleteRelatedConstraints();
520 virtual void ResetConstraints();
521 virtual void SetConstraintSizes(bool recurse
= TRUE
);
522 virtual bool LayoutPhase1(int *noChanges
);
523 virtual bool LayoutPhase2(int *noChanges
);
524 virtual bool DoPhase(int);
525 virtual void TransformSizerToActual(int *x
, int *y
) const ;
526 virtual void SizerSetSize(int x
, int y
, int w
, int h
);
527 virtual void SizerMove(int x
, int y
);
528 virtual void SetSizeConstraint(int x
, int y
, int w
, int h
);
529 virtual void MoveConstraint(int x
, int y
);
530 virtual void GetSizeConstraint(int *w
, int *h
) const ;
531 virtual void GetClientSizeConstraint(int *w
, int *h
) const ;
532 virtual void GetPositionConstraint(int *x
, int *y
) const ;
535 // this is the virtual function to be overriden in any derived class which
536 // wants to change how SetSize() or Move() works - it is called by all
537 // versions of these functions in the base class
538 virtual void DoSetSize(int x
, int y
,
539 int width
, int height
,
540 int sizeFlags
= wxSIZE_AUTO
);
542 // same as DoSetSize() for the client size
543 virtual void DoSetClientSize(int width
, int height
);
546 DECLARE_EVENT_TABLE()
549 #endif // __GTKWINDOWH__