#ifndef _WX_WINDOW_H_BASE_
#define _WX_WINDOW_H_BASE_
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "windowbase.h"
#endif
*h = s.y;
}
- // the generic centre function - centers the window on parent by
+ // There are times (and windows) where 'Best' size and 'Min' size
+ // are vastly out of sync. This should be remedied somehow, but in
+ // the meantime, this method will return the larger of BestSize
+ // (the window's smallest legible size), and any user specified
+ // MinSize hint.
+ wxSize GetAdjustedBestSize() const
+ {
+ wxSize s( DoGetBestSize() );
+ return wxSize( wxMax( s.x, GetMinWidth() ), wxMax( s.y, GetMinHeight() ) );
+ }
+
+ // the generic centre function - centers the window on parent by`
// default or on screen if it doesn't have parent or
// wxCENTER_ON_SCREEN flag is given
void Centre( int direction = wxBOTH );
// set window size to wrap around its children
virtual void Fit();
+ // set virtual size to satisfy children
+ virtual void FitInside();
+
// set min/max size of the window
virtual void SetSizeHints( int minW, int minH,
int maxW = -1, int maxH = -1,
virtual void DoSetVirtualSize( int x, int y );
virtual wxSize DoGetVirtualSize() const; // { return m_virtualSize; }
+ // Return the largest of ClientSize and BestSize (as determined
+ // by a sizer, interior children, or other means)
+
+ virtual wxSize GetBestVirtualSize() const
+ {
+ wxSize client( GetClientSize() );
+ wxSize best( GetBestSize() );
+
+ return wxSize( wxMax( client.x, best.x ), wxMax( client.y, best.y ) );
+ }
+
// window state
// ------------
// was changed, FALSE otherwise (error or newParent == oldParent)
virtual bool Reparent( wxWindowBase *newParent );
+ // implementation mostly
+ virtual void AddChild( wxWindowBase *child );
+ virtual void RemoveChild( wxWindowBase *child );
+
+ // looking for windows
+ // -------------------
+
// find window among the descendants of this one either by id or by
// name (return NULL if not found)
wxWindow *FindWindow( long id );
wxWindow *FindWindow( const wxString& name );
- // implementation mostly
- virtual void AddChild( wxWindowBase *child );
- virtual void RemoveChild( wxWindowBase *child );
+ // Find a window among any window (all return NULL if not found)
+ static wxWindow *FindWindowById( long id, const wxWindow *parent = NULL );
+ static wxWindow *FindWindowByName( const wxString& name,
+ const wxWindow *parent = NULL );
+ static wxWindow *FindWindowByLabel( const wxString& label,
+ const wxWindow *parent = NULL );
// event handler stuff
// -------------------
#endif // wxUSE_PALETTE
protected:
+#if wxUSE_CONSTRAINTS
+ // satisfy the constraints for the windows but don't set the window sizes
+ void SatisfyConstraints();
+#endif // wxUSE_CONSTRAINTS
// the window id - a number which uniquely identifies a window among
// its siblings unless it is -1
// the minimal allowed size for the window (no minimal size if variable(s)
// contain(s) -1)
- int m_minWidth, m_minHeight, m_maxWidth, m_maxHeight;
+ int m_minWidth,
+ m_minHeight,
+ m_maxWidth,
+ m_maxHeight;
// event handler for this window: usually is just 'this' but may be
// changed with SetEventHandler()
// set the best size for the control if the default size was given:
// replaces the fields of size == -1 with the best values for them and
// calls SetSize() if needed
+ //
+ // This function is rather unfortunately named.. it's really just a
+ // smarter SetSize / convenience function for expanding wxDefaultSize.
+ // Note that it does not influence the value returned by GetBestSize
+ // at all.
void SetBestSize(const wxSize& size)
{
+ // the size only needs to be changed if the current size is incomplete,
+ // i.e. one of the components was specified as default -- so if both
+ // were given, simply don't do anything
if ( size.x == -1 || size.y == -1 )
{
wxSize sizeBest = DoGetBestSize();