(key string)
| 395 | } |
| 396 | |
| 397 | func (v *PricingView) handleKeyResults(key string) PricingEvent { |
| 398 | switch key { |
| 399 | case "up": |
| 400 | pageStart := v.ResultsPage * v.ResultsPerPage |
| 401 | if v.Selected > pageStart { |
| 402 | v.Selected-- |
| 403 | } else { |
| 404 | v.ActiveSection = PricingSectionCommand |
| 405 | v.BuilderFocus = BuilderFocusField |
| 406 | v.UpdateSuggestions() |
| 407 | } |
| 408 | case "down": |
| 409 | if len(v.FilteredItems) > 0 { |
| 410 | pageEnd := ((v.ResultsPage + 1) * v.ResultsPerPage) |
| 411 | if pageEnd > len(v.FilteredItems) { |
| 412 | pageEnd = len(v.FilteredItems) |
| 413 | } |
| 414 | pageEnd-- |
| 415 | if v.Selected < pageEnd { |
| 416 | v.Selected++ |
| 417 | } |
| 418 | } |
| 419 | case "j": |
| 420 | if v.ResultsPage > 0 { |
| 421 | v.ResultsPage-- |
| 422 | v.Selected = v.ResultsPage * v.ResultsPerPage |
| 423 | } |
| 424 | case "k": |
| 425 | totalPages := (len(v.FilteredItems) + v.ResultsPerPage - 1) / v.ResultsPerPage |
| 426 | if v.ResultsPage+1 < totalPages { |
| 427 | v.ResultsPage++ |
| 428 | v.Selected = v.ResultsPage * v.ResultsPerPage |
| 429 | } |
| 430 | case "pgdown": |
| 431 | totalPages := (len(v.FilteredItems) + v.ResultsPerPage - 1) / v.ResultsPerPage |
| 432 | if v.ResultsPage+1 < totalPages { |
| 433 | v.ResultsPage++ |
| 434 | v.Selected = v.ResultsPage * v.ResultsPerPage |
| 435 | } |
| 436 | case "pgup": |
| 437 | if v.ResultsPage > 0 { |
| 438 | v.ResultsPage-- |
| 439 | v.Selected = v.ResultsPage * v.ResultsPerPage |
| 440 | } |
| 441 | case "left": |
| 442 | if v.HScrollOffset > 0 { |
| 443 | v.HScrollOffset-- |
| 444 | } |
| 445 | case "right": |
| 446 | // Allow scrolling right only if there are more attr columns to reveal. |
| 447 | if v.scrollColCount > 0 && v.HScrollOffset+1 < v.scrollColCount { |
| 448 | v.HScrollOffset++ |
| 449 | } |
| 450 | case "esc": |
| 451 | return PricingEventQuit |
| 452 | } |
| 453 | return PricingEventNone |
| 454 | } |
no test coverage detected