@@ -53,6 +53,7 @@ type boardView struct {
53
53
cursorY int
54
54
screenX , screenY int
55
55
scrollX int
56
+ scrollY int
56
57
columnSize int
57
58
}
58
59
@@ -109,28 +110,28 @@ func NewBoardView(project *jira.Project, boardConfiguration *jira.BoardConfigura
109
110
}
110
111
111
112
func (b * boardView ) Draw (screen tcell.Screen ) {
112
- b .topBar .Draw (screen )
113
- b .tmpX = 0
114
- for _ , column := range b .columns {
115
- app .DrawText (screen , b .tmpX - b .scrollX , topMargin , columnHeaderStyle , centerString (column , b .columnSize ))
116
- b .tmpX += b .columnSize + 1
117
- }
118
113
if len (b .issues ) == 0 {
114
+ b .drawColumnsHeaders (screen )
115
+ b .topBar .Draw (screen )
119
116
return
120
117
}
121
118
for _ , issue := range b .issues {
122
119
column := b .statusesColumnsMap [issue .Fields .Status .Id ]
123
120
x := b .columnsX [column ]
124
121
y := b .issuesRow [issue .Id ]
122
+ // do not draw issues at the bottom of top-bar&headers
123
+ if y + topMargin - b .scrollY < topMargin {
124
+ continue
125
+ }
125
126
if b .highlightedIssue .Id == issue .Id {
126
127
var style = & cursorIssueStyle
127
128
if b .issueSelected {
128
129
style = & selectedIssueStyle
129
130
}
130
- app .DrawTextLimited (screen , x - b .scrollX , y + topMargin , x + b .columnSize - b .scrollX , y + 1 + topMargin , * style , b .issuesSummaries [issue .Id ])
131
+ app .DrawTextLimited (screen , x - b .scrollX , y + topMargin - b . scrollY , x + b .columnSize - b .scrollX , y + 1 + topMargin , * style , b .issuesSummaries [issue .Id ])
131
132
continue
132
133
}
133
- app .DrawTextLimited (screen , x - b .scrollX , y + topMargin , x + b .columnSize - b .scrollX , y + 1 + topMargin , issueStyle , b .issuesSummaries [issue .Id ])
134
+ app .DrawTextLimited (screen , x - b .scrollX , y + topMargin - b . scrollY , x + b .columnSize - b .scrollX , y + 1 + topMargin , issueStyle , b .issuesSummaries [issue .Id ])
134
135
}
135
136
if b .highlightedIssue != nil {
136
137
app .DrawText (screen , 0 , 1 , titleStyle , app .WriteIndicator )
@@ -141,6 +142,8 @@ func (b *boardView) Draw(screen tcell.Screen) {
141
142
} else {
142
143
b .selectedIssueBottomBar .Draw (screen )
143
144
}
145
+ b .drawColumnsHeaders (screen )
146
+ b .topBar .Draw (screen )
144
147
b .ensureHighlightInViewport ()
145
148
}
146
149
@@ -169,7 +172,6 @@ func (b *boardView) Init() {
169
172
app .GetApp ().Loading (true )
170
173
b .issues = make ([]jira.Issue , 0 , maxIssuesNumber )
171
174
page := int32 (0 )
172
- // TODO - cursorY scrolling needs to be added in order to scroll long columns
173
175
for len (b .issues ) < maxIssuesNumber {
174
176
iss , total , _ , err := b .api .SearchJqlPageable (b .filterJQL , page , issueFetchBatchSize )
175
177
if err != nil {
@@ -237,6 +239,14 @@ func (b *boardView) HandleKeyEvent(ev *tcell.EventKey) {
237
239
}
238
240
}
239
241
242
+ func (b * boardView ) drawColumnsHeaders (screen tcell.Screen ) {
243
+ b .tmpX = 0
244
+ for _ , column := range b .columns {
245
+ app .DrawText (screen , b .tmpX - b .scrollX , topMargin , columnHeaderStyle , centerString (column , b .columnSize ))
246
+ b .tmpX += b .columnSize + 1
247
+ }
248
+ }
249
+
240
250
func (b * boardView ) moveCursorRight () {
241
251
if b .cursorX + 1 >= len (b .statusesColumnsMap ) {
242
252
return
@@ -250,7 +260,9 @@ func (b *boardView) moveCursorRight() {
250
260
// no issues in a column
251
261
if f := b .refreshHighlightedIssue (); ! f {
252
262
b .moveCursorRight ()
263
+ return
253
264
}
265
+ b .scrollY = 0
254
266
}
255
267
256
268
func (b * boardView ) moveCursorLeft () {
@@ -266,7 +278,9 @@ func (b *boardView) moveCursorLeft() {
266
278
// no issues in a column
267
279
if f := b .refreshHighlightedIssue (); ! f {
268
280
b .moveCursorLeft ()
281
+ return
269
282
}
283
+ b .scrollY = 0
270
284
}
271
285
272
286
func (b * boardView ) handleActions () {
@@ -399,6 +413,9 @@ func (b *boardView) ensureHighlightInViewport() {
399
413
if b .scrollX + (b .cursorX * b .columnSize )+ b .columnSize > b .screenX { // highlighted issue out of screen
400
414
b .scrollX = app .MaxInt (0 , (b .cursorX - 2 )* b .columnSize )
401
415
}
416
+ if b .scrollY + b .cursorY > b .scrollY { // highlighted issue out of screen
417
+ b .scrollY = app .MaxInt (0 , b .cursorY - 2 )
418
+ }
402
419
}
403
420
404
421
func centerString (str string , width int ) string {
0 commit comments