Unuk/src/libUnuk/UI/ButtonGroup.cpp
2012-01-14 03:39:10 +00:00

102 lines
2.4 KiB
C++

#include "ButtonGroup.h"
ButtonGroup::ButtonGroup(void) {
_selectedButton = -1;
}
ButtonGroup::~ButtonGroup(void) {
for(std::list<Button*>::iterator i = _buttons.begin(); i != _buttons.end(); ++i) {
Button* btn = (*i);
delete btn;
}
}
void ButtonGroup::CheckMouseOverDummy(void) {
for(std::list<Button*>::iterator i = _buttons.begin(); i != _buttons.end(); ++i) {
(*i)->CheckMouseOver();
}
}
int ButtonGroup::CheckMouseOver(void) {
int buttonIndex = 0;
for(std::list<Button*>::iterator i = _buttons.begin(); i != _buttons.end(); ++i) {
if((*i)->CheckMouseOver()) {
return buttonIndex;
}
buttonIndex++;
}
return -1;
}
void ButtonGroup::RenderLiteral(void) {
for(std::list<Button*>::iterator i = _buttons.begin(); i != _buttons.end(); ++i) {
(*i)->RenderLiteral();
}
}
void ButtonGroup::AddButton(Button* button) {
_buttons.push_back(button);
}
void ButtonGroup::RemoveButton(int index) {
int buttonsIndex = 0;
for(std::list<Button*>::iterator i = _buttons.begin(); i != _buttons.end(); ++i) {
if(buttonsIndex == index) {
_buttons.erase(i);
break;
}
buttonsIndex++;
}
}
void ButtonGroup::SelectNext(void) {
if(_selectedButton == -1) {
HighlightNewSelection(0);
} else {
HighlightNewSelection(_selectedButton + 1);
}
}
void ButtonGroup::SelectPrevious(void) {
if(_selectedButton == -1) {
HighlightNewSelection(0);
} else {
HighlightNewSelection(_selectedButton - 1);
}
}
void ButtonGroup::SetSelectedButton(int button) {
HighlightNewSelection(button);
}
void ButtonGroup::HighlightNewSelection(int newButton) {
if(_selectedButton != -1) {
// Turn off highlight for currently highlighted button
GetButton(_selectedButton)->SetHighlighted(false);
}
_selectedButton = newButton;
// If < 0 then up was pressed when first index was selected
// If >= _buttons.size() then down was pressed when last index was selected
if(_selectedButton < 0) {
_selectedButton = _buttons.size() - 1;
} else if(_selectedButton >= (int)_buttons.size()) {
_selectedButton = 0;
}
// Highlight new selection
GetButton(_selectedButton)->SetHighlighted(true);
}
Button* ButtonGroup::GetButton(int index) {
int buttonsIndex = 0;
for(std::list<Button*>::iterator i = _buttons.begin(); i != _buttons.end(); ++i) {
if(buttonsIndex == index) {
return (*i);
}
buttonsIndex++;
}
return NULL;
}