root/headers/private/interface/MenuWindow.h
/*
 * Copyright 2001-2009, Haiku, Inc.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Marc Flerackers (mflerackers@androme.be)
 *              Stefano Ceccherini (burton666@libero.it)
 */
#ifndef MENU_WINDOW_H
#define MENU_WINDOW_H


#include <Window.h>

class BMenu;


namespace BPrivate {

class BMenuFrame;
class BMenuScroller;


class BMenuWindow : public BWindow {
public:
                                                        BMenuWindow(const char* name);
        virtual                                 ~BMenuWindow();

        virtual void                    DispatchMessage(BMessage* message,
                                                                BHandler* handler);

                        void                    AttachMenu(BMenu* menu);
                        void                    DetachMenu();

                        void                    AttachScrollers();
                        void                    DetachScrollers();

                        void                    SetSmallStep(float step);
                        void                    GetSteps(float* _smallStep, float* _largeStep) const;
                        bool                    HasScrollers() const;
                        bool                    CheckForScrolling(const BPoint& cursor);
                        bool                    TryScrollBy(const float& step);
                        bool                    TryScrollTo(const float& where);

private:
                        bool                    _Scroll(const BPoint& cursor);
                        void                    _ScrollBy(const float& step);

                        BMenu*                  fMenu;
                        BMenuFrame*             fMenuFrame;
                        BMenuScroller*  fUpperScroller;
                        BMenuScroller*  fLowerScroller;

                        float                   fScrollStep;
                        float                   fValue;
                        float                   fLimit;
};

}       // namespace BPrivate

#endif  // MENU_WINDOW_H