GoSetup-bubble/setup/utils/utils.go

32 lines
1.4 KiB
Go
Raw Normal View History

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
}