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, 26*c4ce9e76SStephan Aßmus SCROLL_VISIBLE_RECT_IS_CHILD_BOUNDS = 0x10 27128277c9SStephan Aßmus }; 28128277c9SStephan Aßmus 29*c4ce9e76SStephan Aßmus enum { 30*c4ce9e76SStephan Aßmus BORDER_LEFT = 0x01, 31*c4ce9e76SStephan Aßmus BORDER_TOP = 0x02, 32*c4ce9e76SStephan Aßmus BORDER_RIGHT = 0x04, 33*c4ce9e76SStephan Aßmus BORDER_BOTTOM = 0x08, 34*c4ce9e76SStephan Aßmus BORDER_ALL = BORDER_LEFT | BORDER_TOP | BORDER_RIGHT | BORDER_BOTTOM 35*c4ce9e76SStephan Aßmus }; 36*c4ce9e76SStephan Aßmus 37*c4ce9e76SStephan Aßmus 38128277c9SStephan Aßmus class ScrollView : public BView, public Scroller { 39128277c9SStephan Aßmus public: 40*c4ce9e76SStephan Aßmus ScrollView(BView* child, uint32 scrollingFlags, 41*c4ce9e76SStephan Aßmus BRect frame, const char *name, 42*c4ce9e76SStephan Aßmus uint32 resizingMode, uint32 viewFlags, 43*c4ce9e76SStephan Aßmus uint32 borderStyle = B_FANCY_BORDER, 44*c4ce9e76SStephan Aßmus uint32 borderFlags = BORDER_ALL); 45128277c9SStephan Aßmus virtual ~ScrollView(); 46128277c9SStephan Aßmus 47128277c9SStephan Aßmus virtual void AllAttached(); 48128277c9SStephan Aßmus virtual void Draw(BRect updateRect); 49128277c9SStephan Aßmus virtual void FrameResized(float width, float height); 50128277c9SStephan Aßmus virtual void WindowActivated(bool activated); 51128277c9SStephan Aßmus 52f10474fcSStephan Aßmus #ifdef __HAIKU__ 53f10474fcSStephan Aßmus virtual BSize MinSize(); 54f10474fcSStephan Aßmus virtual BSize PreferredSize(); 55f10474fcSStephan Aßmus #endif 56f10474fcSStephan Aßmus 57f10474fcSStephan Aßmus 58128277c9SStephan Aßmus uint32 ScrollingFlags() const; 59128277c9SStephan Aßmus void SetVisibleRectIsChildBounds(bool flag); 60128277c9SStephan Aßmus bool VisibleRectIsChildBounds() const; 61128277c9SStephan Aßmus 62128277c9SStephan Aßmus BView* Child() const; 63128277c9SStephan Aßmus void ChildFocusChanged(bool focused); 64128277c9SStephan Aßmus 65128277c9SStephan Aßmus BScrollBar* HScrollBar() const; 66128277c9SStephan Aßmus BScrollBar* VScrollBar() const; 67128277c9SStephan Aßmus BView* HVScrollCorner() const; 68128277c9SStephan Aßmus 69128277c9SStephan Aßmus void SetHSmallStep(float hStep); 70128277c9SStephan Aßmus void SetVSmallStep(float vStep); 71128277c9SStephan Aßmus void SetSmallSteps(float hStep, float vStep); 72128277c9SStephan Aßmus void GetSmallSteps(float* hStep, 73128277c9SStephan Aßmus float* vStep) const; 74128277c9SStephan Aßmus float HSmallStep() const; 75128277c9SStephan Aßmus float VSmallStep() const; 76128277c9SStephan Aßmus 77128277c9SStephan Aßmus protected: 78128277c9SStephan Aßmus virtual void DataRectChanged(BRect oldDataRect, 79128277c9SStephan Aßmus BRect newDataRect); 80128277c9SStephan Aßmus virtual void ScrollOffsetChanged(BPoint oldOffset, 81128277c9SStephan Aßmus BPoint newOffset); 82128277c9SStephan Aßmus virtual void VisibleSizeChanged(float oldWidth, 83128277c9SStephan Aßmus float oldHeight, 84128277c9SStephan Aßmus float newWidth, 85128277c9SStephan Aßmus float newHeight); 86128277c9SStephan Aßmus virtual void ScrollTargetChanged(Scrollable* oldTarget, 87128277c9SStephan Aßmus Scrollable* newTarget); 88128277c9SStephan Aßmus 89128277c9SStephan Aßmus private: 90128277c9SStephan Aßmus BView* fChild; // child view 91128277c9SStephan Aßmus uint32 fScrollingFlags; 92128277c9SStephan Aßmus InternalScrollBar* fHScrollBar; // horizontal scroll bar 93128277c9SStephan Aßmus InternalScrollBar* fVScrollBar; // vertical scroll bar 94128277c9SStephan Aßmus ScrollCorner* fScrollCorner; // scroll corner 95128277c9SStephan Aßmus bool fHVisible; // horizontal/vertical scroll 96128277c9SStephan Aßmus bool fVVisible; // bar visible flag 97128277c9SStephan Aßmus bool fCornerVisible; // scroll corner visible flag 98128277c9SStephan Aßmus bool fWindowActive; 99128277c9SStephan Aßmus bool fChildFocused; 100128277c9SStephan Aßmus float fHSmallStep; 101128277c9SStephan Aßmus float fVSmallStep; 102128277c9SStephan Aßmus 103*c4ce9e76SStephan Aßmus uint32 fBorderStyle; 104*c4ce9e76SStephan Aßmus uint32 fBorderFlags; 105*c4ce9e76SStephan Aßmus 106128277c9SStephan Aßmus void _ScrollValueChanged( 107128277c9SStephan Aßmus InternalScrollBar* scrollBar, 108128277c9SStephan Aßmus float value); 109128277c9SStephan Aßmus void _ScrollCornerValueChanged(BPoint offset); 110128277c9SStephan Aßmus 111128277c9SStephan Aßmus protected: 112128277c9SStephan Aßmus virtual void _Layout(uint32 flags); 113128277c9SStephan Aßmus 114128277c9SStephan Aßmus private: 115128277c9SStephan Aßmus void _UpdateScrollBars(); 116128277c9SStephan Aßmus uint32 _UpdateScrollBarVisibility(); 117128277c9SStephan Aßmus 118128277c9SStephan Aßmus BRect _InnerRect() const; 119128277c9SStephan Aßmus BRect _ChildRect() const; 120128277c9SStephan Aßmus BRect _ChildRect(bool hbar, bool vbar) const; 121128277c9SStephan Aßmus BRect _GuessVisibleRect(bool hbar, bool vbar) const; 122128277c9SStephan Aßmus BRect _MaxVisibleRect() const; 123*c4ce9e76SStephan Aßmus #ifdef __HAIKU__ 124*c4ce9e76SStephan Aßmus virtual BSize _Size(BSize childSize); 125*c4ce9e76SStephan Aßmus #endif 126128277c9SStephan Aßmus 127128277c9SStephan Aßmus friend class InternalScrollBar; 128128277c9SStephan Aßmus friend class ScrollCorner; 129128277c9SStephan Aßmus }; 130128277c9SStephan Aßmus 131128277c9SStephan Aßmus 132128277c9SStephan Aßmus 133128277c9SStephan Aßmus #endif // SCROLL_VIEW_H 134