xref: /haiku/src/apps/icon-o-matic/generic/gui/scrollview/ScrollView.h (revision 128277c969aa806add78941cd2972754c37a1572)
1*128277c9SStephan Aßmus /*
2*128277c9SStephan Aßmus  * Copyright 2006, Haiku.
3*128277c9SStephan Aßmus  * Distributed under the terms of the MIT License.
4*128277c9SStephan Aßmus  *
5*128277c9SStephan Aßmus  * Authors:
6*128277c9SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
7*128277c9SStephan Aßmus  *		Ingo Weinhold <bonefish@cs.tu-berlin.de>
8*128277c9SStephan Aßmus  */
9*128277c9SStephan Aßmus 
10*128277c9SStephan Aßmus #ifndef SCROLL_VIEW_H
11*128277c9SStephan Aßmus #define SCROLL_VIEW_H
12*128277c9SStephan Aßmus 
13*128277c9SStephan Aßmus #include <View.h>
14*128277c9SStephan Aßmus 
15*128277c9SStephan Aßmus #include "Scroller.h"
16*128277c9SStephan Aßmus 
17*128277c9SStephan Aßmus class Scrollable;
18*128277c9SStephan Aßmus class InternalScrollBar;
19*128277c9SStephan Aßmus class ScrollCorner;
20*128277c9SStephan Aßmus 
21*128277c9SStephan Aßmus enum {
22*128277c9SStephan Aßmus 	SCROLL_HORIZONTAL						= 0x01,
23*128277c9SStephan Aßmus 	SCROLL_VERTICAL							= 0x02,
24*128277c9SStephan Aßmus 	SCROLL_HORIZONTAL_MAGIC					= 0x04,
25*128277c9SStephan Aßmus 	SCROLL_VERTICAL_MAGIC					= 0x08,
26*128277c9SStephan Aßmus 	SCROLL_VISIBLE_RECT_IS_CHILD_BOUNDS		= 0x10,
27*128277c9SStephan Aßmus 	SCROLL_NO_FRAME							= 0x20,
28*128277c9SStephan Aßmus };
29*128277c9SStephan Aßmus 
30*128277c9SStephan Aßmus class ScrollView : public BView, public Scroller {
31*128277c9SStephan Aßmus  public:
32*128277c9SStephan Aßmus 								ScrollView(BView* child,
33*128277c9SStephan Aßmus 										   uint32 scrollingFlags,
34*128277c9SStephan Aßmus 										   BRect frame,
35*128277c9SStephan Aßmus 										   const char *name,
36*128277c9SStephan Aßmus 										   uint32 resizingMode, uint32 flags);
37*128277c9SStephan Aßmus 	virtual						~ScrollView();
38*128277c9SStephan Aßmus 
39*128277c9SStephan Aßmus 	virtual	void				AllAttached();
40*128277c9SStephan Aßmus 	virtual	void				Draw(BRect updateRect);
41*128277c9SStephan Aßmus 	virtual	void				FrameResized(float width, float height);
42*128277c9SStephan Aßmus 	virtual	void				WindowActivated(bool activated);
43*128277c9SStephan Aßmus 
44*128277c9SStephan Aßmus 			uint32				ScrollingFlags() const;
45*128277c9SStephan Aßmus 			void				SetVisibleRectIsChildBounds(bool flag);
46*128277c9SStephan Aßmus 			bool				VisibleRectIsChildBounds() const;
47*128277c9SStephan Aßmus 
48*128277c9SStephan Aßmus 			BView*				Child() const;
49*128277c9SStephan Aßmus 			void				ChildFocusChanged(bool focused);
50*128277c9SStephan Aßmus 
51*128277c9SStephan Aßmus 			BScrollBar*			HScrollBar() const;
52*128277c9SStephan Aßmus 			BScrollBar*			VScrollBar() const;
53*128277c9SStephan Aßmus 			BView*				HVScrollCorner() const;
54*128277c9SStephan Aßmus 
55*128277c9SStephan Aßmus 			void				SetHSmallStep(float hStep);
56*128277c9SStephan Aßmus 			void				SetVSmallStep(float vStep);
57*128277c9SStephan Aßmus 			void				SetSmallSteps(float hStep, float vStep);
58*128277c9SStephan Aßmus 			void				GetSmallSteps(float* hStep,
59*128277c9SStephan Aßmus 											  float* vStep) const;
60*128277c9SStephan Aßmus 			float				HSmallStep() const;
61*128277c9SStephan Aßmus 			float				VSmallStep() const;
62*128277c9SStephan Aßmus 
63*128277c9SStephan Aßmus  protected:
64*128277c9SStephan Aßmus 	virtual	void				DataRectChanged(BRect oldDataRect,
65*128277c9SStephan Aßmus 												BRect newDataRect);
66*128277c9SStephan Aßmus 	virtual	void				ScrollOffsetChanged(BPoint oldOffset,
67*128277c9SStephan Aßmus 													BPoint newOffset);
68*128277c9SStephan Aßmus 	virtual	void				VisibleSizeChanged(float oldWidth,
69*128277c9SStephan Aßmus 												   float oldHeight,
70*128277c9SStephan Aßmus 												   float newWidth,
71*128277c9SStephan Aßmus 												   float newHeight);
72*128277c9SStephan Aßmus 	virtual	void				ScrollTargetChanged(Scrollable* oldTarget,
73*128277c9SStephan Aßmus 													Scrollable* newTarget);
74*128277c9SStephan Aßmus 
75*128277c9SStephan Aßmus  private:
76*128277c9SStephan Aßmus 			BView*				fChild;			// child view
77*128277c9SStephan Aßmus 			uint32				fScrollingFlags;
78*128277c9SStephan Aßmus 			InternalScrollBar*	fHScrollBar;	// horizontal scroll bar
79*128277c9SStephan Aßmus 			InternalScrollBar*	fVScrollBar;	// vertical scroll bar
80*128277c9SStephan Aßmus 			ScrollCorner*		fScrollCorner;	// scroll corner
81*128277c9SStephan Aßmus 			bool				fHVisible;		// horizontal/vertical scroll
82*128277c9SStephan Aßmus 			bool				fVVisible;		// bar visible flag
83*128277c9SStephan Aßmus 			bool				fCornerVisible;	// scroll corner visible flag
84*128277c9SStephan Aßmus 			bool				fWindowActive;
85*128277c9SStephan Aßmus 			bool				fChildFocused;
86*128277c9SStephan Aßmus 			float				fHSmallStep;
87*128277c9SStephan Aßmus 			float				fVSmallStep;
88*128277c9SStephan Aßmus 
89*128277c9SStephan Aßmus 			void				_ScrollValueChanged(
90*128277c9SStephan Aßmus 										InternalScrollBar* scrollBar,
91*128277c9SStephan Aßmus 										float value);
92*128277c9SStephan Aßmus 			void				_ScrollCornerValueChanged(BPoint offset);
93*128277c9SStephan Aßmus 
94*128277c9SStephan Aßmus protected:
95*128277c9SStephan Aßmus 	virtual	void				_Layout(uint32 flags);
96*128277c9SStephan Aßmus 
97*128277c9SStephan Aßmus private:
98*128277c9SStephan Aßmus 			void				_UpdateScrollBars();
99*128277c9SStephan Aßmus 			uint32				_UpdateScrollBarVisibility();
100*128277c9SStephan Aßmus 
101*128277c9SStephan Aßmus 			BRect				_InnerRect() const;
102*128277c9SStephan Aßmus 			BRect				_ChildRect() const;
103*128277c9SStephan Aßmus 			BRect				_ChildRect(bool hbar, bool vbar) const;
104*128277c9SStephan Aßmus 			BRect				_GuessVisibleRect(bool hbar, bool vbar) const;
105*128277c9SStephan Aßmus 			BRect				_MaxVisibleRect() const;
106*128277c9SStephan Aßmus 
107*128277c9SStephan Aßmus 	friend class InternalScrollBar;
108*128277c9SStephan Aßmus 	friend class ScrollCorner;
109*128277c9SStephan Aßmus };
110*128277c9SStephan Aßmus 
111*128277c9SStephan Aßmus 
112*128277c9SStephan Aßmus 
113*128277c9SStephan Aßmus #endif	// SCROLL_VIEW_H
114