]> git.saurik.com Git - wxWidgets.git/commitdiff
Added GetMaxSize virtual method for use by sizers.
authorRon Lee <ron@debian.org>
Sat, 9 Mar 2002 02:58:13 +0000 (02:58 +0000)
committerRon Lee <ron@debian.org>
Sat, 9 Mar 2002 02:58:13 +0000 (02:58 +0000)
Modified wxSizer to use it instead of crushing all windows to
the display size.

Currently only top level windows are limited to display size,
all other windows are unlimited (inside the clipping region of
their tlw).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14511 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/toplevel.h
include/wx/window.h
src/common/sizer.cpp
src/common/toplvcmn.cpp
src/common/wincmn.cpp

index f5a64871b74ce58cc6604a974d351416bf2b016b..ae36a9fa4224e9e3d94832ede7ffb5cd8db18222 100644 (file)
@@ -113,6 +113,7 @@ public:
     // override some base class virtuals
     virtual bool Destroy();
     virtual bool IsTopLevel() const { return TRUE; }
+    virtual wxSize GetMaxSize() const;
 
     // event handlers
     void OnCloseWindow(wxCloseEvent& event);
@@ -191,3 +192,5 @@ protected:
 
 
 #endif // _WX_TOPLEVEL_BASE_H_
+
+// vi:sts=4:sw=4:et
index e431b9c83ad71be19ee6bfb0894f485fe5512e04..40538ca5a6669b5e1498ef9c34bd43b4165a1375 100644 (file)
@@ -298,6 +298,9 @@ public:
     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
     // ------------
 
@@ -1077,3 +1080,5 @@ inline int NewControlId() { return wxWindowBase::NewControlId(); }
 
 #endif
     // _WX_WINDOW_H_BASE_
+
+// vi:sts=4:sw=4:et
index f3a5d5a04ff344729d3430c084db9bd7f81a3b03..e93aee1e64f4e8212f51a161b794bb4531812efd 100644 (file)
@@ -419,29 +419,19 @@ void wxSizer::Layout()
 
 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 )
@@ -459,9 +449,11 @@ wxSize wxSizer::FitSize( 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;
@@ -1183,3 +1175,5 @@ wxSize wxNotebookSizer::CalcMin()
 }
 
 #endif // wxUSE_NOTEBOOK
+
+// vi:sts=4:sw=4:et
index 865d29f444346ef954ae4e5da13215471e132b7e..da1e1cb9e086ed55a758f89f0541612d9a7b31dc 100644 (file)
@@ -73,6 +73,22 @@ bool wxTopLevelWindowBase::Destroy()
     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
@@ -175,3 +191,5 @@ bool wxTopLevelWindowBase::SendIconizeEvent(bool iconized)
 
     return GetEventHandler()->ProcessEvent(event);
 }
+
+// vi:sts=4:sw=4:et
index 8e3d5e463438d1ad67c26022146f73e69771fdfe..f738746d004b99cd4f6ac1ca52a6728c366cdcb7 100644 (file)
@@ -1748,3 +1748,4 @@ void wxWindowBase::ReleaseMouse()
                GetCapture());
 }
 
+// vi:sts=4:sw=4:et