root/headers/os/interface/GroupLayout.h
/*
 * Copyright 2006-2010, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _GROUP_LAYOUT_H
#define _GROUP_LAYOUT_H

#include <TwoDimensionalLayout.h>

class BGroupLayout : public BTwoDimensionalLayout {
public:
                                                                BGroupLayout(orientation orientation,
                                                                        float spacing = B_USE_DEFAULT_SPACING);
                                                                BGroupLayout(BMessage* from);
        virtual                                         ~BGroupLayout();

                        float                           Spacing() const;
                        void                            SetSpacing(float spacing);

                        orientation                     Orientation() const;
                        void                            SetOrientation(orientation orientation);

                        float                           ItemWeight(int32 index) const;
                        void                            SetItemWeight(int32 index, float weight);

        virtual BLayoutItem*            AddView(BView* child);
        virtual BLayoutItem*            AddView(int32 index, BView* child);
        virtual BLayoutItem*            AddView(BView* child, float weight);
        virtual BLayoutItem*            AddView(int32 index, BView* child,
                                                                        float weight);

        virtual bool                            AddItem(BLayoutItem* item);
        virtual bool                            AddItem(int32 index, BLayoutItem* item);
        virtual bool                            AddItem(BLayoutItem* item, float weight);
        virtual bool                            AddItem(int32 index, BLayoutItem* item,
                                                                        float weight);

        virtual status_t                        Archive(BMessage* into, bool deep = true) const;
        static  BArchivable*            Instantiate(BMessage* from);

        virtual status_t                        Perform(perform_code d, void* arg);

protected:
        virtual status_t                        AllArchived(BMessage* into) const;
        virtual status_t                        AllUnarchived(const BMessage* from);
        virtual status_t                        ItemArchived(BMessage* into, BLayoutItem* item,
                                                                        int32 index) const;
        virtual status_t                        ItemUnarchived(const BMessage* from,
                                                                        BLayoutItem* item, int32 index);

        virtual bool                            ItemAdded(BLayoutItem* item, int32 atIndex);
        virtual void                            ItemRemoved(BLayoutItem* item, int32 fromIndex);

        virtual void                            PrepareItems(orientation orientation);

        virtual int32                           InternalCountColumns();
        virtual int32                           InternalCountRows();
        virtual void                            GetColumnRowConstraints(
                                                                        orientation orientation,
                                                                        int32 index,
                                                                        ColumnRowConstraints* constraints);
        virtual void                            GetItemDimensions(BLayoutItem* item,
                                                                        Dimensions* dimensions);

private:

        // FBC padding
        virtual void                            _ReservedGroupLayout1();
        virtual void                            _ReservedGroupLayout2();
        virtual void                            _ReservedGroupLayout3();
        virtual void                            _ReservedGroupLayout4();
        virtual void                            _ReservedGroupLayout5();
        virtual void                            _ReservedGroupLayout6();
        virtual void                            _ReservedGroupLayout7();
        virtual void                            _ReservedGroupLayout8();
        virtual void                            _ReservedGroupLayout9();
        virtual void                            _ReservedGroupLayout10();

        // forbidden methods
                                                                BGroupLayout(const BGroupLayout&);
                        void                            operator =(const BGroupLayout&);

                        struct ItemLayoutData;

                        ItemLayoutData*         _LayoutDataForItem(BLayoutItem* item) const;

                        orientation                     fOrientation;
                        BList                           fVisibleItems;

                        uint32                          _reserved[5];
};

#endif  // _GROUP_LAYOUT_H