quick col sort alt-arrow

Former-commit-id: 26c0ad0b9c13af965ea9a97b6c17071b4d7fc0fa [formerly 26c0ad0b9c13af965ea9a97b6c17071b4d7fc0fa [formerly c758130b3655fb7238fbef7f2ac195200f6a748d [formerly cdd896a765]]]
Former-commit-id: 242690bbe155849d104fc86e37d267925256a66c
Former-commit-id: ad6daf0564273a81ff0552b65d33911330799f15 [formerly 6f5c410d8556a327a166a5e325344e12c3f309ac]
Former-commit-id: 991313a66e7ea042684886af536feb94e6175f4e
pull/15/head
Miguel Mota 6 years ago
parent 6e00f2044b
commit d47824bd28

@ -20,6 +20,19 @@ func (ct *Cointop) setKeybinding(key interface{}, callback func(g *gocui.Gui, v
}
}
func (ct *Cointop) setKeybindingMod(key interface{}, mod gocui.Modifier, callback func(g *gocui.Gui, v *gocui.View) error) {
var err error
switch t := key.(type) {
case gocui.Key:
err = ct.g.SetKeybinding("", t, mod, callback)
case rune:
err = ct.g.SetKeybinding("", t, mod, callback)
}
if err != nil {
log.Fatal(err)
}
}
func (ct *Cointop) keybindings(g *gocui.Gui) error {
ct.setKeybinding(gocui.KeyArrowUp, ct.cursorUp)
ct.setKeybinding(gocui.KeyArrowDown, ct.cursorDown)
@ -38,6 +51,8 @@ func (ct *Cointop) keybindings(g *gocui.Gui) error {
ct.setKeybinding(gocui.KeyCtrlP, ct.prevPage)
ct.setKeybinding(gocui.KeyCtrlR, ct.refresh)
ct.setKeybinding(gocui.KeyCtrlU, ct.pageUp)
ct.setKeybindingMod(gocui.KeyArrowLeft, gocui.ModAlt, ct.sortPrevCol)
ct.setKeybindingMod(gocui.KeyArrowRight, gocui.ModAlt, ct.sortNextCol)
ct.setKeybinding('0', ct.firstPage)
ct.setKeybinding('1', ct.sortfn("1hchange", true))
ct.setKeybinding('2', ct.sortfn("24hchange", true))

@ -4,6 +4,18 @@ import (
"github.com/jroimartin/gocui"
)
func (ct *Cointop) getCurrentPage() int {
return ct.page + 1
}
func (ct *Cointop) getTotalPages() int {
return (ct.getListCount() / ct.perpage) + 1
}
func (ct *Cointop) getListCount() int {
return len(ct.allcoins)
}
func (ct *Cointop) cursorDown(g *gocui.Gui, v *gocui.View) error {
if ct.tableview == nil {
return nil
@ -195,15 +207,3 @@ func (ct *Cointop) lastPage(g *gocui.Gui, v *gocui.View) error {
ct.rowChanged()
return nil
}
func (ct *Cointop) getCurrentPage() int {
return ct.page + 1
}
func (ct *Cointop) getTotalPages() int {
return (ct.getListCount() / ct.perpage) + 1
}
func (ct *Cointop) getListCount() int {
return len(ct.allcoins)
}

@ -6,6 +6,20 @@ import (
apt "github.com/miguelmota/cointop/pkg/api/types"
)
var colorder = []string{
"rank",
"name",
"symbol",
"price",
"marketcap",
"24hvolume",
"1hchange",
"7dchange",
"totalsupply",
"availablesupply",
"lastupdated",
}
func (ct *Cointop) sort(sortby string, desc bool, list []*apt.Coin) {
ct.sortby = sortby
ct.sortdesc = desc
@ -63,3 +77,47 @@ func (ct *Cointop) sortfn(sortby string, desc bool) func(g *gocui.Gui, v *gocui.
return nil
}
}
func (ct *Cointop) getSortColIndex() int {
for i, col := range colorder {
if ct.sortby == col {
return i
}
}
return 0
}
func (ct *Cointop) sortPrevCol(g *gocui.Gui, v *gocui.View) error {
nextsortby := colorder[0]
i := ct.getSortColIndex()
k := i - 1
if k < 0 {
k = 0
}
nextsortby = colorder[k]
ct.sort(nextsortby, ct.sortdesc, ct.coins)
ct.Update(func() {
ct.tableview.Clear()
ct.updateTable()
})
ct.rowChanged()
return nil
}
func (ct *Cointop) sortNextCol(g *gocui.Gui, v *gocui.View) error {
nextsortby := colorder[0]
l := len(colorder)
i := ct.getSortColIndex()
k := i + 1
if k > l-1 {
k = l - 1
}
nextsortby = colorder[k]
ct.sort(nextsortby, ct.sortdesc, ct.coins)
ct.Update(func() {
ct.tableview.Clear()
ct.updateTable()
})
ct.rowChanged()
return nil
}

@ -12,7 +12,7 @@ func (ct *Cointop) updateStatusbar(s string) {
ct.statusbarview.Clear()
currpage := ct.getCurrentPage()
totalpages := ct.getTotalPages()
fmt.Fprintln(ct.statusbarview, pad.Right(fmt.Sprintf("[q]uit [← →]page %v/%v %s", currpage, totalpages, s), maxX, " "))
fmt.Fprintln(ct.statusbarview, pad.Right(fmt.Sprintf("[q]uit [h]elp [← →]page %v/%v %s", currpage, totalpages, s), maxX, " "))
})
}

Loading…
Cancel
Save