|
|
|
@ -124,7 +124,6 @@ func (screen *Screen) DrawOldQuotes(quotes *Quotes) { |
|
|
|
|
termbox.Flush() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Draw accepts variable number of arguments and knows how to display the
|
|
|
|
|
// market data, stock quotes, current time, and an arbitrary string.
|
|
|
|
|
func (screen *Screen) Draw(objects ...interface{}) *Screen { |
|
|
|
@ -155,33 +154,15 @@ func (screen *Screen) Draw(objects ...interface{}) *Screen { |
|
|
|
|
|
|
|
|
|
// DrawLine takes the incoming string, tokenizes it to extract markup
|
|
|
|
|
// elements, and displays it all starting at (x,y) location.
|
|
|
|
|
func (screen *Screen) DrawLine(x int, y int, str string) { |
|
|
|
|
start, column := 0, 0 |
|
|
|
|
|
|
|
|
|
for _, token := range screen.markup.Tokenize(str) { |
|
|
|
|
// First check if it's a tag. Tags are eaten up and not displayed.
|
|
|
|
|
if screen.markup.IsTag(token) { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
// DrawLineFlush gives the option to flush screen after drawing
|
|
|
|
|
|
|
|
|
|
// Here comes the actual text: display it one character at a time.
|
|
|
|
|
for i, char := range token { |
|
|
|
|
if !screen.markup.RightAligned { |
|
|
|
|
start = x + column |
|
|
|
|
column++ |
|
|
|
|
} else { |
|
|
|
|
start = screen.width - len(token) + i |
|
|
|
|
} |
|
|
|
|
termbox.SetCell(start, y, char, screen.markup.Foreground, screen.markup.Background) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
termbox.Flush() |
|
|
|
|
// wrapper for DrawLineFlush
|
|
|
|
|
func (screen *Screen) DrawLine(x int, y int, str string) { |
|
|
|
|
screen.DrawLineFlush(x, y, str, true) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Identical to DrawLine, no flush at the end perhaps should be a part
|
|
|
|
|
// of DrawLine, with a flush parameter, or a wrapper function could be
|
|
|
|
|
// used
|
|
|
|
|
func (screen *Screen) DrawLineWithoutFlush(x int, y int, str string) { |
|
|
|
|
func (screen *Screen) DrawLineFlush(x int, y int, str string, flush bool) { |
|
|
|
|
start, column := 0, 0 |
|
|
|
|
|
|
|
|
|
for _, token := range screen.markup.Tokenize(str) { |
|
|
|
@ -201,6 +182,9 @@ func (screen *Screen) DrawLineWithoutFlush(x int, y int, str string) { |
|
|
|
|
termbox.SetCell(start, y, char, screen.markup.Foreground, screen.markup.Background) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if flush { |
|
|
|
|
termbox.Flush() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Underlying workhorse function that takes multiline string, splits it into
|
|
|
|
@ -230,7 +214,7 @@ func (screen *Screen) draw(str string, offset bool) { |
|
|
|
|
strings.Contains(allLines[row], "Change") { |
|
|
|
|
drewHeading = true |
|
|
|
|
screen.headerLine = row |
|
|
|
|
screen.DrawLineWithoutFlush(0, row, allLines[row]) |
|
|
|
|
screen.DrawLine(0, row, allLines[row]) |
|
|
|
|
// move on to the point to offset to
|
|
|
|
|
row += screen.offset |
|
|
|
|
} |
|
|
|
@ -238,13 +222,13 @@ func (screen *Screen) draw(str string, offset bool) { |
|
|
|
|
// only write the necessary lines
|
|
|
|
|
if row <= len(allLines) && |
|
|
|
|
row > screen.headerLine { |
|
|
|
|
screen.DrawLineWithoutFlush(0, row-screen.offset, allLines[row]) |
|
|
|
|
screen.DrawLineFlush(0, row-screen.offset, allLines[row], false) |
|
|
|
|
} else if row > len(allLines) { |
|
|
|
|
row = len(allLines) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
screen.DrawLineWithoutFlush(0, row, allLines[row]) |
|
|
|
|
screen.DrawLineFlush(0, row, allLines[row], false) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// If the quotes lines in this cycle are shorter than in the previous
|
|
|
|
|