From 77e5ca087e61b5f75117dd04196d903cf48a6d68 Mon Sep 17 00:00:00 2001 From: bertl4398 Date: Fri, 27 Jul 2018 17:58:25 +0200 Subject: [PATCH] insert highlight regions for scrolling --- todo/display.go | 19 +++++++++++++------ todo/widget.go | 2 ++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/todo/display.go b/todo/display.go index 057e94d5..5a27c6c9 100644 --- a/todo/display.go +++ b/todo/display.go @@ -2,6 +2,7 @@ package todo import ( "fmt" + "strconv" "github.com/rivo/tview" "github.com/senorprogrammer/wtf/checklist" @@ -14,14 +15,18 @@ func (widget *Widget) display() { str := "" newList := checklist.NewChecklist() - for _, item := range widget.list.UncheckedItems() { - str = str + widget.formattedItemLine(item, widget.list.SelectedItem(), widget.list.LongestLine()) + offset := 0 + + for idx, item := range widget.list.UncheckedItems() { + str = str + widget.formattedItemLine(idx, item, widget.list.SelectedItem(), widget.list.LongestLine()) newList.Items = append(newList.Items, item) } - for _, item := range widget.list.CheckedItems() { - str = str + widget.formattedItemLine(item, widget.list.SelectedItem(), widget.list.LongestLine()) + for idx, item := range widget.list.CheckedItems() { + str = str + widget.formattedItemLine(idx + offset, item, widget.list.SelectedItem(), widget.list.LongestLine()) newList.Items = append(newList.Items, item) + + offset++ } newList.SetSelectedByItem(widget.list.SelectedItem()) @@ -29,9 +34,10 @@ func (widget *Widget) display() { widget.View.Clear() widget.View.SetText(str) + widget.View.Highlight(strconv.Itoa(widget.list.Selected)).ScrollToHighlight() } -func (widget *Widget) formattedItemLine(item *checklist.ChecklistItem, selectedItem *checklist.ChecklistItem, maxLen int) string { +func (widget *Widget) formattedItemLine(idx int, item *checklist.ChecklistItem, selectedItem *checklist.ChecklistItem, maxLen int) string { foreColor, backColor := "white", wtf.Config.UString("wtf.colors.background", "black") if item.Checked { @@ -44,7 +50,8 @@ func (widget *Widget) formattedItemLine(item *checklist.ChecklistItem, selectedI } str := fmt.Sprintf( - "[%s:%s]|%s| %s[white]", + `["%d"][%s:%s]|%s| %s[-][""]`, + idx, foreColor, backColor, item.CheckMark(), diff --git a/todo/widget.go b/todo/widget.go index 7ce923e5..c4e546bb 100644 --- a/todo/widget.go +++ b/todo/widget.go @@ -55,6 +55,8 @@ func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { } widget.init() + widget.View.SetScrollable(true) + widget.View.SetRegions(true) widget.View.SetInputCapture(widget.keyboardIntercept) return &widget