Release Please / Release Please (push) Skipped
Tests / Test (Go 1.22) (push) Skipped
Tests / Test (Go stable) (push) Skipped
Release / GoReleaser (push) Failing after 38s
Polish the office TUI with proportional pane layout, drag resize, live filtering, HTML mail preview, paginated mail lists, overflow scrollbars, flattened navigation, and project save/status fixes; add UpdateProjectStatus. Co-authored-by: Cursor <cursoragent@cursor.com>
74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
package ui
|
|
|
|
import (
|
|
"github.com/charmbracelet/bubbles/viewport"
|
|
"github.com/eslider/go-onlyoffice/cmd/office/model"
|
|
)
|
|
|
|
func (m *Model) scrollFocusedPane(key string) bool {
|
|
switch m.focus {
|
|
case model.FocusMenu:
|
|
return scrollViewport(&m.menuVP, key)
|
|
case model.FocusList:
|
|
switch key {
|
|
case "pgdown", "pgdn", "ctrl+d":
|
|
m.listTable.PageScroll(1)
|
|
return true
|
|
case "pgup", "b", "ctrl+u":
|
|
m.listTable.PageScroll(-1)
|
|
return true
|
|
}
|
|
return false
|
|
case model.FocusPreview:
|
|
if m.detail.Zone() != detailZoneContent {
|
|
return false
|
|
}
|
|
return m.detail.ScrollDocument(key)
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func (m *Model) paneHeight() int {
|
|
h := m.height - 3
|
|
if h < 3 {
|
|
h = 3
|
|
}
|
|
return h
|
|
}
|
|
|
|
func (m *Model) paneInnerWidth(outer int) int {
|
|
if outer <= 0 {
|
|
return 8
|
|
}
|
|
w := outer - 2 // border only; content fills inner box
|
|
if w < 8 {
|
|
w = 8
|
|
}
|
|
return w
|
|
}
|
|
|
|
func scrollViewport(vp *viewport.Model, key string) bool {
|
|
switch key {
|
|
case "up", "k":
|
|
vp.LineUp(1)
|
|
return true
|
|
case "down", "j":
|
|
vp.LineDown(1)
|
|
return true
|
|
case "pgdown", "pgdn", "ctrl+d":
|
|
vp.ViewDown()
|
|
return true
|
|
case "pgup", "b", "ctrl+u":
|
|
vp.ViewUp()
|
|
return true
|
|
case "home", "g":
|
|
vp.GotoTop()
|
|
return true
|
|
case "end", "G":
|
|
vp.GotoBottom()
|
|
return true
|
|
}
|
|
return false
|
|
}
|