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