xref: /haiku/headers/os/interface/ScrollView.h (revision 5fae0bc1a2f74ccf56b7e3958149317d6af2cccc)
1 /*
2  * Copyright 2004-2009, Axel Dörfler, axeld@pinc-software.de.
3  * Copyright 2014 Haiku, Inc. All rights reserved.
4  * Distributed under the terms of the MIT License.
5  *
6  * Authors:
7  *		Axel Dörfler, axeld@pinc-software.de
8  *		John Scipione, jscpione@gmail.com
9  */
10 #ifndef _SCROLL_VIEW_H
11 #define _SCROLL_VIEW_H
12 
13 
14 #include <ScrollBar.h>
15 
16 
17 /*!	The BScrollView is a convenience class to add a scrolling
18 	mechanism to the target view.
19 */
20 class BScrollView : public BView {
21 public:
22 								BScrollView(const char* name, BView* target,
23 									uint32 resizingMode
24 										= B_FOLLOW_LEFT | B_FOLLOW_TOP,
25 									uint32 flags = 0, bool horizontal = false,
26 									bool vertical = false,
27 									border_style border = B_FANCY_BORDER);
28 								BScrollView(const char* name, BView* target,
29 									uint32 flags, bool horizontal,
30 									bool vertical, border_style border
31 										= B_FANCY_BORDER);
32 								BScrollView(BMessage* archive);
33 	virtual						~BScrollView();
34 
35 	static	BArchivable*		Instantiate(BMessage* archive);
36 	virtual	status_t			Archive(BMessage* archive, bool deep = true) const;
37 
38 	// Hook methods
39 	virtual	void				AllAttached();
40 	virtual	void				AllDetached();
41 
42 	virtual	void				AttachedToWindow();
43 	virtual	void				DetachedFromWindow();
44 
45 	virtual	void				Draw(BRect updateRect);
46 	virtual	void				FrameMoved(BPoint newPosition);
47 	virtual	void				FrameResized(float newWidth, float newHeight);
48 
49 	virtual	void				MessageReceived(BMessage* message);
50 
51 	virtual	void				MouseDown(BPoint where);
52 	virtual	void				MouseMoved(BPoint where, uint32 code,
53 									const BMessage* dragMessage);
54 	virtual	void				MouseUp(BPoint where);
55 
56 	virtual	void				WindowActivated(bool active);
57 
58 	// Size
59 	virtual	void				GetPreferredSize(float* _width, float* _height);
60 	virtual	void				ResizeToPreferred();
61 
62 	virtual	void				MakeFocus(bool focus = true);
63 
64 	virtual	BSize				MinSize();
65 	virtual	BSize				MaxSize();
66 	virtual	BSize				PreferredSize();
67 
68 	// BScrollBar
69 			BScrollBar*			ScrollBar(orientation posture) const;
70 
71 	virtual	void				SetBorder(border_style border);
72 			border_style		Border() const;
73 
74 	virtual	status_t			SetBorderHighlighted(bool highlight);
75 			bool				IsBorderHighlighted() const;
76 
77 			void				SetTarget(BView* target);
78 			BView*				Target() const;
79 
80 	// Scripting
81 	virtual	BHandler*			ResolveSpecifier(BMessage* message,
82 									int32 index, BMessage* specifier,
83 									int32 what, const char* property);
84 	virtual	status_t			GetSupportedSuites(BMessage* message);
85 
86 	virtual	status_t			Perform(perform_code d, void* arg);
87 
88 protected:
89 	virtual	void				LayoutInvalidated(bool descendants = false);
90 	virtual	void				DoLayout();
91 
92 private:
93 	// FBC padding and forbidden methods
94 	virtual	void				_ReservedScrollView1();
95 	virtual	void				_ReservedScrollView2();
96 	virtual	void				_ReservedScrollView3();
97 	virtual	void				_ReservedScrollView4();
98 
99 			BScrollView&		operator=(const BScrollView& other);
100 
101 private:
102 	friend class BView;
103 
104 			void				_Init(bool horizontal, bool vertical);
105 			float				_BorderSize() const;
106 			BRect				_InnerFrame() const;
107 			BSize				_ComputeSize(BSize targetSize) const;
108 			BRect				_ComputeFrame(BRect targetRect) const;
109 			void				_AlignScrollBars(bool horizontal,
110 									bool vertical, BRect targetFrame);
111 
112 	static	BRect				_ComputeFrame(BRect frame, bool horizontal,
113 									bool vertical, border_style border);
114 	static	BRect				_ComputeFrame(BView* target, bool horizontal,
115 									bool vertical, border_style border);
116 	static	float				_BorderSize(border_style border);
117 	static	int32				_ModifyFlags(int32 flags, border_style border);
118 
119 private:
120 			BView*				fTarget;
121 			BScrollBar*			fHorizontalScrollBar;
122 			BScrollBar*			fVerticalScrollBar;
123 			border_style		fBorder;
124 			uint16				fPreviousWidth;
125 			uint16				fPreviousHeight;
126 			bool				fHighlighted;
127 
128 			uint32				_reserved[3];
129 };
130 
131 #endif // _SCROLL_VIEW_H
132