root/src/tests/kits/interface/layout/widget_layout_test/GroupView.h
/*
 * Copyright 2007, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
 * All rights reserved. Distributed under the terms of the MIT License.
 */
#ifndef WIDGET_LAYOUT_TEST_GROUP_VIEW_H
#define WIDGET_LAYOUT_TEST_GROUP_VIEW_H


#include "View.h"


// GroupView
class GroupView : public View {
public:
                                                                GroupView(enum orientation orientation,
                                                                        int32 lineCount = 1);
        virtual                                         ~GroupView();

                        void                            SetSpacing(float horizontal, float vertical);
                        void                            SetInsets(float left, float top, float right,
                                                                        float bottom);

        virtual BSize                           MinSize();
        virtual BSize                           MaxSize();
        virtual BSize                           PreferredSize();
        virtual BAlignment                      Alignment();

        virtual void                            InvalidateLayout();
        virtual void                            Layout();

private:
        struct LayoutInfo;

private:
                        void                            _ValidateMinMax();
                        void                            _LayoutLine(int32 size, LayoutInfo* infos,
                                                                        int32 infoCount);

                        BSize                           _AddInsetsAndSpacing(BSize size);
                        BSize                           _SubtractInsetsAndSpacing(BSize size);

                        int32                           _RowCount() const;
                        int32                           _ColumnCount() const;
                        View*                           _ChildAt(int32 column, int32 row) const;

private:
                        enum orientation        fOrientation;
                        int32                           fLineCount;
                        float                           fColumnSpacing;
                        float                           fRowSpacing;
                        BRect                           fInsets;
                        bool                            fMinMaxValid;
                        int32                           fMinWidth;
                        int32                           fMinHeight;
                        int32                           fMaxWidth;
                        int32                           fMaxHeight;
                        int32                           fPreferredWidth;
                        int32                           fPreferredHeight;
                        LayoutInfo*                     fColumnInfos;
                        LayoutInfo*                     fRowInfos;
                        int32                           fColumnCount;
                        int32                           fRowCount;
};


// Glue
class Glue : public View {
public:
                                                                Glue();
};


// Strut
class Strut : public View {
public:
                                                                Strut(float pixelWidth, float pixelHeight);

        virtual BSize                           MinSize();
        virtual BSize                           MaxSize();

private:
                        BSize                           fSize;
};


// HStrut
class HStrut : public Strut {
public:
                                                                HStrut(float width);
};


// VStrut
class VStrut : public Strut {
public:
                                                                VStrut(float height);
};


#endif  // WIDGET_LAYOUT_TEST_GROUP_VIEW_H