xref: /haiku/src/apps/icon-o-matic/generic/gui/scrollview/ScrollView.h (revision f10474fc0b77e23e362e4e6670dfcbbbba4210ea)
1128277c9SStephan Aßmus /*
2128277c9SStephan Aßmus  * Copyright 2006, Haiku.
3128277c9SStephan Aßmus  * Distributed under the terms of the MIT License.
4128277c9SStephan Aßmus  *
5128277c9SStephan Aßmus  * Authors:
6128277c9SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
7128277c9SStephan Aßmus  *		Ingo Weinhold <bonefish@cs.tu-berlin.de>
8128277c9SStephan Aßmus  */
9128277c9SStephan Aßmus 
10128277c9SStephan Aßmus #ifndef SCROLL_VIEW_H
11128277c9SStephan Aßmus #define SCROLL_VIEW_H
12128277c9SStephan Aßmus 
13128277c9SStephan Aßmus #include <View.h>
14128277c9SStephan Aßmus 
15128277c9SStephan Aßmus #include "Scroller.h"
16128277c9SStephan Aßmus 
17128277c9SStephan Aßmus class Scrollable;
18128277c9SStephan Aßmus class InternalScrollBar;
19128277c9SStephan Aßmus class ScrollCorner;
20128277c9SStephan Aßmus 
21128277c9SStephan Aßmus enum {
22128277c9SStephan Aßmus 	SCROLL_HORIZONTAL						= 0x01,
23128277c9SStephan Aßmus 	SCROLL_VERTICAL							= 0x02,
24128277c9SStephan Aßmus 	SCROLL_HORIZONTAL_MAGIC					= 0x04,
25128277c9SStephan Aßmus 	SCROLL_VERTICAL_MAGIC					= 0x08,
26128277c9SStephan Aßmus 	SCROLL_VISIBLE_RECT_IS_CHILD_BOUNDS		= 0x10,
27128277c9SStephan Aßmus 	SCROLL_NO_FRAME							= 0x20,
28128277c9SStephan Aßmus };
29128277c9SStephan Aßmus 
30128277c9SStephan Aßmus class ScrollView : public BView, public Scroller {
31128277c9SStephan Aßmus  public:
32128277c9SStephan Aßmus 								ScrollView(BView* child,
33128277c9SStephan Aßmus 										   uint32 scrollingFlags,
34128277c9SStephan Aßmus 										   BRect frame,
35128277c9SStephan Aßmus 										   const char *name,
36128277c9SStephan Aßmus 										   uint32 resizingMode, uint32 flags);
37128277c9SStephan Aßmus 	virtual						~ScrollView();
38128277c9SStephan Aßmus 
39128277c9SStephan Aßmus 	virtual	void				AllAttached();
40128277c9SStephan Aßmus 	virtual	void				Draw(BRect updateRect);
41128277c9SStephan Aßmus 	virtual	void				FrameResized(float width, float height);
42128277c9SStephan Aßmus 	virtual	void				WindowActivated(bool activated);
43128277c9SStephan Aßmus 
44*f10474fcSStephan Aßmus #ifdef __HAIKU__
45*f10474fcSStephan Aßmus 	virtual	BSize				MinSize();
46*f10474fcSStephan Aßmus 	virtual	BSize				PreferredSize();
47*f10474fcSStephan Aßmus #endif
48*f10474fcSStephan Aßmus 
49*f10474fcSStephan Aßmus 
50128277c9SStephan Aßmus 			uint32				ScrollingFlags() const;
51128277c9SStephan Aßmus 			void				SetVisibleRectIsChildBounds(bool flag);
52128277c9SStephan Aßmus 			bool				VisibleRectIsChildBounds() const;
53128277c9SStephan Aßmus 
54128277c9SStephan Aßmus 			BView*				Child() const;
55128277c9SStephan Aßmus 			void				ChildFocusChanged(bool focused);
56128277c9SStephan Aßmus 
57128277c9SStephan Aßmus 			BScrollBar*			HScrollBar() const;
58128277c9SStephan Aßmus 			BScrollBar*			VScrollBar() const;
59128277c9SStephan Aßmus 			BView*				HVScrollCorner() const;
60128277c9SStephan Aßmus 
61128277c9SStephan Aßmus 			void				SetHSmallStep(float hStep);
62128277c9SStephan Aßmus 			void				SetVSmallStep(float vStep);
63128277c9SStephan Aßmus 			void				SetSmallSteps(float hStep, float vStep);
64128277c9SStephan Aßmus 			void				GetSmallSteps(float* hStep,
65128277c9SStephan Aßmus 											  float* vStep) const;
66128277c9SStephan Aßmus 			float				HSmallStep() const;
67128277c9SStephan Aßmus 			float				VSmallStep() const;
68128277c9SStephan Aßmus 
69*f10474fcSStephan Aßmus 			float				BorderSize() const;
70*f10474fcSStephan Aßmus 
71128277c9SStephan Aßmus  protected:
72128277c9SStephan Aßmus 	virtual	void				DataRectChanged(BRect oldDataRect,
73128277c9SStephan Aßmus 												BRect newDataRect);
74128277c9SStephan Aßmus 	virtual	void				ScrollOffsetChanged(BPoint oldOffset,
75128277c9SStephan Aßmus 													BPoint newOffset);
76128277c9SStephan Aßmus 	virtual	void				VisibleSizeChanged(float oldWidth,
77128277c9SStephan Aßmus 												   float oldHeight,
78128277c9SStephan Aßmus 												   float newWidth,
79128277c9SStephan Aßmus 												   float newHeight);
80128277c9SStephan Aßmus 	virtual	void				ScrollTargetChanged(Scrollable* oldTarget,
81128277c9SStephan Aßmus 													Scrollable* newTarget);
82128277c9SStephan Aßmus 
83128277c9SStephan Aßmus  private:
84128277c9SStephan Aßmus 			BView*				fChild;			// child view
85128277c9SStephan Aßmus 			uint32				fScrollingFlags;
86128277c9SStephan Aßmus 			InternalScrollBar*	fHScrollBar;	// horizontal scroll bar
87128277c9SStephan Aßmus 			InternalScrollBar*	fVScrollBar;	// vertical scroll bar
88128277c9SStephan Aßmus 			ScrollCorner*		fScrollCorner;	// scroll corner
89128277c9SStephan Aßmus 			bool				fHVisible;		// horizontal/vertical scroll
90128277c9SStephan Aßmus 			bool				fVVisible;		// bar visible flag
91128277c9SStephan Aßmus 			bool				fCornerVisible;	// scroll corner visible flag
92128277c9SStephan Aßmus 			bool				fWindowActive;
93128277c9SStephan Aßmus 			bool				fChildFocused;
94128277c9SStephan Aßmus 			float				fHSmallStep;
95128277c9SStephan Aßmus 			float				fVSmallStep;
96128277c9SStephan Aßmus 
97128277c9SStephan Aßmus 			void				_ScrollValueChanged(
98128277c9SStephan Aßmus 										InternalScrollBar* scrollBar,
99128277c9SStephan Aßmus 										float value);
100128277c9SStephan Aßmus 			void				_ScrollCornerValueChanged(BPoint offset);
101128277c9SStephan Aßmus 
102128277c9SStephan Aßmus protected:
103128277c9SStephan Aßmus 	virtual	void				_Layout(uint32 flags);
104128277c9SStephan Aßmus 
105128277c9SStephan Aßmus private:
106128277c9SStephan Aßmus 			void				_UpdateScrollBars();
107128277c9SStephan Aßmus 			uint32				_UpdateScrollBarVisibility();
108128277c9SStephan Aßmus 
109128277c9SStephan Aßmus 			BRect				_InnerRect() const;
110128277c9SStephan Aßmus 			BRect				_ChildRect() const;
111128277c9SStephan Aßmus 			BRect				_ChildRect(bool hbar, bool vbar) const;
112128277c9SStephan Aßmus 			BRect				_GuessVisibleRect(bool hbar, bool vbar) const;
113128277c9SStephan Aßmus 			BRect				_MaxVisibleRect() const;
114128277c9SStephan Aßmus 
115128277c9SStephan Aßmus 	friend class InternalScrollBar;
116128277c9SStephan Aßmus 	friend class ScrollCorner;
117128277c9SStephan Aßmus };
118128277c9SStephan Aßmus 
119128277c9SStephan Aßmus 
120128277c9SStephan Aßmus 
121128277c9SStephan Aßmus #endif	// SCROLL_VIEW_H
122