32 lines
1.4 KiB
Go
32 lines
1.4 KiB
Go
|
|
package utils
|
|||
|
|
|
|||
|
|
// CalculateSelectOptionsIndex рассчитывает индекс первой и последней опции для отображения в поле выбора
|
|||
|
|
func CalculateSelectOptionsIndex(focus, visibleCount, optionsCount int) (int, int) {
|
|||
|
|
//Если количество отображаемых больше, чем есть количество опций на самом деле,
|
|||
|
|
//то меняем количество опций для отображения на количество опций.
|
|||
|
|
if visibleCount > optionsCount {
|
|||
|
|
visibleCount = optionsCount
|
|||
|
|
}
|
|||
|
|
//Количество объектов сверху и снизу
|
|||
|
|
half := visibleCount / 2
|
|||
|
|
//Индекс первой опции для показа в списке
|
|||
|
|
start := focus - half
|
|||
|
|
//Если индекс меньше 0, то фиксируем его на первой
|
|||
|
|
if start < 0 {
|
|||
|
|
start = 0
|
|||
|
|
}
|
|||
|
|
//Индекс последней опции для показа в списке
|
|||
|
|
end := start + visibleCount
|
|||
|
|
//Если индекс больше, чем количество опций для вывода,
|
|||
|
|
//то фиксируем его на последней опции.
|
|||
|
|
//Производим перерасчет индекса первой опции
|
|||
|
|
if end > optionsCount {
|
|||
|
|
end = optionsCount
|
|||
|
|
start = end - visibleCount
|
|||
|
|
if start < 0 {
|
|||
|
|
start = 0
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return start, end
|
|||
|
|
}
|