/
Vagabond132
/
TerrariaCourse
Обзор
Документация
Войти
/
Vagabond132
/
TerrariaCourse
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Model/Menu/Menu.cs
97 строк
3 KB
Vagabond132
update
11 янв 2025, 07:11
11 янв 2025, 07:11
a9f164f
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Model.Menu { /// <summary> /// Подменю /// </summary> public class Menu : SubMenuItem { /// <summary> /// Необходима ли перерисовка /// </summary> public delegate void dNeedRedraw(); /// <summary> /// Событие перерисовки /// </summary> public event dNeedRedraw NeedRedraw = null; /// <summary> /// Сфокусированный элемент /// </summary> private int _focusedItemIndex = -1; /// <summary> /// Индекс сфкусированного элемента /// </summary> public int FocusedItemIndex { get { return _focusedItemIndex; } protected set { _focusedItemIndex = value; } } /// <summary> /// Конструктор /// </summary> /// <param name="parName"></param> public Menu(string parName) : base(0, parName) { } /// <summary> /// Сфокусироваться на следующем /// </summary> public void FocusNext() { int savFocusedIndex = _focusedItemIndex; if (_focusedItemIndex == Items.Length - 1) _focusedItemIndex = 0; else _focusedItemIndex++; Items[_focusedItemIndex].State = States.Focused; Items[savFocusedIndex].State = States.Normal; NeedRedraw?.Invoke(); } /// <summary> /// Сфокусироваться на предыдущем /// </summary> public void FocusPrevious() { int savFocusedIndex = _focusedItemIndex; if (_focusedItemIndex == 0) _focusedItemIndex = Items.Length - 1; else _focusedItemIndex--; Items[_focusedItemIndex].State = States.Focused; Items[savFocusedIndex].State = States.Normal; NeedRedraw?.Invoke(); } /// <summary> /// Сфокусироваться по индексу /// </summary> /// <param name="parId">индекс</param> public void FocusItemById(int parId) { int savFocusedIndex = _focusedItemIndex; MenuItem menuItem = this[parId]; _focusedItemIndex = new List<MenuItem>(Items).IndexOf(menuItem); if (savFocusedIndex != -1) Items[savFocusedIndex].State = States.Normal; Items[_focusedItemIndex].State = States.Focused; NeedRedraw?.Invoke(); } /// <summary> /// Выбрать сфокусированный элемент /// </summary> public void SelectFocusedItem() { Items[_focusedItemIndex].State = States.Selected; } } }