wxSplitterWindow now:

1. respects minimal size even when set programatically
2. respects minimal size of child windows if set


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14145 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2002-02-11 23:48:33 +00:00
parent 5229b11d2c
commit d76ac8ed88
2 changed files with 40 additions and 4 deletions

View File

@@ -689,6 +689,37 @@ void wxSplitterWindow::DrawSashTracker(int x, int y)
screenDC.SetBrush(wxNullBrush);
}
void wxSplitterWindow::AdjustSashPosition(int &sashPos)
{
int w, h;
GetClientSize(&w, &h);
int window_size = (m_splitMode == wxSPLIT_VERTICAL) ? w : h;
wxWindow *win;
if ( sashPos < m_minimumPaneSize )
sashPos = m_minimumPaneSize;
else if ( sashPos > window_size - m_minimumPaneSize )
sashPos = window_size - m_minimumPaneSize;
win = GetWindow1();
if ( win )
{
int minSize = (m_splitMode == wxSPLIT_VERTICAL) ?
win->GetMinWidth() : win->GetMinHeight();
if ( minSize != -1 && sashPos < minSize + GetBorderSize() )
sashPos = minSize + GetBorderSize();
}
win = GetWindow2();
if ( win )
{
int minSize = (m_splitMode == wxSPLIT_VERTICAL) ?
win->GetMinWidth() : win->GetMinHeight();
if ( minSize != -1 && sashPos > window_size - minSize - GetBorderSize() )
sashPos = window_size - minSize - GetBorderSize();
}
}
// Position and size subwindows.
// Note that the border size applies to each subwindow, not
// including the edges next to the sash.
@@ -763,6 +794,8 @@ bool wxSplitterWindow::SplitVertically(wxWindow *window1, wxWindow *window2, int
m_sashPosition = w + sashPosition; // It's negative so adding is subtracting
else // default
m_sashPosition = w/2;
AdjustSashPosition(m_sashPosition);
SizeWindows();
@@ -787,6 +820,8 @@ bool wxSplitterWindow::SplitHorizontally(wxWindow *window1, wxWindow *window2, i
else // default
m_sashPosition = h/2;
AdjustSashPosition(m_sashPosition);
SizeWindows();
return TRUE;
@@ -855,6 +890,7 @@ bool wxSplitterWindow::ReplaceWindow(wxWindow *winOld, wxWindow *winNew)
void wxSplitterWindow::SetSashPosition(int position, bool redraw)
{
m_sashPosition = position;
AdjustSashPosition(m_sashPosition);
if ( redraw )
{
@@ -945,10 +981,7 @@ void wxSplitterWindow::OnSashPosChanged(wxSplitterEvent& event)
if ( !unsplit_scenario )
{
// If resultant pane would be too small, enlarge it
if ( newSashPosition < m_minimumPaneSize )
newSashPosition = m_minimumPaneSize;
if ( newSashPosition > window_size - m_minimumPaneSize )
newSashPosition = window_size - m_minimumPaneSize;
AdjustSashPosition(newSashPosition);
}
// If the result is out of bounds it means minimum size is too big,