BsGUIToggleGroup.cpp 1.1 KB

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