BsGUIToggleGroup.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "BsGUIToggleGroup.h"
  2. #include "BsGUIToggle.h"
  3. using namespace CamelotFramework;
  4. namespace BansheeEngine
  5. {
  6. GUIToggleGroup::~GUIToggleGroup()
  7. {
  8. for(auto& button : mButtons)
  9. {
  10. button->_setToggleGroup(nullptr);
  11. }
  12. }
  13. void GUIToggleGroup::initialize(const std::shared_ptr<GUIToggleGroup>& sharedPtr)
  14. {
  15. mThis = sharedPtr;
  16. }
  17. void GUIToggleGroup::add(GUIToggle* toggle)
  18. {
  19. auto iterFind = std::find(begin(mButtons), end(mButtons), toggle);
  20. if(iterFind != end(mButtons))
  21. return;
  22. mButtons.push_back(toggle);
  23. toggle->_setToggleGroup(mThis.lock());
  24. }
  25. void GUIToggleGroup::remove(GUIToggle* toggle)
  26. {
  27. auto sharedPtr = mThis.lock(); // Make sure we keep a reference because calling _setToggleGroup(nullptr)
  28. // may otherwise clear the last reference and cause us to destruct
  29. auto iterFind = std::find(begin(mButtons), end(mButtons), toggle);
  30. if(iterFind == end(mButtons))
  31. return;
  32. (*iterFind)->_setToggleGroup(nullptr);
  33. mButtons.erase(iterFind);
  34. }
  35. }