1
0
mirror of https://github.com/taigrr/wtf synced 2026-04-01 22:58:42 -07:00

Update dependencies

This commit is contained in:
Chris Cummer
2018-07-31 10:20:12 -07:00
parent 015d7736db
commit 869cb0b9da
23 changed files with 1605 additions and 76 deletions

View File

@@ -166,16 +166,16 @@ func (a *ansi) Write(text []byte) (int, error) {
red := (colorNumber - 16) / 36
green := ((colorNumber - 16) / 6) % 6
blue := (colorNumber - 16) % 6
color = fmt.Sprintf("%02x%02x%02x", 255*red/5, 255*green/5, 255*blue/5)
color = fmt.Sprintf("#%02x%02x%02x", 255*red/5, 255*green/5, 255*blue/5)
} else if colorNumber <= 255 {
grey := 255 * (colorNumber - 232) / 23
color = fmt.Sprintf("%02x%02x%02x", grey, grey, grey)
color = fmt.Sprintf("#%02x%02x%02x", grey, grey, grey)
}
} else if fields[index+1] == "2" && len(fields) > index+4 { // 24-bit colors.
red, _ := strconv.Atoi(fields[index+2])
green, _ := strconv.Atoi(fields[index+3])
blue, _ := strconv.Atoi(fields[index+4])
color = fmt.Sprintf("%02x%02x%02x", red, green, blue)
color = fmt.Sprintf("#%02x%02x%02x", red, green, blue)
}
}
if len(color) > 0 {

View File

@@ -227,13 +227,14 @@ func (a *Application) Suspend(f func()) bool {
// Draw refreshes the screen. It calls the Draw() function of the application's
// root primitive and then syncs the screen buffer.
func (a *Application) Draw() *Application {
a.RLock()
a.Lock()
defer a.Unlock()
screen := a.screen
root := a.root
fullscreen := a.rootFullscreen
before := a.beforeDraw
after := a.afterDraw
a.RUnlock()
// Maybe we're not ready yet or not anymore.
if screen == nil || root == nil {

View File

@@ -354,6 +354,7 @@ func (d *DropDown) InputHandler() func(event *tcell.EventKey, setFocus func(p Pr
// Hand control over to the list.
d.open = true
optionBefore := d.currentOption
d.list.SetSelectedFunc(func(index int, mainText, secondaryText string, shortcut rune) {
// An option was selected. Close the list again.
d.open = false
@@ -374,6 +375,10 @@ func (d *DropDown) InputHandler() func(event *tcell.EventKey, setFocus func(p Pr
d.prefix = string(r[:len(r)-1])
}
evalPrefix()
} else if event.Key() == tcell.KeyEscape {
d.open = false
d.currentOption = optionBefore
setFocus(d)
} else {
d.prefix = ""
}

View File

@@ -310,6 +310,12 @@ func (t *TextView) ScrollToEnd() *TextView {
return t
}
// GetScrollOffset returns the number of rows and columns that are skipped at
// the top left corner when the text view has been scrolled.
func (t *TextView) GetScrollOffset() (row, column int) {
return t.lineOffset, t.columnOffset
}
// Clear removes all text from the buffer.
func (t *TextView) Clear() *TextView {
t.buffer = nil

View File

@@ -266,6 +266,9 @@ type TreeView struct {
// An optional function which is called when a tree item was selected.
selected func(node *TreeNode)
// The visible nodes, top-down, as set by process().
nodes []*TreeNode
}
// NewTreeView returns a new tree view.
@@ -362,17 +365,14 @@ func (t *TreeView) SetSelectedFunc(handler func(node *TreeNode)) *TreeView {
return t
}
// Draw draws this primitive onto the screen.
func (t *TreeView) Draw(screen tcell.Screen) {
t.Box.Draw(screen)
if t.root == nil {
return
}
x, y, width, height := t.GetInnerRect()
// process builds the visible tree, populates the "nodes" slice, and processes
// pending selection actions.
func (t *TreeView) process() {
_, _, _, height := t.GetInnerRect()
// Determine visible nodes and their placement.
var graphicsOffset, maxTextX int
var nodes []*TreeNode
t.nodes = nil
selectedIndex := -1
topLevelGraphicsX := -1
if t.graphics {
@@ -403,7 +403,7 @@ func (t *TreeView) Draw(screen tcell.Screen) {
maxTextX = node.textX
}
if node == t.currentNode && node.selectable {
selectedIndex = len(nodes)
selectedIndex = len(t.nodes)
}
// Maybe we want to skip this level.
@@ -413,13 +413,13 @@ func (t *TreeView) Draw(screen tcell.Screen) {
// Add and recurse (if desired).
if node.level >= t.topLevel {
nodes = append(nodes, node)
t.nodes = append(t.nodes, node)
}
return node.expanded
})
// Post-process positions.
for _, node := range nodes {
for _, node := range t.nodes {
// If text must align, we correct the positions.
if t.align && node.level > t.topLevel {
node.textX = maxTextX
@@ -441,41 +441,41 @@ func (t *TreeView) Draw(screen tcell.Screen) {
case treeUp:
for newSelectedIndex > 0 {
newSelectedIndex--
if nodes[newSelectedIndex].selectable {
if t.nodes[newSelectedIndex].selectable {
break MovementSwitch
}
}
newSelectedIndex = selectedIndex
case treeDown:
for newSelectedIndex < len(nodes)-1 {
for newSelectedIndex < len(t.nodes)-1 {
newSelectedIndex++
if nodes[newSelectedIndex].selectable {
if t.nodes[newSelectedIndex].selectable {
break MovementSwitch
}
}
newSelectedIndex = selectedIndex
case treeHome:
for newSelectedIndex = 0; newSelectedIndex < len(nodes); newSelectedIndex++ {
if nodes[newSelectedIndex].selectable {
for newSelectedIndex = 0; newSelectedIndex < len(t.nodes); newSelectedIndex++ {
if t.nodes[newSelectedIndex].selectable {
break MovementSwitch
}
}
newSelectedIndex = selectedIndex
case treeEnd:
for newSelectedIndex = len(nodes) - 1; newSelectedIndex >= 0; newSelectedIndex-- {
if nodes[newSelectedIndex].selectable {
for newSelectedIndex = len(t.nodes) - 1; newSelectedIndex >= 0; newSelectedIndex-- {
if t.nodes[newSelectedIndex].selectable {
break MovementSwitch
}
}
newSelectedIndex = selectedIndex
case treePageUp:
if newSelectedIndex+height < len(nodes) {
if newSelectedIndex+height < len(t.nodes) {
newSelectedIndex += height
} else {
newSelectedIndex = len(nodes) - 1
newSelectedIndex = len(t.nodes) - 1
}
for ; newSelectedIndex < len(nodes); newSelectedIndex++ {
if nodes[newSelectedIndex].selectable {
for ; newSelectedIndex < len(t.nodes); newSelectedIndex++ {
if t.nodes[newSelectedIndex].selectable {
break MovementSwitch
}
}
@@ -487,13 +487,13 @@ func (t *TreeView) Draw(screen tcell.Screen) {
newSelectedIndex = 0
}
for ; newSelectedIndex >= 0; newSelectedIndex-- {
if nodes[newSelectedIndex].selectable {
if t.nodes[newSelectedIndex].selectable {
break MovementSwitch
}
}
newSelectedIndex = selectedIndex
}
t.currentNode = nodes[newSelectedIndex]
t.currentNode = t.nodes[newSelectedIndex]
if newSelectedIndex != selectedIndex {
t.movement = treeNone
if t.changed != nil {
@@ -512,7 +512,7 @@ func (t *TreeView) Draw(screen tcell.Screen) {
} else {
// If selection is not visible or selectable, select the first candidate.
if t.currentNode != nil {
for index, node := range nodes {
for index, node := range t.nodes {
if node.selectable {
selectedIndex = index
t.currentNode = node
@@ -524,8 +524,25 @@ func (t *TreeView) Draw(screen tcell.Screen) {
t.currentNode = nil
}
}
}
// Draw draws this primitive onto the screen.
func (t *TreeView) Draw(screen tcell.Screen) {
t.Box.Draw(screen)
if t.root == nil {
return
}
// Build the tree if necessary.
if t.nodes == nil {
t.process()
}
defer func() {
t.nodes = nil // Rebuild during next call to Draw()
}()
// Scroll the tree.
x, y, width, height := t.GetInnerRect()
switch t.movement {
case treeUp:
t.offsetY--
@@ -534,7 +551,7 @@ func (t *TreeView) Draw(screen tcell.Screen) {
case treeHome:
t.offsetY = 0
case treeEnd:
t.offsetY = len(nodes)
t.offsetY = len(t.nodes)
case treePageUp:
t.offsetY -= height
case treePageDown:
@@ -543,8 +560,8 @@ func (t *TreeView) Draw(screen tcell.Screen) {
t.movement = treeNone
// Fix invalid offsets.
if t.offsetY >= len(nodes)-height {
t.offsetY = len(nodes) - height
if t.offsetY >= len(t.nodes)-height {
t.offsetY = len(t.nodes) - height
}
if t.offsetY < 0 {
t.offsetY = 0
@@ -553,7 +570,7 @@ func (t *TreeView) Draw(screen tcell.Screen) {
// Draw the tree.
posY := y
lineStyle := tcell.StyleDefault.Foreground(t.graphicsColor)
for index, node := range nodes {
for index, node := range t.nodes {
// Skip invisible parts.
if posY >= y+height+1 {
break
@@ -585,7 +602,7 @@ func (t *TreeView) Draw(screen tcell.Screen) {
if node.textX > node.graphicsX && node.graphicsX < width {
// Connect to the node above.
if posY-1 >= y && nodes[index-1].graphicsX <= node.graphicsX && nodes[index-1].textX > node.graphicsX {
if posY-1 >= y && t.nodes[index-1].graphicsX <= node.graphicsX && t.nodes[index-1].textX > node.graphicsX {
PrintJoinedSemigraphics(screen, x+node.graphicsX, posY-1, Borders.TopLeft, t.graphicsColor)
}
@@ -610,7 +627,7 @@ func (t *TreeView) Draw(screen tcell.Screen) {
// Text.
if node.textX+prefixWidth < width {
style := tcell.StyleDefault.Foreground(node.color)
if index == selectedIndex {
if node == t.currentNode {
style = tcell.StyleDefault.Background(node.color).Foreground(t.backgroundColor)
}
printWithStyle(screen, node.text, x+node.textX+prefixWidth, posY, width-node.textX-prefixWidth, AlignLeft, style)
@@ -661,5 +678,7 @@ func (t *TreeView) InputHandler() func(event *tcell.EventKey, setFocus func(p Pr
}
}
}
t.process()
})
}