osb/source/windowing/StarButtonGroup.hpp
2023-06-20 14:33:09 +10:00

60 lines
1.4 KiB
C++

#ifndef STAR_BUTTON_GROUP_HPP
#define STAR_BUTTON_GROUP_HPP
#include "StarWidget.hpp"
namespace Star {
STAR_CLASS(ButtonWidget);
STAR_CLASS(ButtonGroup);
STAR_CLASS(ButtonGroupWidget);
// Manages group of buttons in which *at most* a single button can be checked
// at any time.
class ButtonGroup {
public:
friend class ButtonWidget;
static int const NoButton = -1;
// Callback is called when any child buttons checked state is changed, and
// its parameter is the button being checked.
void setCallback(WidgetCallbackFunc callback);
ButtonWidget* button(int id) const;
List<ButtonWidget*> buttons() const;
size_t buttonCount() const;
int addButton(ButtonWidget* button, int id = NoButton);
void removeButton(ButtonWidget* button);
int id(ButtonWidget* button) const;
void select(int id);
// Will return null if no button is checked.
ButtonWidget* checkedButton() const;
// Will return NoButton if no button is checked.
int checkedId() const;
// when true it is not required for one of the buttons to be selected
bool toggle() const;
void setToggle(bool toggleMode);
protected:
// Should be called by child button widgets when they are changed from
// unchecked to checked.
void wasChecked(ButtonWidget* self);
private:
WidgetCallbackFunc m_callback;
Map<int, ButtonWidget*> m_buttons;
Map<ButtonWidget*, int> m_buttonIds;
bool m_toggle;
};
class ButtonGroupWidget : public ButtonGroup, public Widget {};
}
#endif