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