root/headers/os/interface/SeparatorView.h
/*
 * Copyright 2009, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _SEPARATOR_VIEW_H
#define _SEPARATOR_VIEW_H


#include <Alignment.h>
#include <String.h>
#include <View.h>


class BSeparatorView : public BView {
public:
                                                                BSeparatorView(orientation orientation,
                                                                        border_style border = B_PLAIN_BORDER);
                                                                BSeparatorView(const char* name,
                                                                        const char* label,
                                                                        orientation orientation = B_HORIZONTAL,
                                                                        border_style border = B_FANCY_BORDER,
                                                                        const BAlignment& alignment
                                                                                = BAlignment(B_ALIGN_HORIZONTAL_CENTER,
                                                                                        B_ALIGN_VERTICAL_CENTER));
                                                                BSeparatorView(const char* name,
                                                                        BView* labelView,
                                                                        orientation orientation = B_HORIZONTAL,
                                                                        border_style border = B_FANCY_BORDER,
                                                                        const BAlignment& alignment
                                                                                = BAlignment(B_ALIGN_HORIZONTAL_CENTER,
                                                                                        B_ALIGN_VERTICAL_CENTER));
                                                                BSeparatorView(const char* label = NULL,
                                                                        orientation orientation = B_HORIZONTAL,
                                                                        border_style border = B_FANCY_BORDER,
                                                                        const BAlignment& alignment
                                                                                = BAlignment(B_ALIGN_HORIZONTAL_CENTER,
                                                                                        B_ALIGN_VERTICAL_CENTER));
                                                                BSeparatorView(BView* labelView,
                                                                        orientation orientation = B_HORIZONTAL,
                                                                        border_style border = B_FANCY_BORDER,
                                                                        const BAlignment& alignment
                                                                                = BAlignment(B_ALIGN_HORIZONTAL_CENTER,
                                                                                        B_ALIGN_VERTICAL_CENTER));

                                                                BSeparatorView(BMessage* archive);

        virtual                                         ~BSeparatorView();

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

        virtual void                            Draw(BRect updateRect);

        virtual void                            GetPreferredSize(float* width, float* height);
        virtual BSize                           MinSize();
        virtual BSize                           MaxSize();
        virtual BSize                           PreferredSize();

                        void                            SetOrientation(orientation orientation);
                        void                            SetAlignment(const BAlignment& aligment);
                        void                            SetBorderStyle(border_style border);

                        void                            SetLabel(const char* label);
                        void                            SetLabel(BView* view, bool deletePrevious);

        virtual status_t                        Perform(perform_code code, void* data);

protected:
        virtual void                            DoLayout();

private:
        // FBC padding
        virtual void                            _ReservedSeparatorView1();
        virtual void                            _ReservedSeparatorView2();
        virtual void                            _ReservedSeparatorView3();
        virtual void                            _ReservedSeparatorView4();
        virtual void                            _ReservedSeparatorView5();
        virtual void                            _ReservedSeparatorView6();
        virtual void                            _ReservedSeparatorView7();
        virtual void                            _ReservedSeparatorView8();
        virtual void                            _ReservedSeparatorView9();
        virtual void                            _ReservedSeparatorView10();

private:
                        void                            _Init(const char* label, BView* labelView,
                                                                        orientation orientation,
                                                                        BAlignment alignment, border_style border);

                        float                           _BorderSize() const;
                        BRect                           _MaxLabelBounds() const;

private:
                        BString                         fLabel;
                        BView*                          fLabelView;

                        orientation                     fOrientation;
                        BAlignment                      fAlignment;
                        border_style            fBorder;

                        uint32                          _reserved[10];
};

#endif // _SEPARATOR_VIEW_H