]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk1/window.h
wxToolTip
[wxWidgets.git] / include / wx / gtk1 / window.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: window.h
3 // Purpose:
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10
11 #ifndef __GTKWINDOWH__
12 #define __GTKWINDOWH__
13
14 #ifdef __GNUG__
15 #pragma interface
16 #endif
17
18 #include "wx/defs.h"
19 #include "wx/object.h"
20 #include "wx/list.h"
21 #include "wx/event.h"
22 #include "wx/validate.h"
23 #include "wx/cursor.h"
24 #include "wx/font.h"
25 #include "wx/region.h"
26 #include "wx/accel.h"
27
28 //-----------------------------------------------------------------------------
29 // global data
30 //-----------------------------------------------------------------------------
31
32 extern const char *wxFrameNameStr;
33 extern wxList wxTopLevelWindows;
34
35 //-----------------------------------------------------------------------------
36 // global function
37 //-----------------------------------------------------------------------------
38
39 wxWindow* wxGetActiveWindow();
40
41 //-----------------------------------------------------------------------------
42 // classes
43 //-----------------------------------------------------------------------------
44
45 class wxLayoutConstraints;
46 class wxSizer;
47 class wxDC;
48 class wxClientData;
49 class wxVoidClientData;
50 class wxWindow;
51 #if wxUSE_WX_RESOURCES
52 class wxResourceTable;
53 class wxItemResource;
54 #endif
55 #if wxUSE_DRAG_AND_DROP
56 class wxDropTarget;
57 #endif
58 class wxToolTip;
59
60 //-----------------------------------------------------------------------------
61 // callback definition for inserting a window (internal)
62 //-----------------------------------------------------------------------------
63
64 typedef void (*wxInsertChildFunction)( wxWindow*, wxWindow* );
65
66 //-----------------------------------------------------------------------------
67 // global data
68 //-----------------------------------------------------------------------------
69
70 extern const char *wxPanelNameStr;
71 extern const wxSize wxDefaultSize;
72 extern const wxPoint wxDefaultPosition;
73
74 //-----------------------------------------------------------------------------
75 // wxClientData
76 //-----------------------------------------------------------------------------
77
78 class wxClientData
79 {
80 public:
81 wxClientData() { }
82 virtual ~wxClientData() { }
83 };
84
85 //-----------------------------------------------------------------------------
86 // wxStringClientData
87 //-----------------------------------------------------------------------------
88
89 class wxStringClientData: public wxClientData
90 {
91 public:
92 wxStringClientData() { }
93 wxStringClientData( wxString &data ) { m_data = data; }
94 void SetData( wxString &data ) { m_data = data; }
95 wxString GetData() const { return m_data; }
96
97 private:
98 wxString m_data;
99 };
100
101 //-----------------------------------------------------------------------------
102 // (debug)
103 //-----------------------------------------------------------------------------
104
105 #ifdef __WXDEBUG__
106
107 void debug_focus_in( GtkWidget* widget, const char* name, const char* window );
108
109 #endif
110
111 //-----------------------------------------------------------------------------
112 // wxWindow
113 //-----------------------------------------------------------------------------
114
115 class wxWindow: public wxEvtHandler
116 {
117 DECLARE_DYNAMIC_CLASS(wxWindow)
118
119 public:
120 wxWindow();
121 wxWindow(wxWindow *parent, wxWindowID id,
122 const wxPoint& pos = wxDefaultPosition,
123 const wxSize& size = wxDefaultSize,
124 long style = 0,
125 const wxString& name = wxPanelNameStr);
126 bool Create(wxWindow *parent, wxWindowID id,
127 const wxPoint& pos = wxDefaultPosition,
128 const wxSize& size = wxDefaultSize,
129 long style = 0,
130 const wxString& name = wxPanelNameStr);
131 virtual ~wxWindow();
132
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);
138 #endif
139
140 bool Close( bool force = FALSE );
141 virtual bool Destroy();
142 virtual bool DestroyChildren();
143
144 virtual void PrepareDC( wxDC &dc );
145
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 );
149
150 virtual void Move( int x, int y );
151
152 virtual void GetSize( int *width, int *height ) const;
153 wxSize GetSize() const { int w, h; GetSize(& w, & h); return wxSize(w, h); }
154
155 virtual void SetClientSize( int const width, int const height );
156
157 virtual void GetClientSize( int *width, int *height ) const;
158 wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); }
159
160 virtual void GetPosition( int *x, int *y ) const;
161 wxPoint GetPosition() const { int w, h; GetPosition(& w, & h); return wxPoint(w, h); }
162
163 wxRect GetRect() const
164 { int x, y, w, h; GetPosition(& x, & y); GetSize(& w, & h); return wxRect(x, y, w, h); }
165
166 virtual void Centre( int direction = wxHORIZONTAL );
167 inline void Center(int direction = wxHORIZONTAL) { Centre(direction); }
168 virtual void Fit();
169
170 virtual void SetSizeHints( int minW, int minH, int maxW = -1, int maxH = -1, int incW = -1, int incH = -1 );
171
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); }
179
180 void OnSize( wxSizeEvent &event );
181
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();
188
189 virtual void SetFocus();
190 static wxWindow *FindFocus();
191
192 virtual void AddChild( wxWindow *child );
193 wxList& GetChildren() { return m_children; }
194
195 virtual void RemoveChild( wxWindow *child );
196 void SetReturnCode( int retCode );
197 int GetReturnCode();
198 wxWindow *GetParent() const
199 { return m_parent; }
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 );
205
206 wxEvtHandler *GetEventHandler() const;
207 void SetEventHandler( wxEvtHandler *handler );
208 void PushEventHandler( wxEvtHandler *handler );
209 wxEvtHandler *PopEventHandler( bool deleteHandler = FALSE );
210
211 virtual void SetValidator( const wxValidator &validator );
212 virtual wxValidator *GetValidator();
213
214 virtual void SetClientObject( wxClientData *data );
215 virtual wxClientData *GetClientObject();
216
217 virtual void SetClientData( void *data );
218 virtual void *GetClientData();
219
220 virtual void SetAcceleratorTable( const wxAcceleratorTable& accel );
221 virtual wxAcceleratorTable *GetAcceleratorTable() { return &m_acceleratorTable; }
222
223 bool IsBeingDeleted();
224
225 void SetId( wxWindowID id );
226 wxWindowID GetId() const;
227
228 void SetCursor( const wxCursor &cursor );
229
230 void WarpPointer(int x, int y);
231
232 virtual void SetToolTip( const wxString &tip );
233 virtual void SetToolTip( wxToolTip *tip );
234 virtual wxToolTip* GetToolTip();
235
236 virtual void Refresh( bool eraseBackground = TRUE, const wxRect *rect = (const wxRect *) NULL );
237 virtual void Clear();
238
239 virtual wxRegion GetUpdateRegion() const;
240 virtual bool IsExposed( int x, int y ) const;
241 virtual bool IsExposed( int x, int y, int w, int h ) const;
242 virtual bool IsExposed( const wxPoint& pt ) const;
243 virtual bool IsExposed( const wxRect& rect ) const;
244
245 virtual wxColour GetBackgroundColour() const;
246 virtual void SetBackgroundColour( const wxColour &colour );
247 virtual wxColour GetForegroundColour() const;
248 virtual void SetForegroundColour( const wxColour &colour );
249
250 virtual int GetCharHeight() const;
251 virtual int GetCharWidth() const;
252 virtual void GetTextExtent( const wxString& string, int *x, int *y,
253 int *descent = (int *) NULL,
254 int *externalLeading = (int *) NULL,
255 const wxFont *theFont = (const wxFont *) NULL, bool use16 = FALSE) const;
256
257 virtual void SetFont( const wxFont &font );
258 virtual wxFont& GetFont() { return m_font; }
259
260 // For backward compatibility
261 inline virtual void SetButtonFont(const wxFont& font) { SetFont(font); }
262 inline virtual void SetLabelFont(const wxFont& font) { SetFont(font); }
263 inline virtual wxFont& GetLabelFont() { return GetFont(); };
264 inline virtual wxFont& GetButtonFont() { return GetFont(); };
265
266 virtual void SetWindowStyleFlag( long flag );
267 virtual long GetWindowStyleFlag() const;
268
269 virtual void CaptureMouse();
270 virtual void ReleaseMouse();
271
272 virtual void SetTitle( const wxString &title );
273 virtual wxString GetTitle() const;
274 virtual void SetName( const wxString &name );
275 virtual wxString GetName() const;
276 virtual wxString GetLabel() const;
277
278 void OnSysColourChanged( wxSysColourChangedEvent &WXUNUSED(event) ) {};
279 void OnKeyDown( wxKeyEvent &event );
280
281 virtual bool IsShown() const;
282
283 virtual void Raise();
284 virtual void Lower();
285
286 virtual bool IsRetained();
287 virtual wxWindow *FindWindow( long id );
288 virtual wxWindow *FindWindow( const wxString& name );
289
290 void AllowDoubleClick( bool WXUNUSED(allow) ) {};
291 void SetDoubleClick( bool WXUNUSED(allow) ) {};
292
293 virtual void ClientToScreen( int *x, int *y );
294 virtual void ScreenToClient( int *x, int *y );
295
296 virtual bool Validate();
297 virtual bool TransferDataToWindow();
298 virtual bool TransferDataFromWindow();
299 void OnInitDialog( wxInitDialogEvent &event );
300 virtual void InitDialog();
301
302 virtual bool PopupMenu( wxMenu *menu, int x, int y );
303
304 #if wxUSE_DRAG_AND_DROP
305 virtual void SetDropTarget( wxDropTarget *dropTarget );
306 virtual wxDropTarget *GetDropTarget() const;
307 #endif
308
309 virtual void SetScrollbar( int orient, int pos, int thumbVisible,
310 int range, bool refresh = TRUE );
311 virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
312 virtual int GetScrollPos( int orient ) const;
313 virtual int GetScrollThumb( int orient ) const;
314 virtual int GetScrollRange( int orient ) const;
315 virtual void ScrollWindow( int dx, int dy, const wxRect* rect = (wxRect *) NULL );
316
317 virtual bool AcceptsFocus() const;
318
319 void UpdateWindowUI();
320
321 // implementation
322
323 virtual wxPoint GetClientAreaOrigin() const;
324 virtual void AdjustForParentClientOrigin( int& x, int& y, int sizeFlags );
325
326 bool HasVMT();
327
328 virtual void OnInternalIdle();
329
330 /* used by all classes in the widget creation process */
331
332 void PreCreation( wxWindow *parent, wxWindowID id, const wxPoint &pos,
333 const wxSize &size, long style, const wxString &name );
334 void PostCreation();
335
336 /* the methods below are required because many native widgets
337 are composed of several subwidgets and setting a style for
338 the widget means setting it for all subwidgets as well.
339 also, it is nor clear, which native widget is the top
340 widget where (most of) the input goes. even tooltips have
341 to be applied to all subwidgets. */
342
343 virtual GtkWidget* GetConnectWidget();
344 virtual bool IsOwnGtkWindow( GdkWindow *window );
345 void ConnectWidget( GtkWidget *widget );
346
347 GtkStyle *GetWidgetStyle();
348 void SetWidgetStyle();
349 virtual void ApplyWidgetStyle();
350
351 virtual void ApplyToolTip( GtkTooltips *tips, const char *tip );
352
353 /* private member variables */
354
355 wxWindow *m_parent;
356 wxList m_children;
357 int m_x,m_y;
358 int m_width,m_height;
359 int m_minWidth,m_minHeight;
360 int m_maxWidth,m_maxHeight;
361 int m_retCode;
362 wxEvtHandler *m_eventHandler;
363 wxValidator *m_windowValidator;
364 #if wxUSE_DRAG_AND_DROP
365 wxDropTarget *m_dropTarget;
366 #endif
367 wxWindowID m_windowId;
368 wxCursor *m_cursor;
369 wxFont m_font;
370 wxColour m_backgroundColour;
371 wxColour m_foregroundColour;
372 wxRegion m_updateRegion;
373 long m_windowStyle;
374 bool m_isShown;
375 bool m_isEnabled;
376 wxString m_windowName;
377 wxAcceleratorTable m_acceleratorTable;
378 wxClientData *m_clientObject;
379 void *m_clientData;
380 wxToolTip *m_toolTip;
381
382 GtkWidget *m_widget;
383 GtkWidget *m_wxwindow;
384 GtkAdjustment *m_hAdjust,*m_vAdjust;
385 float m_oldHorizontalPos;
386 float m_oldVerticalPos;
387 bool m_needParent;
388 bool m_hasScrolling;
389 bool m_isScrolling;
390 bool m_hasVMT;
391 bool m_sizeSet;
392 bool m_resizing;
393 GdkGC *m_scrollGC;
394 GtkStyle *m_widgetStyle;
395 bool m_isStaticBox;
396 bool m_acceptsFocus;
397
398 wxInsertChildFunction m_insertCallback;
399
400 public:
401
402 wxLayoutConstraints *m_constraints;
403 wxList *m_constraintsInvolvedIn;
404 wxSizer *m_windowSizer;
405 wxWindow *m_sizerParent;
406 bool m_autoLayout;
407
408 wxLayoutConstraints *GetConstraints() const;
409 void SetConstraints( wxLayoutConstraints *constraints );
410 void SetAutoLayout( bool autoLayout );
411 bool GetAutoLayout() const;
412 bool Layout();
413 void SetSizer( wxSizer *sizer );
414 wxSizer *GetSizer() const;
415 void SetSizerParent( wxWindow *win );
416 wxWindow *GetSizerParent() const;
417 void UnsetConstraints(wxLayoutConstraints *c);
418 inline wxList *GetConstraintsInvolvedIn() const ;
419 void AddConstraintReference(wxWindow *otherWin);
420 void RemoveConstraintReference(wxWindow *otherWin);
421 void DeleteRelatedConstraints();
422 virtual void ResetConstraints();
423 virtual void SetConstraintSizes(bool recurse = TRUE);
424 virtual bool LayoutPhase1(int *noChanges);
425 virtual bool LayoutPhase2(int *noChanges);
426 virtual bool DoPhase(int);
427 virtual void TransformSizerToActual(int *x, int *y) const ;
428 virtual void SizerSetSize(int x, int y, int w, int h);
429 virtual void SizerMove(int x, int y);
430 virtual void SetSizeConstraint(int x, int y, int w, int h);
431 virtual void MoveConstraint(int x, int y);
432 virtual void GetSizeConstraint(int *w, int *h) const ;
433 virtual void GetClientSizeConstraint(int *w, int *h) const ;
434 virtual void GetPositionConstraint(int *x, int *y) const ;
435
436 private:
437 DECLARE_EVENT_TABLE()
438 };
439
440 #endif // __GTKWINDOWH__