X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/7b6d0a81e0f3c8e33b1b76d5ecbc5bdb25a87249..37d5f21b23da5fbd6b44fed41f653927669571ed:/view.go?ds=inline diff --git a/view.go b/view.go index e392364..233e089 100644 --- a/view.go +++ b/view.go @@ -28,7 +28,7 @@ func newView(high, low int) *View { return &View{ high: high, low: low, - nodes: make(map[nodeKey]Node), + nodes: make(map[NodeKey]Node), } } @@ -38,7 +38,7 @@ func restoreView(state ViewState, high, low int, tree ViewNodeReader) (*View, er v := newView(high, low) v.merging = state.Merging for _, pair := range state.Lines { - line := nodeKey{pair[0], pair[1]} + line := NodeKey{pair[0], pair[1]} if line.level < 0 || line.level >= bits.UintSize-2 || line.index < 0 || line.index<= 0; n-- { line := v.lines[n] if line == key { @@ -168,6 +168,18 @@ func (v *View) Refresh(node Node) { } } +// Pending tells if a line of the view is not built yet. +func (v *View) Pending() bool { + for _, line := range v.lines { + _, built := v.nodes[line] + if !built { + return true + } + } + + return false +} + // Render returns the view as the model reads it: one line "id+n|text" for each // node inside tags, with the newlines of the text as spaces. func (v *View) Render() string { @@ -213,7 +225,7 @@ func (v *View) Context(end int) string { } // load keeps the node of line when it is built, and tells if it is. -func (v *View) load(tree ViewNodeReader, line nodeKey) (bool, error) { +func (v *View) load(tree ViewNodeReader, line NodeKey) (bool, error) { node, built, err := tree.Node(line.level, line.index) if err != nil || !built { return false, err @@ -240,7 +252,7 @@ func (v *View) fit(tree ViewNodeReader) (bool, error) { } left, right := v.lines[best], v.lines[best+1] - parent := nodeKey{left.level + 1, left.index / 2} + parent := NodeKey{left.level + 1, left.index / 2} _, err = v.load(tree, parent) if err != nil { return merged, err @@ -260,7 +272,7 @@ func (v *View) fit(tree ViewNodeReader) (bool, error) { } // renderLine writes one view line, "id+n|text", and a newline. -func (v *View) renderLine(text *strings.Builder, line nodeKey) { +func (v *View) renderLine(text *strings.Builder, line NodeKey) { body := viewPending node, built := v.nodes[line] if built { @@ -317,7 +329,7 @@ func (v *View) mostDue(tree ViewNodeReader) (int, error) { } // lineSize returns the size of a view line. -func (v *View) lineSize(line nodeKey) int { +func (v *View) lineSize(line NodeKey) int { node, built := v.nodes[line] if !built { return len(viewPending)