commit f61e77ab6fdaca800766af169431e801d0de94a7
parent 17c0c246ce8908671870fc8e00c17aaf844547f6
Author: Skylar Hill <stellarskylark@posteo.net>
Date: Thu, 2 Jun 2022 02:48:20 -0500
Add description scrolling feature with pageup/pagedown (ctrlJ and ctrlK aren't working for some reason
Diffstat:
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/rpgsheet b/rpgsheet
Binary files differ.
diff --git a/src/tui.nim b/src/tui.nim
@@ -39,13 +39,14 @@ proc runTui*(sheet: YamlDocument): void =
var selectedByWindow = initTable[string, int]()
var itemsByWindow = initTable[string, seq[string]]()
var statusText = ""
+ var descScroll = 0
while true:
var tb = newTerminalBuffer(terminalWidth(), terminalHeight())
var bb = newBoxBuffer(tb.width, tb.height)
var sbb = newBoxBuffer(tb.width, tb.height)
- let descY = tb.height - 7
+ let descY = tb.height - 10
var currentTabName: string
var currentTabWindows: seq[YamlNode]
@@ -82,28 +83,38 @@ proc runTui*(sheet: YamlDocument): void =
selectedWindowIndex += 1
else:
selectedWindowIndex = currentTabWindows.low
+ descScroll = 0
of Key.H:
if selectedWindowIndex > currentTabWindows.low:
selectedWindowIndex -= 1
else:
selectedWindowIndex = currentTabWindows.high
+ descScroll = 0
of Key.J:
let win = currentTabWindows[selectedWindowIndex].content
if selectedByWindow[win] < itemsByWindow[win].high:
selectedByWindow[win] = selectedByWindow[win] + 1
else:
selectedByWindow[win] = itemsByWindow[win].low
+ descScroll = 0
of Key.K:
let win = currentTabWindows[selectedWindowIndex].content
if selectedByWindow[win] > itemsByWindow[win].low:
selectedByWindow[win] = selectedByWindow[win] - 1
else:
selectedByWindow[win] = itemsByWindow[win].high
+ descScroll = 0
of Key.Enter:
let win = currentTabWindows[selectedWindowIndex].content
let itemList = itemsByWindow[win]
let action = itemList[selectedByWindow[win]]
statusText = fmt"{fancyDisplay(action, 99)}: {doVerb(action, Roll, sheet)}"
+ of Key.CtrlJ, Key.PageDown:
+ descScroll += 1
+ of Key.CtrlK, Key.PageUp:
+ descScroll =
+ if descScroll == 0: 0
+ else: descScroll - 1
else: discard
# Write title
@@ -194,10 +205,12 @@ proc runTui*(sheet: YamlDocument): void =
else: "Press ENTER to roll"
tb.write(3, descY + 1, fmt"Value: {val} [{roll}]")
if desc != "":
- let formattedDesc = desc.wrapWords(maxLineWidth = tb.width - 6)
+ let formattedDesc = desc.wrapWords(maxLineWidth = min(60, tb.width - 6))
let lines = formattedDesc.splitLines
for i in 0..lines.high:
- tb.write(3, descY + 2 + i, lines[i])
+ if i < descScroll:
+ continue
+ tb.write(3, descY + 2 + i - descScroll, lines[i])
tb.write(bb)
tb.setForegroundColor(fgBlue)