1/* 2 * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7// NOTE: Nasty hack to get access to BScrollView's private parts. 8#include <ScrollBar.h> 9#define private protected 10#include <ScrollView.h> 11#undef private 12 13#include "TermScrollView.h" 14 15#include <Message.h> 16 17 18class TermScrollBar : public BScrollBar { 19public: 20 TermScrollBar(BRect frame, const char *name, BView *target, 21 float min, float max, orientation direction) 22 : 23 BScrollBar(frame, name, target, min, max, direction) 24 { 25 } 26 27 virtual void ValueChanged(float newValue) 28 { 29 if (BView* target = Target()) 30 target->ScrollTo(0, newValue); 31 } 32}; 33 34 35TermScrollView::TermScrollView(const char* name, BView* child, BView* target, 36 bool overlapTop, uint32 resizingMode) 37 : 38 BScrollView(name, child, resizingMode, 0, false, true, B_NO_BORDER) 39{ 40 child->TargetedByScrollView(NULL); 41 42 // replace the vertical scroll bar with our own 43 if (fVerticalScrollBar != NULL) { 44 BRect frame(fVerticalScrollBar->Frame()); 45 RemoveChild(fVerticalScrollBar); 46 delete fVerticalScrollBar; 47 48 // Overlap one pixel at the top (if required) with the menu for 49 // aesthetical reasons. 50 if (overlapTop) 51 frame.top--; 52 53 TermScrollBar* scrollBar = new TermScrollBar(frame, "_VSB_", target, 0, 54 1000, B_VERTICAL); 55 AddChild(scrollBar); 56 fVerticalScrollBar = scrollBar; 57 } 58 59 target->TargetedByScrollView(this); 60} 61 62 63TermScrollView::~TermScrollView() 64{ 65} 66