return lineFirst;
}
+void wxVScrolledWindow::RemoveScrollbar()
+{
+ m_lineFirst = 0;
+ m_nVisible = m_lineMax;
+ SetScrollbar(wxVERTICAL, 0, 0, 0);
+}
+
void wxVScrolledWindow::UpdateScrollbar()
{
+ // if there is nothing to scroll, remove the scrollbar
+ if ( !m_lineMax )
+ {
+ RemoveScrollbar();
+ return;
+ }
+
// see how many lines can we fit on screen
const wxCoord hWindow = GetClientSize().y;
if ( hAll < hWindow )
{
// we don't need scrollbar at all
- m_lineFirst = 0;
- SetScrollbar(wxVERTICAL, 0, 0, 0);
+ RemoveScrollbar();
+ return;
}
}
// and our estimate for their total height
m_heightTotal = EstimateTotalHeight();
- // recalculate the scrollbars parameters
- m_lineFirst = 1; // make sure it is != 0
- ScrollToLine(0);
+ // ScrollToLine() will update the scrollbar itself if it changes the line
+ // we pass to it because it's out of [new] range
+ size_t oldScrollPos = m_lineFirst;
+ ScrollToLine(m_lineFirst);
+ if ( oldScrollPos == m_lineFirst )
+ {
+ // but if it didn't do it, we still need to update the scrollbar to
+ // reflect the changed number of lines ourselves
+ UpdateScrollbar();
+ }
}
void wxVScrolledWindow::RefreshLine(size_t line)
// adjust the sizer dimensions/position taking into account the
// virtual size and scrolled position of the window.
- int w, h;
+ int w = 0, h = 0;
GetVirtualSize(&w, &h);
// x is always 0 so no variable needed