diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-01-14 17:02:51 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-01-14 17:02:51 +0200 |
| commit | 016e8cfc3c67c1d9bd1d116851c82763ab63e95b (patch) | |
| tree | 636d5d89eeaa3161409d6362ca43fbf566080a71 /internal/client | |
| parent | 8184c8d18799feb7ef0aa0eed7e5a2e67a01c791 (diff) | |
Networks are now scrollable
Diffstat (limited to 'internal/client')
| -rw-r--r-- | internal/client/ui/core/frequencylist/frequencylist.go | 5 | ||||
| -rw-r--r-- | internal/client/ui/core/networklist/networklist.go | 51 |
2 files changed, 38 insertions, 18 deletions
diff --git a/internal/client/ui/core/frequencylist/frequencylist.go b/internal/client/ui/core/frequencylist/frequencylist.go index 2b6a525..c9068b9 100644 --- a/internal/client/ui/core/frequencylist/frequencylist.go +++ b/internal/client/ui/core/frequencylist/frequencylist.go @@ -112,6 +112,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { m.height = ui.Height m.height -= lipgloss.Height(m.renderNetworkName()) m.height -= 1 + m.SetIndex(m.index) } switch msg := msg.(type) { @@ -179,7 +180,7 @@ func (m *Model) Blur() { m.focus = false } -func (m Model) Swap(dir int) (model Model, cmd tea.Cmd) { +func (m *Model) Swap(dir int) (model Model, cmd tea.Cmd) { cmd = nil networkId := state.NetworkId(m.networkIndex) assert.NotNil(networkId, "if frequency can swap it must mean the network id is valid") @@ -192,7 +193,7 @@ func (m Model) Swap(dir int) (model Model, cmd tea.Cmd) { }) } m.SetIndex(m.index + dir) - return m, cmd + return *m, cmd } func (m *Model) SetNetworkIndex(networkIndex int) { diff --git a/internal/client/ui/core/networklist/networklist.go b/internal/client/ui/core/networklist/networklist.go index a0cc0e6..eae1bd6 100644 --- a/internal/client/ui/core/networklist/networklist.go +++ b/internal/client/ui/core/networklist/networklist.go @@ -50,14 +50,18 @@ func IconStyle(icon string, fg, bg lipgloss.Color) lipgloss.Style { const PeersIndex = -1 type Model struct { - index int - focus bool + base int + index int + height int + focus bool } func New() Model { return Model{ - focus: false, - index: PeersIndex, + base: 0, + index: PeersIndex, + height: 1, + focus: false, } } @@ -74,14 +78,18 @@ func (m Model) View() string { builder.WriteString(peersButton) } builder.WriteString("\n") - for i, networkId := range state.Data.Networks { + + networks := state.Data.Networks + upper := min(m.base+m.height, len(networks)) + networks = networks[m.base:upper] + for i, networkId := range networks { network := state.State.Networks[networkId] icon := IconStyle(network.Icon, lipgloss.Color(network.FgHexColor), lipgloss.Color(network.BgHexColor), ) - if m.index == i { + if m.index == m.base+i { builder.WriteString(lipgloss.JoinHorizontal( ui.Center, selectedIndicator, @@ -105,12 +113,18 @@ func (m Model) View() string { } func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { + if !m.focus { + return m, nil + } + + m.height = ui.Height + m.height -= 1 // Inital top margin + m.height /= 4 // 4 per icon + m.height -= 1 // For peers icon + m.SetIndex(m.index) + switch msg := msg.(type) { case tea.KeyMsg: - if !m.focus { - return m, nil - } - key := msg.String() switch key { case "K": @@ -122,9 +136,9 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { return m.Swap(1) } case "k": - m.index = max(-1, m.index-1) + m.SetIndex(m.index - 1) case "j": - m.index = min(len(state.State.Networks)-1, m.index+1) + m.SetIndex(m.index + 1) case "Q": if state.UserID == nil || m.index == PeersIndex { @@ -162,12 +176,12 @@ func (m *Model) Blur() { m.focus = false } -func (m Model) Swap(dir int) (Model, tea.Cmd) { +func (m *Model) Swap(dir int) (Model, tea.Cmd) { tmp := state.Data.Networks[m.index] state.Data.Networks[m.index] = state.Data.Networks[m.index+dir] state.Data.Networks[m.index+dir] = tmp - m.index += dir - return m, gateway.Send(&packet.SetUserData{ + m.SetIndex(m.index + dir) + return *m, gateway.Send(&packet.SetUserData{ Data: state.JsonUserData(), }) } @@ -177,5 +191,10 @@ func (m Model) Index() int { } func (m *Model) SetIndex(index int) { - m.index = index + m.index = min(max(index, PeersIndex), len(state.State.Networks)-1) + if m.index < m.base && m.index != PeersIndex { + m.base = m.index + } else if m.index >= m.base+m.height { + m.base = 1 + m.index - m.height + } } |
