source: GTP/trunk/Lib/Illum/GPUObscurancesGT/Libraries/wx/include/wx/univ/window.h @ 1648

Revision 1648, 9.4 KB checked in by igarcia, 18 years ago (diff)
Line 
1///////////////////////////////////////////////////////////////////////////////
2// Name:        wx/univ/window.h
3// Purpose:     wxWindow class which is the base class for all
4//              wxUniv port controls, it supports the customization of the
5//              window drawing and input processing.
6// Author:      Vadim Zeitlin
7// Modified by:
8// Created:     06.08.00
9// RCS-ID:      $Id: window.h,v 1.35 2005/08/16 20:32:31 ABX Exp $
10// Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
11// Licence:     wxWindows licence
12///////////////////////////////////////////////////////////////////////////////
13
14#ifndef _WX_UNIV_WINDOW_H_
15#define _WX_UNIV_WINDOW_H_
16
17#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
18    #pragma interface "univwindow.h"
19#endif
20
21#include "wx/bitmap.h"      // for m_bitmapBg
22
23class WXDLLEXPORT wxControlRenderer;
24class WXDLLEXPORT wxEventLoop;
25class WXDLLEXPORT wxMenu;
26class WXDLLEXPORT wxMenuBar;
27class WXDLLEXPORT wxRenderer;
28class WXDLLEXPORT wxScrollBar;
29
30#ifdef __WXX11__
31#define wxUSE_TWO_WINDOWS 1
32#else
33#define wxUSE_TWO_WINDOWS 0
34#endif
35
36// ----------------------------------------------------------------------------
37// wxWindow
38// ----------------------------------------------------------------------------
39
40#if defined(__WXMSW__)
41#define wxWindowNative wxWindowMSW
42#elif defined(__WXGTK__)
43#define wxWindowNative wxWindowGTK
44#elif defined(__WXMGL__)
45#define wxWindowNative wxWindowMGL
46#elif defined(__WXX11__)
47#define wxWindowNative wxWindowX11
48#elif defined(__WXMAC__)
49#define wxWindowNative wxWindowMac
50#endif
51
52class WXDLLEXPORT wxWindow : public wxWindowNative
53{
54public:
55    // ctors and create functions
56    // ---------------------------
57
58    wxWindow() { Init(); }
59
60    wxWindow(wxWindow *parent,
61             wxWindowID id,
62             const wxPoint& pos = wxDefaultPosition,
63             const wxSize& size = wxDefaultSize,
64             long style = 0,
65             const wxString& name = wxPanelNameStr)
66        : wxWindowNative(parent, id, pos, size, style | wxCLIP_CHILDREN, name)
67        { Init(); }
68
69    bool Create(wxWindow *parent,
70                wxWindowID id,
71                const wxPoint& pos = wxDefaultPosition,
72                const wxSize& size = wxDefaultSize,
73                long style = 0,
74                const wxString& name = wxPanelNameStr);
75
76    virtual ~wxWindow();
77
78    // background pixmap support
79    // -------------------------
80
81    virtual void SetBackground(const wxBitmap& bitmap,
82                               int alignment = wxALIGN_CENTRE,
83                               wxStretch stretch = wxSTRETCH_NOT);
84
85    const wxBitmap& GetBackgroundBitmap(int *alignment = NULL,
86                                        wxStretch *stretch = NULL) const;
87
88    // scrollbars: we (re)implement it ourselves using our own scrollbars
89    // instead of the native ones
90    // ------------------------------------------------------------------
91
92    virtual void SetScrollbar(int orient,
93                              int pos,
94                              int page,
95                              int range,
96                              bool refresh = true );
97    virtual void SetScrollPos(int orient, int pos, bool refresh = true);
98    virtual int GetScrollPos(int orient) const;
99    virtual int GetScrollThumb(int orient) const;
100    virtual int GetScrollRange(int orient) const;
101    virtual void ScrollWindow(int dx, int dy,
102                              const wxRect* rect = (wxRect *) NULL);
103
104    // take into account the borders here
105    virtual wxPoint GetClientAreaOrigin() const;
106
107    // popup menu support
108    // ------------------
109
110    // NB: all menu related functions are implemented in menu.cpp
111
112#if wxUSE_MENUS
113    virtual bool DoPopupMenu(wxMenu *menu, int x, int y);
114
115    // this is wxUniv-specific private method to be used only by wxMenu
116    void DismissPopupMenu();
117#endif // wxUSE_MENUS
118
119    // miscellaneous other methods
120    // ---------------------------
121
122    // get the state information
123    virtual bool IsFocused() const;
124    virtual bool IsCurrent() const;
125    virtual bool IsPressed() const;
126    virtual bool IsDefault() const;
127
128    // return all state flags at once (combination of wxCONTROL_XXX values)
129    int GetStateFlags() const;
130
131    // set the "highlighted" flag and return true if it changed
132    virtual bool SetCurrent(bool doit = true);
133
134    // get the scrollbar (may be NULL) for the given orientation
135    wxScrollBar *GetScrollbar(int orient) const
136    {
137        return orient & wxVERTICAL ? m_scrollbarVert : m_scrollbarHorz;
138    }
139
140    // methods used by wxColourScheme to choose the colours for this window
141    // --------------------------------------------------------------------
142
143    // return true if this is a panel/canvas window which contains other
144    // controls only
145    virtual bool IsCanvasWindow() const { return false; }
146
147    // return true if this control can be highlighted when the mouse is over
148    // it (the theme decides itself whether it is really highlighted or not)
149    virtual bool CanBeHighlighted() const { return false; }
150
151    // return true if we should use the colours/fonts returned by the
152    // corresponding GetXXX() methods instead of the default ones
153    bool UseFgCol() const { return m_hasFgCol; }
154    bool UseFont() const { return m_hasFont; }
155
156    // return true if this window serves as a container for the other windows
157    // only and doesn't get any input itself
158    virtual bool IsStaticBox() const { return false; }
159
160    // returns the (low level) renderer to use for drawing the control by
161    // querying the current theme
162    wxRenderer *GetRenderer() const { return m_renderer; }
163
164    // scrolling helper: like ScrollWindow() except that it doesn't refresh the
165    // uncovered window areas but returns the rectangle to update (don't call
166    // this with both dx and dy non zero)
167    wxRect ScrollNoRefresh(int dx, int dy, const wxRect *rect = NULL);
168
169    // after scrollbars are added or removed they must be refreshed by calling
170    // this function
171    void RefreshScrollbars();
172
173    // erase part of the control
174    virtual void EraseBackground(wxDC& dc, const wxRect& rect);
175
176    // overridden base class methods
177    // -----------------------------
178
179    // the rect coordinates are, for us, in client coords, but if no rect is
180    // specified, the entire window is refreshed
181    virtual void Refresh(bool eraseBackground = true,
182                         const wxRect *rect = (const wxRect *) NULL);
183
184    // we refresh the window when it is dis/enabled
185    virtual bool Enable(bool enable = true);
186
187    // should we use the standard control colours or not?
188    virtual bool ShouldInheritColours() const { return false; }
189
190protected:
191    // common part of all ctors
192    void Init();
193
194    // overridden base class virtuals
195
196    // we deal with the scrollbars in these functions
197    virtual void DoSetClientSize(int width, int height);
198    virtual void DoGetClientSize(int *width, int *height) const;
199    virtual wxHitTest DoHitTest(wxCoord x, wxCoord y) const;
200
201    // event handlers
202    void OnSize(wxSizeEvent& event);
203    void OnNcPaint(wxNcPaintEvent& event);
204    void OnPaint(wxPaintEvent& event);
205    void OnErase(wxEraseEvent& event);
206
207#if wxUSE_ACCEL || wxUSE_MENUS
208    void OnKeyDown(wxKeyEvent& event);
209#endif // wxUSE_ACCEL
210
211#if wxUSE_MENUS
212    void OnChar(wxKeyEvent& event);
213    void OnKeyUp(wxKeyEvent& event);
214#endif // wxUSE_MENUS
215
216    // draw the control background, return true if done
217    virtual bool DoDrawBackground(wxDC& dc);
218
219    // draw the controls border
220    virtual void DoDrawBorder(wxDC& dc, const wxRect& rect);
221
222    // draw the controls contents
223    virtual void DoDraw(wxControlRenderer *renderer);
224
225    // calculate the best size for the client area of the window: default
226    // implementation of DoGetBestSize() uses this method and adds the border
227    // width to the result
228    virtual wxSize DoGetBestClientSize() const;
229    virtual wxSize DoGetBestSize() const;
230
231    // adjust the size of the window to take into account its borders
232    wxSize AdjustSize(const wxSize& size) const;
233
234    // put the scrollbars along the edges of the window
235    void PositionScrollbars();
236
237#if wxUSE_MENUS
238    // return the menubar of the parent frame or NULL
239    wxMenuBar *GetParentFrameMenuBar() const;
240#endif // wxUSE_MENUS
241
242    // the renderer we use
243    wxRenderer *m_renderer;
244
245    // background bitmap info
246    wxBitmap  m_bitmapBg;
247    int       m_alignBgBitmap;
248    wxStretch m_stretchBgBitmap;
249
250    // old size
251    wxSize m_oldSize;
252
253    // is the mouse currently inside the window?
254    bool m_isCurrent:1;
255
256#ifdef __WXMSW__
257
258#if wxABI_VERSION >= 20602
259public:
260#endif
261    // override MSWWindowProc() to process WM_NCHITTEST
262    WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
263
264#endif // __WXMSW__
265
266private:
267    // the window scrollbars
268    wxScrollBar *m_scrollbarHorz,
269                *m_scrollbarVert;
270
271#if wxUSE_MENUS
272    // the current modal event loop for the popup menu we show or NULL
273    static wxEventLoop *ms_evtLoopPopup;
274
275    // the last window over which Alt was pressed (used by OnKeyUp)
276    static wxWindow *ms_winLastAltPress;
277#endif // wxUSE_MENUS
278
279    DECLARE_DYNAMIC_CLASS(wxWindow)
280    DECLARE_EVENT_TABLE()
281};
282
283#endif // _WX_UNIV_WINDOW_H_
284
Note: See TracBrowser for help on using the repository browser.