MCPcopy
hub / github.com/rgburke/grv / Render

Method Render

cmd/grv/diff_view.go:236–303  ·  view source on GitHub ↗

Render generates and writes the diff view to the provided window

(win RenderWindow)

Source from the content-addressed store, hash-verified

234
235// Render generates and writes the diff view to the provided window
236func (diffView *DiffView) Render(win RenderWindow) (err error) {
237 diffView.lock.Lock()
238 defer diffView.lock.Unlock()
239
240 diffView.lastViewDimension = win.ViewDimensions()
241
242 if diffView.activeDiff == "" {
243 return diffView.AbstractWindowView.renderEmptyView(win, "No diff to display")
244 } else if diffView.activeDiff != diffView.lastRequestedDiff {
245 return diffView.AbstractWindowView.renderEmptyView(win, "Loading diff...")
246 }
247
248 rows := win.Rows() - 2
249 viewPos := diffView.activeViewPos
250 diffLines, ok := diffView.diffs[diffView.activeDiff]
251 if !ok {
252 log.Errorf("No diff data found for %v", diffView.activeDiff)
253 return
254 }
255
256 lineNum := uint(len(diffLines.lines))
257 viewPos.DetermineViewStartRow(rows, lineNum)
258
259 lineIndex := viewPos.ViewStartRowIndex()
260 startColumn := viewPos.ViewStartColumn()
261
262 var lineBuilder *LineBuilder
263 for rowIndex := uint(0); rowIndex < rows && lineIndex < lineNum; rowIndex++ {
264 diffLine := diffLines.lines[lineIndex]
265
266 if lineBuilder, err = win.LineBuilder(rowIndex+1, startColumn); err != nil {
267 return
268 }
269
270 lineBuilder.Append(" ")
271 for _, section := range diffLine.sections {
272 if section.char != 0 {
273 lineBuilder.AppendACSChar(section.char, section.themeComponentID)
274 } else {
275 lineBuilder.AppendWithStyle(section.themeComponentID, section.text)
276 }
277 }
278
279 lineIndex++
280 }
281
282 if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, diffView.viewState); err != nil {
283 return
284 }
285
286 win.DrawBorder()
287
288 if err = win.SetTitle(CmpDiffviewTitle, "Diff for %v", diffView.activeDiff); err != nil {
289 return
290 }
291
292 if err = win.SetFooter(CmpDiffviewFooter, "Line %v of %v", viewPos.ActiveRowIndex()+1, lineNum); err != nil {
293 return

Callers

nothing calls this directly

Calls 15

AppendMethod · 0.95
AppendACSCharMethod · 0.95
AppendWithStyleMethod · 0.95
SearchActiveMethod · 0.80
LockMethod · 0.65
UnlockMethod · 0.65
ViewDimensionsMethod · 0.65
RowsMethod · 0.65
DetermineViewStartRowMethod · 0.65
ViewStartRowIndexMethod · 0.65
ViewStartColumnMethod · 0.65
LineBuilderMethod · 0.65

Tested by

no test coverage detected