1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- using System;
- using UnityEngine;
- namespace COM3D2.MeidoPhotoStudio.Plugin
- {
- public class SelectionGrid : BaseControl
- {
- private SimpleToggle[] toggles;
- private int selectedItem;
- public int SelectedItem
- {
- get => selectedItem;
- set
- {
- this.selectedItem = Mathf.Clamp(value, 0, this.toggles.Length - 1);
- foreach (SimpleToggle toggle in toggles)
- {
- toggle.value = toggle.toggleIndex == this.selectedItem;
- }
- OnControlEvent(EventArgs.Empty);
- }
- }
- public SelectionGrid(string[] items, int selected = 0)
- {
- this.selectedItem = Mathf.Clamp(selected, 0, items.Length - 1);
- toggles = MakeToggles(items);
- }
- private SimpleToggle[] MakeToggles(string[] items)
- {
- SimpleToggle[] toggles = new SimpleToggle[items.Length];
- for (int i = 0; i < items.Length; i++)
- {
- SimpleToggle toggle = new SimpleToggle(items[i], i == SelectedItem);
- toggle.toggleIndex = i;
- toggle.ControlEvent += (s, a) => this.SelectedItem = (s as SimpleToggle).toggleIndex;
- toggles[i] = toggle;
- }
- return toggles;
- }
- public void SetItems(string[] items, int selectedItem = 0)
- {
- this.SelectedItem = Mathf.Clamp(selectedItem, 0, items.Length - 1);
- if (items.Length != toggles.Length)
- {
- this.toggles = MakeToggles(items);
- }
- else
- {
- for (int i = 0; i < items.Length; i++)
- {
- string item = items[i];
- this.toggles[i].value = i == SelectedItem;
- this.toggles[i].label = item;
- }
- }
- }
- public override void Draw(params GUILayoutOption[] layoutOptions)
- {
- GUILayout.BeginHorizontal();
- foreach (SimpleToggle toggle in toggles)
- {
- toggle.Draw(layoutOptions);
- }
- GUILayout.EndHorizontal();
- }
- private class SimpleToggle
- {
- public int toggleIndex;
- public bool value;
- public string label;
- public event EventHandler ControlEvent;
- public SimpleToggle(string label, bool value = false)
- {
- this.label = label;
- this.value = value;
- }
- public void Draw(params GUILayoutOption[] layoutOptions)
- {
- bool value = GUILayout.Toggle(this.value, label, layoutOptions);
- if (value != this.value)
- {
- this.value = value;
- ControlEvent?.Invoke(this, EventArgs.Empty);
- }
- }
- }
- }
- }
|