// override some base class virtuals
virtual bool Destroy();
virtual bool IsTopLevel() const { return TRUE; }
+ virtual wxSize GetMaxSize() const;
// event handlers
void OnCloseWindow(wxCloseEvent& event);
#endif // _WX_TOPLEVEL_BASE_H_
+
+// vi:sts=4:sw=4:et
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 ); }
+
// window state
// ------------
#endif
// _WX_WINDOW_H_BASE_
+
+// vi:sts=4:sw=4:et
void wxSizer::SetSizeHints( wxWindow *window )
{
+ // Preserve the window's max size hints, but set the
+ // lower bound according to the sizer calculations.
+
wxSize size = FitSize( window );
- window->SetSizeHints( size.x, size.y );
+ window->SetSizeHints( size.x,
+ size.y,
+ window->GetMaxWidth(),
+ window->GetMaxHeight() );
}
-wxSize wxSizer::GetMaxWindowSize( wxWindow *WXUNUSED(window) )
+wxSize wxSizer::GetMaxWindowSize( wxWindow *window )
{
- wxRect rect = wxGetClientDisplayRect();
- wxSize sizeMax (rect.width,rect.height);
-
- // Sorry, but this bit is wrong -- it makes a window that should just be
- // able to fit onto the screen, not fit on the screen. -- JACS
-#if 0
- // Make the max size a bit smaller than the visible portion of
- // the screen. A window which takes the entire screen doesn't
- // look very nice either
- sizeMax.x *= 9;
- sizeMax.x /= 10;
-
- sizeMax.y *= 9;
- sizeMax.y /= 10;
-#endif
-
- return sizeMax;
+ return window->GetMaxSize();
}
wxSize wxSizer::GetMinWindowSize( wxWindow *window )
wxSize size = GetMinWindowSize( window );
wxSize sizeMax = GetMaxWindowSize( window );
- if ( size.x > sizeMax.x )
+ // Limit the size if sizeMax != wxDefaultSize
+
+ if ( size.x > sizeMax.x && sizeMax.x != -1 )
size.x = sizeMax.x;
- if ( size.y > sizeMax.y )
+ if ( size.y > sizeMax.y && sizeMax.y != -1 )
size.y = sizeMax.y;
return size;
}
#endif // wxUSE_NOTEBOOK
+
+// vi:sts=4:sw=4:et
return TRUE;
}
+wxSize wxTopLevelWindowBase::GetMaxSize() const
+{
+ wxSize size( GetMaxWidth(), GetMaxHeight() );
+ int w, h;
+
+ wxClientDisplayRect( 0, 0, &w, &h );
+
+ if( size.GetWidth() == -1 )
+ size.SetWidth( w );
+
+ if( size.GetHeight() == -1 )
+ size.SetHeight( h );
+
+ return size;
+}
+
// ----------------------------------------------------------------------------
// wxTopLevelWindow size management: we exclude the areas taken by
// menu/status/toolbars from the client area, so the client area is what's
return GetEventHandler()->ProcessEvent(event);
}
+
+// vi:sts=4:sw=4:et