51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package table
|
|
|
|
func (m *Model) scrollRight() {
|
|
if m.horizontalScrollOffsetCol < m.maxHorizontalColumnIndex {
|
|
m.horizontalScrollOffsetCol++
|
|
}
|
|
}
|
|
|
|
func (m *Model) scrollLeft() {
|
|
if m.horizontalScrollOffsetCol > 0 {
|
|
m.horizontalScrollOffsetCol--
|
|
}
|
|
}
|
|
|
|
func (m *Model) recalculateLastHorizontalColumn() {
|
|
if m.horizontalScrollFreezeColumnsCount >= len(m.columns) {
|
|
m.maxHorizontalColumnIndex = 0
|
|
|
|
return
|
|
}
|
|
|
|
if m.totalWidth <= m.maxTotalWidth {
|
|
m.maxHorizontalColumnIndex = 0
|
|
|
|
return
|
|
}
|
|
|
|
const (
|
|
leftOverflowWidth = 2
|
|
borderAdjustment = 1
|
|
)
|
|
|
|
// Always have left border
|
|
visibleWidth := borderAdjustment + leftOverflowWidth
|
|
|
|
for i := 0; i < m.horizontalScrollFreezeColumnsCount; i++ {
|
|
visibleWidth += m.columns[i].width + borderAdjustment
|
|
}
|
|
|
|
m.maxHorizontalColumnIndex = len(m.columns) - 1
|
|
|
|
// Work backwards from the right
|
|
for i := len(m.columns) - 1; i >= m.horizontalScrollFreezeColumnsCount && visibleWidth <= m.maxTotalWidth; i-- {
|
|
visibleWidth += m.columns[i].width + borderAdjustment
|
|
|
|
if visibleWidth <= m.maxTotalWidth {
|
|
m.maxHorizontalColumnIndex = i - m.horizontalScrollFreezeColumnsCount
|
|
}
|
|
}
|
|
}
|