Files
hot-step-cpp-ROCm/engine/vendor/vst3sdk/vstgui4/vstgui/lib/crowcolumnview.h
T
2026-08-16 18:24:52 +07:00

121 lines
3.3 KiB
C++

// 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 "cviewcontainer.h"
namespace VSTGUI {
// a container view which automatically layout its child views
/** TODO: Doc
*/
class CAutoLayoutContainerView : public CViewContainer
{
public:
explicit CAutoLayoutContainerView (const CRect& size);
virtual void layoutViews () = 0;
bool attached (CView* parent) override;
void setViewSize (const CRect& rect, bool invalid = true) override;
bool addView (CView* pView, CView* pBefore = nullptr) override;
bool removeView (CView* pView, bool withForget = true) override;
bool changeViewZOrder (CView* view, uint32_t newIndex) override;
CLASS_METHODS_VIRTUAL(CAutoLayoutContainerView, CViewContainer)
};
//-----------------------------------------------------------------------------
// CRowColumnView Declaration
/// @brief a view container which layouts its subview as rows or columns
/// @ingroup containerviews
/// @ingroup new_in_4_1
//-----------------------------------------------------------------------------
class CRowColumnView : public CAutoLayoutContainerView
{
public:
static constexpr CViewAttributeID ViewAnimatesResizingAttr = 'crcr';
enum Style
{
/** subviews are arranged as rows (top to bottom) */
kRowStyle,
/** subviews are arranged as columns (left to right) */
kColumnStyle
};
enum LayoutStyle
{
/** subviews have the same left or top position (default) */
kLeftTopEqualy,
/** subviews are centered to each other */
kCenterEqualy,
/** subviews have the same right or bottom position */
kRightBottomEqualy,
/** stretch subviews to the same width and height */
kStretchEqualy,
/** options for the auto layout feature */
kTopLeft,
kTopCenter,
kTopRight,
kMiddleLeft,
kMiddleCenter,
kMiddleRight,
kBottomLeft,
kBottomCenter,
kBottomRight
};
CRowColumnView (const CRect& size, Style style = kRowStyle, LayoutStyle layoutStyle = kLeftTopEqualy, CCoord spacing = 0., const CRect& margin = CRect (0., 0., 0., 0.));
Style getStyle () const { return style; }
void setStyle (Style style);
CCoord getSpacing () const { return spacing; }
void setSpacing (CCoord spacing);
const CRect& getMargin () const { return margin; }
void setMargin (const CRect& margin);
bool isAnimateViewResizing () const;
void setAnimateViewResizing (bool state);
uint32_t getViewResizeAnimationTime () const { return viewResizeAnimationTime; }
void setViewResizeAnimationTime (uint32_t ms) { viewResizeAnimationTime = ms; }
bool hideClippedSubviews () const;
void setHideClippedSubviews (bool state);
LayoutStyle getLayoutStyle () const { return layoutStyle; }
void setLayoutStyle (LayoutStyle style);
void layoutViews () override;
bool sizeToFit () override;
CMessageResult notify (CBaseObject* sender, IdStringPtr message) override;
CLASS_METHODS(CRowColumnView, CAutoLayoutContainerView)
protected:
void getMaxChildViewSize (CPoint& maxSize);
void layoutViewsEqualSize ();
void resizeSubView (CView* view, const CRect& newSize);
enum {
kAnimateViewResizing = 1 << 0,
kHideClippedSubViews = 1 << 1,
};
Style style;
LayoutStyle layoutStyle;
CCoord spacing;
CRect margin;
int32_t flags;
bool layoutGuard;
uint32_t viewResizeAnimationTime;
};
} // VSTGUI