diff --git a/cointop/keybindings.go b/cointop/keybindings.go index f9ef395..64807fc 100644 --- a/cointop/keybindings.go +++ b/cointop/keybindings.go @@ -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)) diff --git a/cointop/navigation.go b/cointop/navigation.go index 34b12fc..c3c2e87 100644 --- a/cointop/navigation.go +++ b/cointop/navigation.go @@ -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) -} diff --git a/cointop/sort.go b/cointop/sort.go index ea12c74..aff6de7 100644 --- a/cointop/sort.go +++ b/cointop/sort.go @@ -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 +} diff --git a/cointop/statusbar.go b/cointop/statusbar.go index bbbc370..0fed72f 100644 --- a/cointop/statusbar.go +++ b/cointop/statusbar.go @@ -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, " ")) }) }