1//************************************ bs::framework - Copyright 2018 Marko Pintera **************************************//
2//*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********//
3#include "GUI/BsGUIToggleGroup.h"
4#include "GUI/BsGUIToggle.h"
5
6namespace bs
7{
8 GUIToggleGroup::GUIToggleGroup(bool allowAllOff)
9 :mAllowAllOff(allowAllOff)
10 { }
11
12 GUIToggleGroup::~GUIToggleGroup()
13 {
14 for(auto& button : mButtons)
15 {
16 button->_setToggleGroup(nullptr);
17 }
18 }
19
20 void GUIToggleGroup::initialize(const SPtr<GUIToggleGroup>& sharedPtr)
21 {
22 mThis = sharedPtr;
23 }
24
25 void GUIToggleGroup::_add(GUIToggle* toggle)
26 {
27 auto iterFind = std::find(begin(mButtons), end(mButtons), toggle);
28 if(iterFind != end(mButtons))
29 return;
30
31 mButtons.push_back(toggle);
32 toggle->_setToggleGroup(mThis.lock());
33 }
34
35 void GUIToggleGroup::_remove(GUIToggle* toggle)
36 {
37 auto sharedPtr = mThis.lock(); // Make sure we keep a reference because calling _setToggleGroup(nullptr)
38 // may otherwise clear the last reference and cause us to destruct
39
40 auto iterFind = std::find(begin(mButtons), end(mButtons), toggle);
41 if(iterFind == end(mButtons))
42 return;
43
44 (*iterFind)->_setToggleGroup(nullptr);
45 mButtons.erase(iterFind);
46 }
47}