root/src/tests/kits/interface/layout/widget_layout_test/RadioButton.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_RADIO_BUTTON_H
#define WIDGET_LAYOUT_TEST_RADIO_BUTTON_H


#include <Invoker.h>
#include <List.h>

#include "AbstractButton.h"
#include "GroupView.h"


// RadioButton
class RadioButton : public AbstractButton {
public:
                                                                RadioButton(BMessage* message = NULL,
                                                                        BMessenger target = BMessenger());

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

        virtual void                            Draw(BView* container, BRect updateRect);
};


// LabeledRadioButton
class LabeledRadioButton : public GroupView {
public:
                                                                LabeledRadioButton(const char* label,
                                                                        BMessage* message = NULL,
                                                                        BMessenger target = BMessenger());

                        RadioButton*            GetRadioButton() const  { return fRadioButton; }

                        void                            SetTarget(BMessenger messenger);

                        void                            SetSelected(bool selected);
                        bool                            IsSelected() const;

private:
                        RadioButton*            fRadioButton;
};


// RadioButtonGroup
class RadioButtonGroup : public BInvoker, private AbstractButton::Listener {
public:
                                                                RadioButtonGroup(BMessage* message = NULL,
                                                                        BMessenger target = BMessenger());
        virtual                                         ~RadioButtonGroup();

                        void                            AddButton(AbstractButton* button);
                        bool                            RemoveButton(AbstractButton* button);
                        AbstractButton*         RemoveButton(int32 index);

                        int32                           CountButtons() const;
                        AbstractButton*         ButtonAt(int32 index) const;
                        int32                           IndexOfButton(AbstractButton* button) const;

                        void                            SelectButton(AbstractButton* button);
                        void                            SelectButton(int32 index);
                        AbstractButton*         SelectedButton() const;
                        int32                           SelectedIndex() const;

private:
        virtual void                            SelectionChanged(AbstractButton* button);

                        void                            _SelectionChanged();

private:
                        BList                           fButtons;
                        AbstractButton*         fSelected;
};


#endif  // WIDGET_LAYOUT_TEST_RADIO_BUTTON_H