1*7f96d619SStephan Aßmus /* 2*7f96d619SStephan Aßmus * Copyright 2006-2009, Haiku. 3*7f96d619SStephan Aßmus * Distributed under the terms of the MIT License. 4*7f96d619SStephan Aßmus * 5*7f96d619SStephan Aßmus * Authors: 6*7f96d619SStephan Aßmus * Stephan Aßmus <superstippi@gmx.de> 7*7f96d619SStephan Aßmus * Ingo Weinhold <bonefish@cs.tu-berlin.de> 8*7f96d619SStephan 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, 26007ea587SStephan Aßmus SCROLL_VISIBLE_RECT_IS_CHILD_BOUNDS = 0x10, 27007ea587SStephan Aßmus SCROLL_NO_FRAME = 0x20, 28007ea587SStephan Aßmus SCROLL_LIST_FRAME = 0x40, 29128277c9SStephan Aßmus }; 30128277c9SStephan Aßmus 31c4ce9e76SStephan Aßmus enum { 32c4ce9e76SStephan Aßmus BORDER_LEFT = 0x01, 33c4ce9e76SStephan Aßmus BORDER_TOP = 0x02, 34c4ce9e76SStephan Aßmus BORDER_RIGHT = 0x04, 35c4ce9e76SStephan Aßmus BORDER_BOTTOM = 0x08, 36c4ce9e76SStephan Aßmus BORDER_ALL = BORDER_LEFT | BORDER_TOP | BORDER_RIGHT | BORDER_BOTTOM 37c4ce9e76SStephan Aßmus }; 38c4ce9e76SStephan Aßmus 39c4ce9e76SStephan Aßmus 40128277c9SStephan Aßmus class ScrollView : public BView, public Scroller { 41128277c9SStephan Aßmus public: 42c4ce9e76SStephan Aßmus ScrollView(BView* child, uint32 scrollingFlags, 43c4ce9e76SStephan Aßmus BRect frame, const char *name, 44c4ce9e76SStephan Aßmus uint32 resizingMode, uint32 viewFlags, 45c4ce9e76SStephan Aßmus uint32 borderStyle = B_FANCY_BORDER, 46c4ce9e76SStephan Aßmus uint32 borderFlags = BORDER_ALL); 47007ea587SStephan Aßmus #ifdef __HAIKU__ 48007ea587SStephan Aßmus ScrollView(BView* child, uint32 scrollingFlags, 49007ea587SStephan Aßmus const char *name, uint32 viewFlags, 50007ea587SStephan Aßmus uint32 borderStyle = B_FANCY_BORDER, 51007ea587SStephan Aßmus uint32 borderFlags = BORDER_ALL); 52007ea587SStephan Aßmus #endif // __HAIKU__ 53128277c9SStephan Aßmus virtual ~ScrollView(); 54128277c9SStephan Aßmus 55128277c9SStephan Aßmus virtual void AllAttached(); 56128277c9SStephan Aßmus virtual void Draw(BRect updateRect); 57128277c9SStephan Aßmus virtual void FrameResized(float width, float height); 58128277c9SStephan Aßmus virtual void WindowActivated(bool activated); 59128277c9SStephan Aßmus 60f10474fcSStephan Aßmus #ifdef __HAIKU__ 61007ea587SStephan Aßmus 62f10474fcSStephan Aßmus virtual BSize MinSize(); 63f10474fcSStephan Aßmus virtual BSize PreferredSize(); 64f10474fcSStephan Aßmus 65007ea587SStephan Aßmus #endif // __HAIKU__ 66f10474fcSStephan Aßmus 67128277c9SStephan Aßmus uint32 ScrollingFlags() const; 68128277c9SStephan Aßmus void SetVisibleRectIsChildBounds(bool flag); 69128277c9SStephan Aßmus bool VisibleRectIsChildBounds() const; 70128277c9SStephan Aßmus 71128277c9SStephan Aßmus BView* Child() const; 72128277c9SStephan Aßmus void ChildFocusChanged(bool focused); 73128277c9SStephan Aßmus 74128277c9SStephan Aßmus BScrollBar* HScrollBar() const; 75128277c9SStephan Aßmus BScrollBar* VScrollBar() const; 76128277c9SStephan Aßmus BView* HVScrollCorner() const; 77128277c9SStephan Aßmus 78128277c9SStephan Aßmus void SetHSmallStep(float hStep); 79128277c9SStephan Aßmus void SetVSmallStep(float vStep); 80128277c9SStephan Aßmus void SetSmallSteps(float hStep, float vStep); 81128277c9SStephan Aßmus void GetSmallSteps(float* hStep, 82128277c9SStephan Aßmus float* vStep) const; 83128277c9SStephan Aßmus float HSmallStep() const; 84128277c9SStephan Aßmus float VSmallStep() const; 85128277c9SStephan Aßmus 86007ea587SStephan Aßmus virtual bool IsScrolling() const; 87007ea587SStephan Aßmus virtual void SetScrollingEnabled(bool enabled); 88007ea587SStephan Aßmus 89128277c9SStephan Aßmus protected: 90128277c9SStephan Aßmus virtual void DataRectChanged(BRect oldDataRect, 91128277c9SStephan Aßmus BRect newDataRect); 92128277c9SStephan Aßmus virtual void ScrollOffsetChanged(BPoint oldOffset, 93128277c9SStephan Aßmus BPoint newOffset); 94128277c9SStephan Aßmus virtual void VisibleSizeChanged(float oldWidth, 95128277c9SStephan Aßmus float oldHeight, 96128277c9SStephan Aßmus float newWidth, 97128277c9SStephan Aßmus float newHeight); 98128277c9SStephan Aßmus virtual void ScrollTargetChanged(Scrollable* oldTarget, 99128277c9SStephan Aßmus Scrollable* newTarget); 100128277c9SStephan Aßmus 101128277c9SStephan Aßmus private: 102128277c9SStephan Aßmus BView* fChild; // child view 103128277c9SStephan Aßmus uint32 fScrollingFlags; 104128277c9SStephan Aßmus InternalScrollBar* fHScrollBar; // horizontal scroll bar 105128277c9SStephan Aßmus InternalScrollBar* fVScrollBar; // vertical scroll bar 106128277c9SStephan Aßmus ScrollCorner* fScrollCorner; // scroll corner 107128277c9SStephan Aßmus bool fHVisible; // horizontal/vertical scroll 108128277c9SStephan Aßmus bool fVVisible; // bar visible flag 109128277c9SStephan Aßmus bool fCornerVisible; // scroll corner visible flag 110128277c9SStephan Aßmus bool fWindowActive; 111128277c9SStephan Aßmus bool fChildFocused; 112007ea587SStephan Aßmus bool fScrolling; 113128277c9SStephan Aßmus float fHSmallStep; 114128277c9SStephan Aßmus float fVSmallStep; 115128277c9SStephan Aßmus 116c4ce9e76SStephan Aßmus uint32 fBorderStyle; 117c4ce9e76SStephan Aßmus uint32 fBorderFlags; 118c4ce9e76SStephan Aßmus 119007ea587SStephan Aßmus void _Init(BView* child, uint32 scrollingFlags, 120007ea587SStephan Aßmus uint32 borderStyle, uint32 borderFlags); 121007ea587SStephan Aßmus 122128277c9SStephan Aßmus void _ScrollValueChanged( 123128277c9SStephan Aßmus InternalScrollBar* scrollBar, 124128277c9SStephan Aßmus float value); 125128277c9SStephan Aßmus void _ScrollCornerValueChanged(BPoint offset); 126128277c9SStephan Aßmus 127128277c9SStephan Aßmus protected: 128128277c9SStephan Aßmus virtual void _Layout(uint32 flags); 129128277c9SStephan Aßmus 130128277c9SStephan Aßmus private: 131128277c9SStephan Aßmus void _UpdateScrollBars(); 132128277c9SStephan Aßmus uint32 _UpdateScrollBarVisibility(); 133128277c9SStephan Aßmus 134128277c9SStephan Aßmus BRect _InnerRect() const; 135128277c9SStephan Aßmus BRect _ChildRect() const; 136128277c9SStephan Aßmus BRect _ChildRect(bool hbar, bool vbar) const; 137128277c9SStephan Aßmus BRect _GuessVisibleRect(bool hbar, bool vbar) const; 138128277c9SStephan Aßmus BRect _MaxVisibleRect() const; 139c4ce9e76SStephan Aßmus #ifdef __HAIKU__ 140c4ce9e76SStephan Aßmus virtual BSize _Size(BSize childSize); 141c4ce9e76SStephan Aßmus #endif 142128277c9SStephan Aßmus 143007ea587SStephan Aßmus void _SetScrolling(bool scrolling); 144007ea587SStephan Aßmus 145128277c9SStephan Aßmus friend class InternalScrollBar; 146128277c9SStephan Aßmus friend class ScrollCorner; 147128277c9SStephan Aßmus }; 148128277c9SStephan Aßmus 149128277c9SStephan Aßmus 150128277c9SStephan Aßmus 151128277c9SStephan Aßmus #endif // SCROLL_VIEW_H 152