- Store whether or not the use of the horizontal scrollbar is desired
  on the class itself. If the CLV was set to use the horizontal scrollbar,
  and then asked to lay itself out while hidden, it would incorrectly assume
  the horizontal scrollbar wasn't in use, and consequently repositioned its
  views such that the horizontal scrollbar and outline view overlapped.
This commit is contained in:
Rene Gollent
2012-07-20 19:35:21 -04:00
parent cb1f2e6525
commit 902a98ad83
2 changed files with 20 additions and 19 deletions
+2 -2
View File
@@ -385,9 +385,8 @@ protected:
virtual void DoLayout(); virtual void DoLayout();
private: private:
void _Init(bool showHorizontalScrollbar); void _Init();
void _GetChildViewRects(const BRect& bounds, void _GetChildViewRects(const BRect& bounds,
bool showHorizontalScrollBar,
BRect& titleRect, BRect& outlineRect, BRect& titleRect, BRect& outlineRect,
BRect& vScrollBarRect, BRect& vScrollBarRect,
BRect& hScrollBarRect); BRect& hScrollBarRect);
@@ -404,6 +403,7 @@ private:
bool fSortingEnabled; bool fSortingEnabled;
float fLatchWidth; float fLatchWidth;
border_style fBorderStyle; border_style fBorderStyle;
bool fShowingHorizontalScrollBar;
}; };
#endif // _COLUMN_LIST_VIEW_H #endif // _COLUMN_LIST_VIEW_H
+18 -17
View File
@@ -728,9 +728,10 @@ BColumnListView::BColumnListView(BRect rect, const char* name,
fSelectionMessage(NULL), fSelectionMessage(NULL),
fSortingEnabled(true), fSortingEnabled(true),
fLatchWidth(kLatchWidth), fLatchWidth(kLatchWidth),
fBorderStyle(border) fBorderStyle(border),
fShowingHorizontalScrollBar(showHorizontalScrollbar)
{ {
_Init(showHorizontalScrollbar); _Init();
} }
@@ -742,9 +743,10 @@ BColumnListView::BColumnListView(const char* name, uint32 flags,
fSelectionMessage(NULL), fSelectionMessage(NULL),
fSortingEnabled(true), fSortingEnabled(true),
fLatchWidth(kLatchWidth), fLatchWidth(kLatchWidth),
fBorderStyle(border) fBorderStyle(border),
fShowingHorizontalScrollBar(showHorizontalScrollbar)
{ {
_Init(showHorizontalScrollbar); _Init();
} }
@@ -1857,8 +1859,8 @@ BColumnListView::PreferredSize()
BRect outlineRect; BRect outlineRect;
BRect vScrollBarRect; BRect vScrollBarRect;
BRect hScrollBarRect; BRect hScrollBarRect;
_GetChildViewRects(Bounds(), !fHorizontalScrollBar->IsHidden(), _GetChildViewRects(Bounds(), titleRect, outlineRect, vScrollBarRect,
titleRect, outlineRect, vScrollBarRect, hScrollBarRect); hScrollBarRect);
// Start with the extra width for border and scrollbars etc. // Start with the extra width for border and scrollbars etc.
size.width = titleRect.left - Bounds().left; size.width = titleRect.left - Bounds().left;
size.width += Bounds().right - titleRect.right; size.width += Bounds().right - titleRect.right;
@@ -1901,8 +1903,8 @@ BColumnListView::DoLayout()
BRect outlineRect; BRect outlineRect;
BRect vScrollBarRect; BRect vScrollBarRect;
BRect hScrollBarRect; BRect hScrollBarRect;
_GetChildViewRects(Bounds(), !fHorizontalScrollBar->IsHidden(), _GetChildViewRects(Bounds(), titleRect, outlineRect, vScrollBarRect,
titleRect, outlineRect, vScrollBarRect, hScrollBarRect); hScrollBarRect);
fTitleView->MoveTo(titleRect.LeftTop()); fTitleView->MoveTo(titleRect.LeftTop());
fTitleView->ResizeTo(titleRect.Width(), titleRect.Height()); fTitleView->ResizeTo(titleRect.Width(), titleRect.Height());
@@ -1923,7 +1925,7 @@ BColumnListView::DoLayout()
void void
BColumnListView::_Init(bool showHorizontalScrollbar) BColumnListView::_Init()
{ {
SetViewColor(B_TRANSPARENT_32_BIT); SetViewColor(B_TRANSPARENT_32_BIT);
@@ -1940,8 +1942,8 @@ BColumnListView::_Init(bool showHorizontalScrollbar)
BRect outlineRect; BRect outlineRect;
BRect vScrollBarRect; BRect vScrollBarRect;
BRect hScrollBarRect; BRect hScrollBarRect;
_GetChildViewRects(bounds, showHorizontalScrollbar, titleRect, outlineRect, _GetChildViewRects(bounds, titleRect, outlineRect, vScrollBarRect,
vScrollBarRect, hScrollBarRect); hScrollBarRect);
fOutlineView = new OutlineView(outlineRect, &fColumns, &fSortColumns, this); fOutlineView = new OutlineView(outlineRect, &fColumns, &fSortColumns, this);
AddChild(fOutlineView); AddChild(fOutlineView);
@@ -1959,7 +1961,7 @@ BColumnListView::_Init(bool showHorizontalScrollbar)
"horizontal_scroll_bar", fTitleView, 0.0, bounds.Width(), B_HORIZONTAL); "horizontal_scroll_bar", fTitleView, 0.0, bounds.Width(), B_HORIZONTAL);
AddChild(fHorizontalScrollBar); AddChild(fHorizontalScrollBar);
if (!showHorizontalScrollbar) if (!fShowingHorizontalScrollBar)
fHorizontalScrollBar->Hide(); fHorizontalScrollBar->Hide();
fOutlineView->FixScrollBar(true); fOutlineView->FixScrollBar(true);
@@ -1967,9 +1969,8 @@ BColumnListView::_Init(bool showHorizontalScrollbar)
void void
BColumnListView::_GetChildViewRects(const BRect& bounds, BColumnListView::_GetChildViewRects(const BRect& bounds, BRect& titleRect,
bool showHorizontalScrollbar, BRect& titleRect, BRect& outlineRect, BRect& outlineRect, BRect& vScrollBarRect, BRect& hScrollBarRect)
BRect& vScrollBarRect, BRect& hScrollBarRect)
{ {
titleRect = bounds; titleRect = bounds;
titleRect.bottom = titleRect.top + kTitleHeight; titleRect.bottom = titleRect.top + kTitleHeight;
@@ -1980,7 +1981,7 @@ BColumnListView::_GetChildViewRects(const BRect& bounds,
outlineRect = bounds; outlineRect = bounds;
outlineRect.top = titleRect.bottom + 1.0; outlineRect.top = titleRect.bottom + 1.0;
outlineRect.right -= B_V_SCROLL_BAR_WIDTH; outlineRect.right -= B_V_SCROLL_BAR_WIDTH;
if (showHorizontalScrollbar) if (fShowingHorizontalScrollBar)
outlineRect.bottom -= B_H_SCROLL_BAR_HEIGHT; outlineRect.bottom -= B_H_SCROLL_BAR_HEIGHT;
vScrollBarRect = bounds; vScrollBarRect = bounds;
@@ -1989,7 +1990,7 @@ BColumnListView::_GetChildViewRects(const BRect& bounds,
#endif #endif
vScrollBarRect.left = vScrollBarRect.right - B_V_SCROLL_BAR_WIDTH; vScrollBarRect.left = vScrollBarRect.right - B_V_SCROLL_BAR_WIDTH;
if (showHorizontalScrollbar) if (fShowingHorizontalScrollBar)
vScrollBarRect.bottom -= B_H_SCROLL_BAR_HEIGHT; vScrollBarRect.bottom -= B_H_SCROLL_BAR_HEIGHT;
hScrollBarRect = bounds; hScrollBarRect = bounds;