manage cursor based on current peer position
Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
parent
b307b82ac4
commit
d793156f62
31
keys.go
31
keys.go
|
@ -11,37 +11,12 @@ type Binding struct {
|
|||
}
|
||||
|
||||
func (vc *ViewController) CursorUp(g *gocui.Gui, v *gocui.View) error {
|
||||
return MoveCursor(-1, vc, g, v)
|
||||
vc.State.SetCurrent(vc.State.GetState().Current - 1)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (vc *ViewController) CursorDown(g *gocui.Gui, v *gocui.View) error {
|
||||
return MoveCursor(1, vc, g, v)
|
||||
}
|
||||
|
||||
func MoveCursor(mod int, vc *ViewController, g *gocui.Gui, v *gocui.View) error {
|
||||
if v == nil {
|
||||
return nil
|
||||
}
|
||||
cx, cy := v.Cursor()
|
||||
// get peers
|
||||
ps := vc.State.GetState()
|
||||
peers := ps.Peers
|
||||
// Don't go beyond available list of peers
|
||||
if cy+mod >= len(peers) || cy+mod < 0 {
|
||||
return nil
|
||||
}
|
||||
// update currently selected peer in the list
|
||||
vc.State.SetCurrent(cy + mod)
|
||||
|
||||
if err := v.SetCursor(cx, cy+mod); err != nil {
|
||||
if mod == -1 {
|
||||
return nil
|
||||
}
|
||||
ox, oy := v.Origin()
|
||||
if err := v.SetOrigin(ox, oy+mod); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
vc.State.SetCurrent(vc.State.GetState().Current + 1)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
3
model.go
3
model.go
|
@ -15,6 +15,9 @@ type Model struct {
|
|||
}
|
||||
|
||||
func (m *Model) Current(state PeersState, peerIndex int) PeersState {
|
||||
if peerIndex < 0 || peerIndex >= len(state.Peers) {
|
||||
return state
|
||||
}
|
||||
return PeersState{
|
||||
Peers: state.Peers,
|
||||
Current: peerIndex,
|
||||
|
|
31
render.go
31
render.go
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"github.com/jroimartin/gocui"
|
||||
|
@ -10,12 +11,13 @@ import (
|
|||
func GenRenderFunc(g *gocui.Gui, state *State) func() {
|
||||
return func() {
|
||||
ps := state.GetState()
|
||||
renderPeers(g, ps.Peers)
|
||||
renderPeerList(g, ps.Peers)
|
||||
renderPeerInfo(g, state.GetCurrent())
|
||||
updatePeerCursor(g, ps.Current)
|
||||
}
|
||||
}
|
||||
|
||||
func renderPeers(g *gocui.Gui, peers []Peer) {
|
||||
func renderPeerList(g *gocui.Gui, peers []Peer) {
|
||||
if len(peers) == 0 {
|
||||
return
|
||||
}
|
||||
|
@ -56,11 +58,18 @@ func renderPeerInfo(g *gocui.Gui, peer *Peer) {
|
|||
})
|
||||
}
|
||||
|
||||
func boolToString(v bool, yes string, no string) string {
|
||||
if v {
|
||||
return yes
|
||||
} else {
|
||||
return no
|
||||
func updatePeerCursor(g *gocui.Gui, current int) {
|
||||
v, err := g.View("main")
|
||||
if err != nil {
|
||||
log.Panicln("unable to find main view")
|
||||
}
|
||||
cx, _ := v.Cursor()
|
||||
|
||||
if err := v.SetCursor(cx, current); err != nil {
|
||||
ox, _ := v.Origin()
|
||||
if err := v.SetOrigin(ox, current); err != nil {
|
||||
log.Panicln("unable to scroll")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,3 +86,11 @@ func (p Peer) AsTable(maxWidth int) string {
|
|||
boolToString(p.Network.Trusted, "trusted", "normal"),
|
||||
boolToString(p.Network.Static, "static", "dynamic"))
|
||||
}
|
||||
|
||||
func boolToString(v bool, yes string, no string) string {
|
||||
if v {
|
||||
return yes
|
||||
} else {
|
||||
return no
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue