Initial release
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
// This file is part of VSTGUI. It is subject to the license terms
|
||||
// in the LICENSE file found in the top-level directory of this
|
||||
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "vstguifwd.h"
|
||||
#include "cviewcontainer.h"
|
||||
#include "iviewlistener.h"
|
||||
#include "controls/icontrollistener.h"
|
||||
|
||||
namespace VSTGUI {
|
||||
class CScrollContainer;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CScrollView Declaration
|
||||
//! @brief a scrollable container view with scrollbars
|
||||
/// @ingroup containerviews
|
||||
//-----------------------------------------------------------------------------
|
||||
class CScrollView : public CViewContainer, public IControlListener, public ViewListenerAdapter
|
||||
{
|
||||
protected:
|
||||
enum
|
||||
{
|
||||
kHorizontalScrollbarFlag,
|
||||
kVerticalScrollbarFlag,
|
||||
kDontDrawFrameFlag,
|
||||
kAutoDragScollingFlag,
|
||||
kOverlayScrollbarsFlag,
|
||||
kFollowFocusViewFlag,
|
||||
kAutoHideScrollbarsFlag,
|
||||
|
||||
kLastScrollViewStyleFlag
|
||||
};
|
||||
|
||||
public:
|
||||
CScrollView (const CRect& size, const CRect& containerSize, int32_t style,
|
||||
CCoord scrollbarWidth = 16, CBitmap* pBackground = nullptr);
|
||||
|
||||
/** Scroll View Style Flags */
|
||||
enum CScrollViewStyle
|
||||
{
|
||||
/** add a horizontal scrollbar */
|
||||
kHorizontalScrollbar = 1 << kHorizontalScrollbarFlag,
|
||||
/** add a vertical scrollbar */
|
||||
kVerticalScrollbar = 1 << kVerticalScrollbarFlag,
|
||||
/** don't draw frame */
|
||||
kDontDrawFrame = 1 << kDontDrawFrameFlag,
|
||||
/** automatic scrolling for drag moves */
|
||||
kAutoDragScrolling = 1 << kAutoDragScollingFlag,
|
||||
/** scrollbars are overlayed of the content */
|
||||
kOverlayScrollbars = 1 << kOverlayScrollbarsFlag,
|
||||
/** scroll to focus view when focus view changes */
|
||||
kFollowFocusView = 1 << kFollowFocusViewFlag,
|
||||
/** automatically hides the scrollbar if the container size is smaller than the size of the scrollview */
|
||||
kAutoHideScrollbars = 1 << kAutoHideScrollbarsFlag
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/// @name CScrollView Methods
|
||||
//-----------------------------------------------------------------------------
|
||||
//@{
|
||||
int32_t getStyle () const;
|
||||
void setStyle (int32_t newStyle);
|
||||
|
||||
int32_t getActiveScrollbars () const;
|
||||
|
||||
CCoord getScrollbarWidth () const;
|
||||
void setScrollbarWidth (CCoord width);
|
||||
|
||||
/** set the virtual size of this container */
|
||||
virtual void setContainerSize (const CRect& cs, bool keepVisibleArea = false);
|
||||
const CRect& getContainerSize () const;
|
||||
/** get scroll offset */
|
||||
const CPoint& getScrollOffset () const;
|
||||
/** set scroll offset */
|
||||
void setScrollOffset (CPoint newOffset);
|
||||
void resetScrollOffset ();
|
||||
|
||||
/** get the vertical scrollbar */
|
||||
CScrollbar* getVerticalScrollbar () const;
|
||||
/** get the horizontal scrollbar */
|
||||
CScrollbar* getHorizontalScrollbar () const;
|
||||
|
||||
/** set scrollview to show rect */
|
||||
virtual void makeRectVisible (const CRect& rect);
|
||||
|
||||
/** calculate the maximum rect where the scrollbars are inactive */
|
||||
CRect calculateOptimalContainerSize () const;
|
||||
|
||||
/** returns the visible rect of the client */
|
||||
CRect getVisibleClientRect () const;
|
||||
|
||||
enum class Edge
|
||||
{
|
||||
Top,
|
||||
Left,
|
||||
};
|
||||
/** set a static edge view
|
||||
*
|
||||
* An edge view can be set for the top and left edge. The top edge view will have the same
|
||||
* width as the scroll view. The bottom of the left edge view will always be the bottom
|
||||
* of the scroll view and its top will either be the bottom of the top edge view or the top of
|
||||
* the scroll view itself.
|
||||
*
|
||||
* @param edge the edge where to place the view
|
||||
* @param view the view to set (if this is a nullptr then the previously set view is removed)
|
||||
*
|
||||
* @ingroup new_in_4_15
|
||||
*/
|
||||
void setEdgeView (Edge edge, CView* view);
|
||||
CView* getEdgeView (Edge edge) const;
|
||||
//@}
|
||||
|
||||
// overwrite
|
||||
bool attached (CView* parent) override;
|
||||
bool addView (CView* pView, CView* pBefore = nullptr) override;
|
||||
bool removeView (CView* pView, bool withForget = true) override;
|
||||
bool removeAll (bool withForget = true) override;
|
||||
uint32_t getNbViews () const override;
|
||||
CView* getView (uint32_t index) const override;
|
||||
bool changeViewZOrder (CView* view, uint32_t newIndex) override;
|
||||
void drawBackgroundRect (CDrawContext* pContext, const CRect& _updateRect) override;
|
||||
void onMouseWheelEvent (MouseWheelEvent& event) override;
|
||||
void valueChanged (CControl* pControl) override;
|
||||
void setTransparency (bool val) override;
|
||||
void setBackgroundColor (const CColor& color) override;
|
||||
void setViewSize (const CRect& rect, bool invalid = true) override;
|
||||
void setAutosizeFlags (int32_t flags) override;
|
||||
CMessageResult notify (CBaseObject* sender, IdStringPtr message) override;
|
||||
|
||||
CLASS_METHODS_NOCOPY (CScrollView, CViewContainer)
|
||||
//-----------------------------------------------------------------------------
|
||||
protected:
|
||||
~CScrollView () noexcept override;
|
||||
|
||||
void recalculateLayout ();
|
||||
void preLayouting () const;
|
||||
void syncScrollbars (bool keepVisibleArea);
|
||||
void syncHScrollbar (bool keepVisibleArea);
|
||||
void syncVScrollbar (bool keepVisibleArea);
|
||||
|
||||
void viewSizeChanged (CView* view, const CRect& oldSize) override;
|
||||
void viewWillDelete (CView* view) override;
|
||||
|
||||
CScrollContainer* getScrollContainer () const;
|
||||
|
||||
static constexpr int32_t kHSBTag = 0;
|
||||
static constexpr int32_t kVSBTag = 1;
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
std::unique_ptr<Impl> impl;
|
||||
};
|
||||
|
||||
} // VSTGUI
|
||||
Reference in New Issue
Block a user