Render generates and writes the diff view to the provided window
(win RenderWindow)
| 234 | |
| 235 | // Render generates and writes the diff view to the provided window |
| 236 | func (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 |
nothing calls this directly
no test coverage detected