]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk1/window.h
Moved all WXDLLEXPORT's to be before the return type in order to make
[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 //-----------------------------------------------------------------------------
19 // callback definition for inserting a window (internal)
20 //-----------------------------------------------------------------------------
21
22 typedef void (*wxInsertChildFunction)( wxWindow*, wxWindow* );
23
24 //-----------------------------------------------------------------------------
25 // wxWindow
26 //-----------------------------------------------------------------------------
27
28 class wxWindow : public wxWindowBase
29 {
30 DECLARE_DYNAMIC_CLASS(wxWindow)
31
32 public:
33 // creating the window
34 // -------------------
35 wxWindow();
36 wxWindow(wxWindow *parent,
37 wxWindowID id,
38 const wxPoint& pos = wxDefaultPosition,
39 const wxSize& size = wxDefaultSize,
40 long style = 0,
41 const wxString& name = wxPanelNameStr);
42 bool Create(wxWindow *parent,
43 wxWindowID id,
44 const wxPoint& pos = wxDefaultPosition,
45 const wxSize& size = wxDefaultSize,
46 long style = 0,
47 const wxString& name = wxPanelNameStr);
48 virtual ~wxWindow();
49
50 // implement base class (pure) virtual methods
51 // -------------------------------------------
52 virtual bool Destroy();
53
54 virtual void Raise();
55 virtual void Lower();
56
57 virtual bool Show( bool show = TRUE );
58 virtual bool Enable( bool enable = TRUE );
59
60 virtual bool IsRetained() const;
61
62 virtual void SetFocus();
63 virtual bool AcceptsFocus() const;
64
65 virtual bool Reparent( wxWindow *newParent );
66
67 virtual void WarpPointer(int x, int y);
68 virtual void CaptureMouse();
69 virtual void ReleaseMouse();
70
71 virtual void Refresh( bool eraseBackground = TRUE,
72 const wxRect *rect = (const wxRect *) NULL );
73 virtual void Clear();
74
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 );
79
80 virtual int GetCharHeight() const;
81 virtual int GetCharWidth() const;
82 virtual void GetTextExtent(const wxString& string,
83 int *x, int *y,
84 int *descent = (int *) NULL,
85 int *externalLeading = (int *) NULL,
86 const wxFont *theFont = (const wxFont *) NULL)
87 const;
88
89 virtual void ClientToScreen( int *x, int *y ) const;
90 virtual void ScreenToClient( int *x, int *y ) const;
91 wxPoint ClientToScreen(const wxPoint& pt) const
92 { int x = pt.x; int y = pt.y; ClientToScreen(& x, & y); return wxPoint(x, y); }
93 wxPoint ScreenToClient(const wxPoint& pt) const
94 { int x = pt.x; int y = pt.y; ScreenToClient(& x, & y); return wxPoint(x, y); }
95
96 virtual bool PopupMenu( wxMenu *menu, int x, int y );
97
98 virtual void SetScrollbar( int orient, int pos, int thumbVisible,
99 int range, bool refresh = TRUE );
100 virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
101 virtual int GetScrollPos( int orient ) const;
102 virtual int GetScrollThumb( int orient ) const;
103 virtual int GetScrollRange( int orient ) const;
104 virtual void ScrollWindow( int dx, int dy,
105 const wxRect* rect = (wxRect *) NULL );
106
107 #if wxUSE_DRAG_AND_DROP
108 virtual void SetDropTarget( wxDropTarget *dropTarget );
109 #endif // wxUSE_DRAG_AND_DROP
110
111 // implementation
112 // --------------
113
114 virtual WXWidget GetHandle() const { return m_widget; }
115
116 // wxWindows callbacks
117 void OnKeyDown( wxKeyEvent &event );
118
119 // also sets the global flag
120 void SetScrolling(bool scroll);
121
122 bool HasScrolling() const { return m_hasScrolling; }
123 bool IsScrolling() const { return m_isScrolling; }
124
125 /* I don't want users to override what's done in idle so everything that
126 has to be done in idle time in order for wxGTK to work is done in
127 OnInternalIdle */
128 virtual void OnInternalIdle();
129
130 /* For compatibility across platforms (not in event table) */
131 void OnIdle(wxIdleEvent& WXUNUSED(event)) {};
132
133 /* used by all classes in the widget creation process */
134 void PreCreation( wxWindow *parent, wxWindowID id, const wxPoint &pos,
135 const wxSize &size, long style, const wxString &name );
136 void PostCreation();
137
138 void InsertChild(wxWindow *child) { (*m_insertCallback)(this, child); }
139 void DoAddChild(wxWindow *child) { AddChild(child); InsertChild(child); }
140
141 /* the methods below are required because many native widgets
142 are composed of several subwidgets and setting a style for
143 the widget means setting it for all subwidgets as well.
144 also, it is nor clear, which native widget is the top
145 widget where (most of) the input goes. even tooltips have
146 to be applied to all subwidgets. */
147
148 virtual GtkWidget* GetConnectWidget();
149 virtual bool IsOwnGtkWindow( GdkWindow *window );
150 void ConnectWidget( GtkWidget *widget );
151
152 // creates a new widget style if none is there
153 // and sets m_widgetStyle to this value.
154 GtkStyle *GetWidgetStyle();
155
156 // called by SetFont() and SetXXXColour etc
157 void SetWidgetStyle();
158
159 // overridden in many GTK widgets
160 virtual void ApplyWidgetStyle();
161
162 #if wxUSE_TOOLTIPS
163 virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip );
164 #endif // wxUSE_TOOLTIPS
165
166 // called from GTK signales handlers. it indicates that
167 // the layouting functions have to be called later on
168 // (i.e. in idle time, implemented in OnInternalIdle() ).
169 void UpdateSize() { m_sizeSet = FALSE; }
170
171 // position and size of the window
172 int m_x, m_y;
173 int m_width, m_height;
174
175 // see the docs in src/gtk/window.cpp
176 GtkWidget *m_widget;
177 GtkWidget *m_wxwindow;
178
179 // scrolling stuff
180 GtkAdjustment *m_hAdjust,*m_vAdjust;
181 float m_oldHorizontalPos;
182 float m_oldVerticalPos;
183
184 // we need an extra XGC flag set to get exposed
185 // events from overlapping children upon moving
186 // them. this flag will be set in this GC and
187 // the GC will be used in wxWindow::ScrollWindow().
188 GdkGC *m_scrollGC;
189
190 // extra (wxGTK-specific) flags
191 bool m_needParent:1; /* ! wxFrame, wxDialog, wxNotebookPage ? */
192 bool m_hasScrolling:1;
193 bool m_isScrolling:1;
194 bool m_hasVMT:1;
195 bool m_sizeSet:1;
196 bool m_resizing:1;
197 bool m_isStaticBox:1; /* faster than IS_KIND_OF */
198 bool m_isFrame:1; /* faster than IS_KIND_OF */
199 bool m_acceptsFocus:1; /* ! wxStaticBox etc. */
200
201 // these are true if the style were set before the widget was realized
202 // (typcally in the constructor) but the actual GTK style must not be set
203 // before the widget has been "realized"
204 bool m_delayedFont:1;
205 bool m_delayedForegroundColour:1;
206 bool m_delayedBackgroundColour:1;
207 bool m_delayedCursor:1;
208
209 // contains GTK's widgets internal information about non-default widget
210 // font and colours. we create one for each widget that gets any
211 // non-default attribute set via SetFont() or SetForegroundColour() /
212 // SetBackgroundColour().
213 GtkStyle *m_widgetStyle;
214
215 // C++ has no virtual methods in the constrcutor of any class but we need
216 // different methods of inserting a child window into a wxFrame,
217 // wxMDIFrame, wxNotebook etc. this is the callback that will get used.
218 wxInsertChildFunction m_insertCallback;
219
220 // implement the base class pure virtuals
221 virtual void DoGetPosition( int *x, int *y ) const;
222 virtual void DoGetSize( int *width, int *height ) const;
223 virtual void DoGetClientSize( int *width, int *height ) const;
224 virtual void DoSetSize(int x, int y,
225 int width, int height,
226 int sizeFlags = wxSIZE_AUTO);
227 virtual void DoSetClientSize(int width, int height);
228
229 #if wxUSE_TOOLTIPS
230 virtual void DoSetToolTip( wxToolTip *tip );
231 #endif // wxUSE_TOOLTIPS
232
233 // common part of all ctors (can't be virtual because called from ctor)
234 void Init();
235
236 private:
237 DECLARE_NO_COPY_CLASS(wxWindow);
238 DECLARE_EVENT_TABLE()
239 };
240
241 #endif // __GTKWINDOWH__