// Name: wx/window.h
// Purpose: wxWindowBase class - the interface of wxWindow
// Author: Vadim Zeitlin
-// Modified by:
+// Modified by: Ron Lee
// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c) wxWindows team
#include "wx/validate.h" // for wxDefaultValidator (always include it)
+#if wxUSE_PALETTE
+ #include "wx/dcclient.h"
+ #include "wx/palette.h"
+#endif // wxUSE_PALETTE
+
#if wxUSE_ACCEL
#include "wx/accel.h"
#endif // wxUSE_ACCEL
int maxW = -1, int maxH = -1,
int incW = -1, int incH = -1 );
- int GetMinWidth() const { return m_minWidth; }
- int GetMinHeight() const { return m_minHeight; }
+ virtual void SetVirtualSizeHints( int minW, int minH,
+ int maxW = -1, int maxH = -1 );
+
+ virtual int GetMinWidth() const { return m_minWidth; }
+ virtual int GetMinHeight() const { return m_minHeight; }
int GetMaxWidth() const { return m_maxWidth; }
int GetMaxHeight() const { return m_maxHeight; }
+ // Override this method to control the values given to Sizers etc.
+ virtual wxSize GetMaxSize() const { return wxSize( m_maxWidth, m_maxHeight ); }
+
+ // Methods for accessing the virtual size of a window. For most
+ // windows this is just the client area of the window, but for
+ // some like scrolled windows it is more or less independent of
+ // the screen window size. You may override the DoXXXVirtual
+ // methods below for classes where that is is the case.
+
+ void SetVirtualSize( const wxSize &size ) { DoSetVirtualSize( size.x, size.y ); }
+ void SetVirtualSize( int x, int y ) { DoSetVirtualSize( x, y ); }
+
+ wxSize GetVirtualSize() const { return DoGetVirtualSize(); }
+ void GetVirtualSize( int *x, int *y ) const
+ {
+ wxSize s( DoGetVirtualSize() );
+
+ if( x )
+ *x = s.GetWidth();
+ if( y )
+ *y = s.GetHeight();
+ }
+
+ // Override these methods for windows that have a virtual size
+ // independent of their client size. eg. the virtual area of a
+ // wxScrolledWindow. Default is to alias VirtualSize to ClientSize.
+
+ virtual void DoSetVirtualSize( int x, int y );
+ virtual wxSize DoGetVirtualSize() const; // { return m_virtualSize; }
+
// window state
// ------------
// extra style: the less often used style bits which can't be set with
// SetWindowStyleFlag()
- void SetExtraStyle(long exStyle) { m_exStyle = exStyle; }
+ virtual void SetExtraStyle(long exStyle) { m_exStyle = exStyle; }
long GetExtraStyle() const { return m_exStyle; }
// make the window modal (all other windows unresponsive)
// set focus to this window
virtual void SetFocus() = 0;
+ // set focus to this window as the result of a keyboard action
+ virtual void SetFocusFromKbd() { SetFocus(); }
+
// return the window which currently has the focus or NULL
static wxWindow *FindFocus() /* = 0: implement in derived classes */;
void SetConstraints( wxLayoutConstraints *constraints );
wxLayoutConstraints *GetConstraints() const { return m_constraints; }
- // when using constraints, it makes sense to update children positions
- // automatically whenever the window is resized - this is done if
- // autoLayout is on
- void SetAutoLayout( bool autoLayout ) { m_autoLayout = autoLayout; }
- bool GetAutoLayout() const { return m_autoLayout; }
-
- // do layout the window and its children
- virtual bool Layout();
-
// implementation only
void UnsetConstraints(wxLayoutConstraints *c);
wxWindowList *GetConstraintsInvolvedIn() const
virtual void GetClientSizeConstraint(int *w, int *h) const ;
virtual void GetPositionConstraint(int *x, int *y) const ;
+#endif // wxUSE_CONSTRAINTS
+
+ // when using constraints or sizers, it makes sense to update
+ // children positions automatically whenever the window is resized
+ // - this is done if autoLayout is on
+ void SetAutoLayout( bool autoLayout ) { m_autoLayout = autoLayout; }
+ bool GetAutoLayout() const { return m_autoLayout; }
+
+ // lay out the window and its children
+ virtual bool Layout();
+
// sizers
- // TODO: what are they and how do they work??
- void SetSizer( wxSizer *sizer );
+ void SetSizer(wxSizer *sizer, bool deleteOld = TRUE );
+ void SetSizerAndFit( wxSizer *sizer, bool deleteOld = TRUE );
+
wxSizer *GetSizer() const { return m_windowSizer; }
-#endif // wxUSE_CONSTRAINTS
+
+ // Track if this window is a member of a sizer
+ void SetContainingSizer(wxSizer* sizer) { m_containingSizer = sizer; }
+ wxSizer *GetContainingSizer() const { return m_containingSizer; }
// backward compatibility
// ----------------------
// platform-specific APIs
virtual WXWidget GetHandle() const = 0;
+#if wxUSE_PALETTE
+ // Store the palette used by DCs in wxWindow so that the dcs can share
+ // a palette. And we can respond to palette messages.
+ wxPalette GetPalette() const { return m_palette; }
+
+ // When palette is changed tell the DC to set the system palette to the
+ // new one.
+ void SetPalette(const wxPalette& pal);
+
+ // return true if we have a specific palette
+ bool HasCustomPalette() const { return m_hasCustomPalette; }
+
+ // return the first parent window with a custom palette or NULL
+ wxWindow *GetAncestorWithCustomPalette() const;
+#endif // wxUSE_PALETTE
+
protected:
+
// the window id - a number which uniquely identifies a window among
// its siblings unless it is -1
wxWindowID m_windowId;
// constraints this window is involved in
wxWindowList *m_constraintsInvolvedIn;
+#endif // wxUSE_CONSTRAINTS
- // top level and the parent sizers
- // TODO what's this and how does it work?)
+ // this window's sizer
wxSizer *m_windowSizer;
- wxWindowBase *m_sizerParent;
+
+ // The sizer this window is a member of, if any
+ wxSizer *m_containingSizer;
// Layout() window automatically when its size changes?
bool m_autoLayout:1;
-#endif // wxUSE_CONSTRAINTS
// window state
bool m_isShown:1;
wxString m_windowName;
bool m_themeEnabled;
-protected:
+#if wxUSE_PALETTE
+ wxPalette m_palette;
+ bool m_hasCustomPalette;
+#endif // wxUSE_PALETTE
+
+ // Virtual size (scrolling)
+ wxSize m_virtualSize;
+
+ int m_minVirtualWidth; // VirtualSizeHints
+ int m_minVirtualHeight;
+ int m_maxVirtualWidth;
+ int m_maxVirtualHeight;
+
// common part of all ctors: it is not virtual because it is called from
// ctor
void InitBase();
// Makes an adjustment to the window position (for example, a frame that has
// a toolbar that it manages itself).
- virtual void AdjustForParentClientOrigin(int& x, int& y, int sizeFlags);
+ virtual void AdjustForParentClientOrigin(int& x, int& y, int sizeFlags) const;
+
private:
+
// contains the last id generated by NewControlId
static int ms_lastControlId;
#define sm_classwxWindowGTK sm_classwxWindow
#endif // wxUniv
#include "wx/gtk/window.h"
+#elif defined(__WXX11__)
+ #ifdef __WXUNIVERSAL__
+ #define wxWindowNative wxWindowX11
+ #else // !wxUniv
+ #define wxWindowX11 wxWindow
+ #define sm_classwxWindowX11 sm_classwxWindow
+ #endif // wxUniv
+ #include "wx/x11/window.h"
#elif defined(__WXMGL__)
#ifdef __WXUNIVERSAL__
#define wxWindowNative wxWindowMGL
// get the currently active window of this application or NULL
WXDLLEXPORT extern wxWindow *wxGetActiveWindow();
+// get the (first) top level parent window
+WXDLLEXPORT wxWindow* wxGetTopLevelParent(wxWindow *win);
+
// deprecated (doesn't start with 'wx' prefix), use wxWindow::NewControlId()
inline int NewControlId() { return wxWindowBase::NewControlId(); }
#endif
// _WX_WINDOW_H_BASE_
+