///////////////////////////////////////////////////////////////////////////////
// Name: window.h
-// Purpose: wxWindowBase class - the interface of wxWindowBase
+// Purpose: wxWindowBase class - the interface of wxWindow
// Author: Vadim Zeitlin
// Modified by:
// Created: 01/02/97
#ifndef _WX_WINDOW_H_BASE_
#define _WX_WINDOW_H_BASE_
+#ifdef __GNUG__
+ #pragma interface "windowbase.h"
+#endif
+
// ----------------------------------------------------------------------------
// headers which we must include here
// ----------------------------------------------------------------------------
#include "wx/font.h" // so we can't do without them
#include "wx/colour.h"
#include "wx/region.h"
-#include "wx/accel.h"
+
+#if wxUSE_ACCEL
+ #include "wx/accel.h"
+#endif // wxUSE_ACCEL
// ----------------------------------------------------------------------------
// forward declarations
// ----------------------------------------------------------------------------
+class WXDLLEXPORT wxCaret;
class WXDLLEXPORT wxClientData;
class WXDLLEXPORT wxControl;
class WXDLLEXPORT wxCursor;
-class WXDLLEXPORT wxDc;
+class WXDLLEXPORT wxDC;
class WXDLLEXPORT wxDropTarget;
class WXDLLEXPORT wxItemResource;
class WXDLLEXPORT wxLayoutConstraints;
// label is just the same as the title (but for, e.g., buttons it
// makes more sense to speak about labels)
- wxString GetLabel() const { return GetTitle(); }
+ virtual void SetLabel(const wxString& label) { SetTitle(label); }
+ virtual wxString GetLabel() const { return GetTitle(); }
// the window name is used for ressource setting in X, it is not the
// same as the window title/label
// generate a control id for the controls which were not given one by
// user
- static int NewControlId() { return ++ms_lastControlId; }
+ static int NewControlId() { return --ms_lastControlId; }
+ // get the id of the control following the one with the given
+ // (autogenerated) id
+ static int NextControlId(int id) { return id - 1; }
+ // get the id of the control preceding the one with the given
+ // (autogenerated) id
+ static int PrevControlId(int id) { return id + 1; }
// moving/resizing
// ---------------
// centre with respect to the the parent window
void Centre( int direction = wxHORIZONTAL );
void Center( int direction = wxHORIZONTAL ) { Centre(direction); }
+ void CentreOnParent(int direction = wxHORIZONTAL );
+ void CenterOnParent(int direction = wxHORIZONTAL ) { CentreOnParent(direction); }
// set window size to wrap around its children
virtual void Fit();
inline wxWindow *GetGrandParent() const;
// is this window a top level one?
- bool IsTopLevel() const { return m_parent != 0; }
+ bool IsTopLevel() const;
// it doesn't really change parent, use ReParent() instead
void SetParent( wxWindowBase *parent ) { m_parent = (wxWindow *)parent; }
// validators and client data
// --------------------------
+#if wxUSE_VALIDATORS
// a window may have an associated validator which is used to control
// user input
virtual void SetValidator( const wxValidator &validator );
virtual wxValidator *GetValidator() { return m_windowValidator; }
+#endif // wxUSE_VALIDATORS
// each window may have associated client data: either a pointer to
// wxClientData object in which case it is managed by the window (i.e.
virtual void InitDialog();
+#if wxUSE_ACCEL
// accelerators
// ------------
virtual void SetAcceleratorTable( const wxAcceleratorTable& accel )
{ m_acceleratorTable = accel; }
wxAcceleratorTable *GetAcceleratorTable()
{ return &m_acceleratorTable; }
+#endif // wxUSE_ACCEL
// dialog units translations
// -------------------------
virtual void Clear() = 0;
// adjust DC for drawing on this window
- virtual void PrepareDC( wxDC &dc ) { }
+ virtual void PrepareDC( wxDC & WXUNUSED(dc) ) { }
// the update region of the window contains the areas which must be
// repainted by the program
const wxFont& GetFont() const { return m_font; }
wxFont& GetFont() { return m_font; }
+#if wxUSE_CARET
+ // associate a caret with the window
+ void SetCaret(wxCaret *caret);
+ // get the current caret (may be NULL)
+ wxCaret *GetCaret() const { return m_caret; }
+#endif // wxUSE_CARET
+
// get the (average) character size for the current font
virtual int GetCharHeight() const = 0;
virtual int GetCharWidth() const = 0;
const = 0;
// translate to/from screen/client coordinates (pointers may be NULL)
- virtual void ClientToScreen( int *x, int *y ) const = 0;
- virtual void ScreenToClient( int *x, int *y ) const = 0;
+ void ClientToScreen( int *x, int *y ) const
+ { DoClientToScreen(x, y); }
+ void ScreenToClient( int *x, int *y ) const
+ { DoScreenToClient(x, y); }
+ wxPoint ClientToScreen(const wxPoint& pt) const
+ {
+ int x = pt.x, y = pt.y;
+ DoClientToScreen(&x, &y);
+
+ return wxPoint(x, y);
+ }
+
+ wxPoint ScreenToClient(const wxPoint& pt) const
+ {
+ int x = pt.x, y = pt.y;
+ DoScreenToClient(&x, &y);
+
+ return wxPoint(x, y);
+ }
// misc
// ----
void OnSysColourChanged( wxSysColourChangedEvent& event );
void OnInitDialog( wxInitDialogEvent &event );
-/*
- What is this doing in the platform independent part?
-
- // accessors
- WXWidget GetHandle() const { return m_widget; }
-
- // the window handle (for the underlying windowing system) and the window
- // id - a number which uniquely identifies a window among its siblings
- // unless it is -1
- union
- {
- // we have 2 common names for this member, one for MSW and the other
- // for the rest of the world
- WXWidget m_widget;
- WXWidget m_hWnd;
- };
-*/
+ // get the haqndle of the window for the underlying window system: this
+ // is only used for wxWin itself or for user code which wants to call
+ // platform-specific APIs
+ virtual WXWidget GetHandle() const = 0;
+protected:
+ // the window id - a number which uniquely identifies a window among
+ // its siblings unless it is -1
wxWindowID m_windowId;
// the parent window of this window (or NULL) and the list of the children
// changed with SetEventHandler()
wxEvtHandler *m_eventHandler;
+#if wxUSE_VALIDATORS
// associated validator or NULL if none
wxValidator *m_windowValidator;
+#endif // wxUSE_VALIDATORS
#if wxUSE_DRAG_AND_DROP
wxDropTarget *m_dropTarget;
wxFont m_font;
wxColour m_backgroundColour, m_foregroundColour;
+#if wxUSE_CARET
+ wxCaret *m_caret;
+#endif // wxUSE_CARET
+
// the region which should be repainted in response to paint event
wxRegion m_updateRegion;
+#if wxUSE_ACCEL
// the accelerator table for the window which translates key strokes into
// command events
wxAcceleratorTable m_acceleratorTable;
+#endif // wxUSE_ACCEL
// user data associated with the window: either an object which will be
// deleted by the window when it's deleted or some raw pointer which we do
// overloaded Something()s in terms of DoSomething() which will be the
// only one to be virtual.
+ // coordinates translation
+ virtual void DoClientToScreen( int *x, int *y ) const = 0;
+ virtual void DoScreenToClient( int *x, int *y ) const = 0;
+
// retrieve the position/size of the window
virtual void DoGetPosition( int *x, int *y ) const = 0;
virtual void DoGetSize( int *width, int *height ) const = 0;
// contains the last id generated by NewControlId
static int ms_lastControlId;
+ DECLARE_NO_COPY_CLASS(wxWindowBase);
DECLARE_EVENT_TABLE()
};
// global function
// ----------------------------------------------------------------------------
-extern wxWindow* WXDLLEXPORT wxGetActiveWindow();
-inline int WXDLLEXPORT NewControlId() { return wxWindowBase::NewControlId(); }
+WXDLLEXPORT extern wxWindow* wxGetActiveWindow();
+inline WXDLLEXPORT int NewControlId() { return wxWindowBase::NewControlId(); }
#endif
// _WX_WINDOW_H_BASE_