Tanoda
ExtensionsToggleGroup.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
6
7namespace UnityEngine.UI
8{
9 [AddComponentMenu("UI/Extensions/Extensions Toggle Group")]
10 [DisallowMultipleComponent]
11 public class ExtensionsToggleGroup : UIBehaviour
12 {
13 [SerializeField]
14 private bool m_AllowSwitchOff = false;
15 public bool AllowSwitchOff { get { return m_AllowSwitchOff; } set { m_AllowSwitchOff = value; } }
16
17 private List<ExtensionsToggle> m_Toggles = new List<ExtensionsToggle>();
18
19 [Serializable]
20 public class ToggleGroupEvent : UnityEvent<bool>
21 { }
22
25
26 public ExtensionsToggle SelectedToggle { get; private set; }
27
28
30 { }
31
32 private void ValidateToggleIsInGroup(ExtensionsToggle toggle)
33 {
34 if (toggle == null || !m_Toggles.Contains(toggle))
35 throw new ArgumentException(string.Format("Toggle {0} is not part of ToggleGroup {1}", new object[] { toggle, this }));
36 }
37
38 public void NotifyToggleOn(ExtensionsToggle toggle)
39 {
40 ValidateToggleIsInGroup(toggle);
41
42 // disable all toggles in the group
43 for (var i = 0; i < m_Toggles.Count; i++)
44 {
45 if (m_Toggles[i] == toggle)
46 {
47 SelectedToggle = toggle;
48 continue;
49 }
50
51 m_Toggles[i].IsOn = false;
52 }
54 }
55
57 {
58 if (m_Toggles.Contains(toggle))
59 {
60 m_Toggles.Remove(toggle);
61 toggle.onValueChanged.RemoveListener(NotifyToggleChanged);
62 }
63 }
64
65 private void NotifyToggleChanged(bool isOn)
66 {
67 onToggleGroupToggleChanged.Invoke(isOn);
68 }
69
70 public void RegisterToggle(ExtensionsToggle toggle)
71 {
72 if (!m_Toggles.Contains(toggle))
73 {
74 m_Toggles.Add(toggle);
75 toggle.onValueChanged.AddListener(NotifyToggleChanged);
76 }
77 }
78
79 public bool AnyTogglesOn()
80 {
81 return m_Toggles.Find(x => x.IsOn) != null;
82 }
83
84 public IEnumerable<ExtensionsToggle> ActiveToggles()
85 {
86 return m_Toggles.Where(x => x.IsOn);
87 }
88
89 public void SetAllTogglesOff()
90 {
91 bool oldAllowSwitchOff = m_AllowSwitchOff;
92 m_AllowSwitchOff = true;
93
94 for (var i = 0; i < m_Toggles.Count; i++)
95 m_Toggles[i].IsOn = false;
96
97 m_AllowSwitchOff = oldAllowSwitchOff;
98 }
99
100 public void HasTheGroupToggle(bool value)
101 {
102 Debug.Log("Testing, the group has toggled [" + value + "]");
103 }
104
105 public void HasAToggleFlipped(bool value)
106 {
107 Debug.Log("Testing, a toggle has toggled [" + value + "]");
108 }
109 }
110}
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
void NotifyToggleOn(ExtensionsToggle toggle)
void UnregisterToggle(ExtensionsToggle toggle)
IEnumerable< ExtensionsToggle > ActiveToggles()
void RegisterToggle(ExtensionsToggle toggle)
Simple toggle – something that has an 'on' and 'off' states: checkbox, toggle button,...
bool IsOn
Whether the toggle is currently active.
ToggleEvent onValueChanged
Allow for delegate-based subscriptions for faster events than 'eventReceiver', and allowing for multi...