31 lines
1.4 KiB
Go
31 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
|
||
}
|