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


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


class BStatusBar : public BView {
public:
                                                                BStatusBar(BRect frame, const char* name,
                                                                        const char* label = NULL,
                                                                        const char* trailingLabel = NULL);
                                                                BStatusBar(const char* name,
                                                                        const char* label = NULL,
                                                                        const char* trailingLabel = NULL);
                                                                BStatusBar(BMessage* archive);
        virtual                                         ~BStatusBar();

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

        virtual void                            AttachedToWindow();
        virtual void                            DetachedFromWindow();
        virtual void                            AllAttached();
        virtual void                            AllDetached();

        virtual void                            WindowActivated(bool state);
        virtual void                            MakeFocus(bool focus = true);

        virtual void                            GetPreferredSize(float* _width,
                                                                        float* _height);
        virtual BSize                           MinSize();
        virtual BSize                           MaxSize();
        virtual BSize                           PreferredSize();
        virtual void                            ResizeToPreferred();
        virtual void                            FrameMoved(BPoint newPosition);
        virtual void                            FrameResized(float newWidth, float newHeight);

        virtual void                            Draw(BRect updateRect);

        virtual void                            MessageReceived(BMessage* message);

        virtual void                            MouseDown(BPoint where);
        virtual void                            MouseUp(BPoint where);
        virtual void                            MouseMoved(BPoint where, uint32 transit,
                                                                        const BMessage* dragMessage);

        // BStatusBar
        virtual void                            SetBarColor(rgb_color color);
        virtual void                            SetBarHeight(float height);

        virtual void                            SetText(const char* string);
        virtual void                            SetTrailingText(const char* string);
        virtual void                            SetMaxValue(float max);

        virtual void                            Update(float delta, const char* text = NULL,
                                                                        const char* trailingText = NULL);
        virtual void                            Reset(const char* label = NULL,
                                                                        const char* trailingLabel = NULL);
        virtual void                            SetTo(float value, const char* text = NULL,
                                                                        const char* trailingText = NULL);

                        float                           CurrentValue() const;
                        float                           MaxValue() const;
                        rgb_color                       BarColor() const;
                        float                           BarHeight() const;

                        const char*                     Text() const;
                        const char*                     TrailingText() const;
                        const char*                     Label() const;
                        const char*                     TrailingLabel() const;

        virtual BHandler*                       ResolveSpecifier(BMessage* message,
                                                                        int32 index, BMessage* specifier,
                                                                        int32 what, const char* property);
        virtual status_t                        GetSupportedSuites(BMessage* data);

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

private:
        // FBC memebers
        virtual void                            _ReservedStatusBar2();
        virtual void                            _ReservedStatusBar3();
        virtual void                            _ReservedStatusBar4();

                        BStatusBar&                     operator=(const BStatusBar& other);

                        void                            _InitObject();
                        void                            _SetTextData(BString& text, const char* string,
                                                                        const BString& combineWith,
                                                                        bool rightAligned);
                        BRect                           _BarFrame(const font_height* fontHeight
                                                                        = NULL) const;
                        float                           _BarPosition(const BRect& barFrame) const;
                        bool                            _HasText() const;

                        BString                         fLabel;
                        BString                         fTrailingLabel;
                        BString                         fText;
                        BString                         fTrailingText;
                        float                           fMax;
                        float                           fCurrent;
                        float                           fBarHeight;
                        float                           fTextDivider;
                        rgb_color                       fBarColor;
                        bool                            fCustomBarHeight;
                        uint32                          fInternalFlags;

                        uint32                          _reserved[4];
};

#endif  // _STATUS_BAR_H