1#include <stdio.h>
2
3#include <Application.h>
4#include <ScrollBar.h>
5#include <ScrollView.h>
6#include <Window.h>
7
8class View : public BView {
9public:
10	View(BRect frame)
11		: BView(frame, "target view", B_FOLLOW_ALL,
12			B_WILL_DRAW | B_FRAME_EVENTS)
13	{
14	}
15
16	virtual void Draw(BRect updateRect)
17	{
18		BRect b = Bounds().OffsetToCopy(B_ORIGIN);
19		b.bottom = b.bottom * 2.0;
20		StrokeLine(b.LeftTop(), b.RightBottom());
21	}
22
23	virtual	void AttachedToWindow()
24	{
25		UpdateScrollbar(Bounds().Height());
26	}
27
28	virtual void FrameResized(float width, float height)
29	{
30		UpdateScrollbar(height);
31	}
32
33	void UpdateScrollbar(float height)
34	{
35		BScrollBar* scrollBar = ScrollBar(B_VERTICAL);
36		if (!scrollBar) {
37			printf("no vertical scroll bar\n");
38			return;
39		}
40		float smallStep, bigStep;
41		scrollBar->GetSteps(&smallStep, &bigStep);
42		printf("scrollbar steps: %.1f, %.1f, proportion: %.1f\n",
43			smallStep, bigStep, scrollBar->Proportion());
44
45		scrollBar->SetRange(0.0, height);
46		scrollBar->SetSteps(5.0, height / 2);
47
48		scrollBar->GetSteps(&smallStep, &bigStep);
49		printf("scrollbar steps: %.1f, %.1f, proportion: %.1f, "
50			"range: %.1f\n",
51			smallStep, bigStep, scrollBar->Proportion(),
52			height);
53	}
54};
55
56
57int
58main(int argc, char* argv[])
59{
60	BApplication app("application/x-vnd.stippi.scrollbar_test");
61
62	BRect frame(50, 50, 350, 350);
63	BWindow* window = new BWindow(frame, "BScrollBar Test",
64		B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
65		B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
66
67	frame = window->Bounds();
68	frame.right -= B_V_SCROLL_BAR_WIDTH;
69	View* view = new View(frame);
70
71	BScrollView* scrollView = new BScrollView("scroll view", view,
72		B_FOLLOW_ALL, 0, false, true, B_NO_BORDER);
73
74	window->AddChild(scrollView);
75	window->Show();
76
77	app.Run();
78	return 0;
79}
80
81
82