uiterm: remove *Ui argument from View methods
This commit is contained in:
@@ -11,20 +11,25 @@ type Label struct {
|
|||||||
Fg Attribute
|
Fg Attribute
|
||||||
Bg Attribute
|
Bg Attribute
|
||||||
|
|
||||||
|
ui *Ui
|
||||||
x0, y0, x1, y1 int
|
x0, y0, x1, y1 int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Label) setActive(ui *Ui, active bool) {
|
func (l *Label) uiInitialize(ui *Ui) {
|
||||||
|
l.ui = ui
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Label) setBounds(ui *Ui, x0, y0, x1, y1 int) {
|
func (l *Label) setActive(active bool) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Label) setBounds(x0, y0, x1, y1 int) {
|
||||||
l.x0 = x0
|
l.x0 = x0
|
||||||
l.y0 = y0
|
l.y0 = y0
|
||||||
l.x1 = x1
|
l.x1 = x1
|
||||||
l.y1 = y1
|
l.y1 = y1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Label) draw(ui *Ui) {
|
func (l *Label) draw() {
|
||||||
reader := strings.NewReader(l.Text)
|
reader := strings.NewReader(l.Text)
|
||||||
for y := l.y0; y < l.y1; y++ {
|
for y := l.y0; y < l.y1; y++ {
|
||||||
for x := l.x0; x < l.x1; x++ {
|
for x := l.x0; x < l.x1; x++ {
|
||||||
@@ -39,8 +44,8 @@ func (l *Label) draw(ui *Ui) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Label) keyEvent(ui *Ui, mod Modifier, key Key) {
|
func (l *Label) keyEvent(mod Modifier, key Key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Label) characterEvent(ui *Ui, chr rune) {
|
func (l *Label) characterEvent(chr rune) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,22 +16,27 @@ type Textbox struct {
|
|||||||
|
|
||||||
Input InputFunc
|
Input InputFunc
|
||||||
|
|
||||||
|
ui *Ui
|
||||||
active bool
|
active bool
|
||||||
x0, y0, x1, y1 int
|
x0, y0, x1, y1 int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textbox) setBounds(ui *Ui, x0, y0, x1, y1 int) {
|
func (t *Textbox) uiInitialize(ui *Ui) {
|
||||||
|
t.ui = ui
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Textbox) setBounds(x0, y0, x1, y1 int) {
|
||||||
t.x0 = x0
|
t.x0 = x0
|
||||||
t.y0 = y0
|
t.y0 = y0
|
||||||
t.x1 = x1
|
t.x1 = x1
|
||||||
t.y1 = y1
|
t.y1 = y1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textbox) setActive(ui *Ui, active bool) {
|
func (t *Textbox) setActive(active bool) {
|
||||||
t.active = active
|
t.active = active
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textbox) draw(ui *Ui) {
|
func (t *Textbox) draw() {
|
||||||
var setCursor = false
|
var setCursor = false
|
||||||
reader := strings.NewReader(t.Text)
|
reader := strings.NewReader(t.Text)
|
||||||
for y := t.y0; y < t.y1; y++ {
|
for y := t.y0; y < t.y1; y++ {
|
||||||
@@ -51,7 +56,7 @@ func (t *Textbox) draw(ui *Ui) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textbox) keyEvent(ui *Ui, mod Modifier, key Key) {
|
func (t *Textbox) keyEvent(mod Modifier, key Key) {
|
||||||
redraw := false
|
redraw := false
|
||||||
switch key {
|
switch key {
|
||||||
case KeyCtrlC:
|
case KeyCtrlC:
|
||||||
@@ -59,7 +64,7 @@ func (t *Textbox) keyEvent(ui *Ui, mod Modifier, key Key) {
|
|||||||
redraw = true
|
redraw = true
|
||||||
case KeyEnter:
|
case KeyEnter:
|
||||||
if t.Input != nil {
|
if t.Input != nil {
|
||||||
t.Input(ui, t, t.Text)
|
t.Input(t.ui, t, t.Text)
|
||||||
}
|
}
|
||||||
t.Text = ""
|
t.Text = ""
|
||||||
redraw = true
|
redraw = true
|
||||||
@@ -76,13 +81,13 @@ func (t *Textbox) keyEvent(ui *Ui, mod Modifier, key Key) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if redraw {
|
if redraw {
|
||||||
t.draw(ui)
|
t.draw()
|
||||||
termbox.Flush()
|
termbox.Flush()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textbox) characterEvent(ui *Ui, chr rune) {
|
func (t *Textbox) characterEvent(chr rune) {
|
||||||
t.Text = t.Text + string(chr)
|
t.Text = t.Text + string(chr)
|
||||||
t.draw(ui)
|
t.draw()
|
||||||
termbox.Flush()
|
termbox.Flush()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,13 +13,19 @@ type Textview struct {
|
|||||||
Bg Attribute
|
Bg Attribute
|
||||||
|
|
||||||
parsedLines []string
|
parsedLines []string
|
||||||
|
|
||||||
|
ui *Ui
|
||||||
x0, y0, x1, y1 int
|
x0, y0, x1, y1 int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textview) setActive(ui *Ui, active bool) {
|
func (t *Textview) uiInitialize(ui *Ui) {
|
||||||
|
t.ui = ui
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textview) setBounds(ui *Ui, x0, y0, x1, y1 int) {
|
func (t *Textview) setActive(active bool) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Textview) setBounds(x0, y0, x1, y1 int) {
|
||||||
t.x0 = x0
|
t.x0 = x0
|
||||||
t.y0 = y0
|
t.y0 = y0
|
||||||
t.x1 = x1
|
t.x1 = x1
|
||||||
@@ -96,7 +102,7 @@ func (t *Textview) Clear() {
|
|||||||
t.parsedLines = nil
|
t.parsedLines = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textview) draw(ui *Ui) {
|
func (t *Textview) draw() {
|
||||||
var reader *strings.Reader
|
var reader *strings.Reader
|
||||||
line := len(t.parsedLines) - 1 - t.CurrentLine
|
line := len(t.parsedLines) - 1 - t.CurrentLine
|
||||||
if line < 0 {
|
if line < 0 {
|
||||||
@@ -134,8 +140,8 @@ func (t *Textview) draw(ui *Ui) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textview) keyEvent(ui *Ui, mod Modifier, key Key) {
|
func (t *Textview) keyEvent(mod Modifier, key Key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Textview) characterEvent(ui *Ui, chr rune) {
|
func (t *Textview) characterEvent(chr rune) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ type Tree struct {
|
|||||||
|
|
||||||
lines []renderedTreeItem
|
lines []renderedTreeItem
|
||||||
activeLine int
|
activeLine int
|
||||||
|
|
||||||
|
ui *Ui
|
||||||
active bool
|
active bool
|
||||||
x0, y0, x1, y1 int
|
x0, y0, x1, y1 int
|
||||||
}
|
}
|
||||||
@@ -42,7 +44,11 @@ func bounded(i, lower, upper int) int {
|
|||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tree) setBounds(ui *Ui, x0, y0, x1, y1 int) {
|
func (t *Tree) uiInitialize(ui *Ui) {
|
||||||
|
t.ui = ui
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tree) setBounds(x0, y0, x1, y1 int) {
|
||||||
t.x0 = x0
|
t.x0 = x0
|
||||||
t.y0 = y0
|
t.y0 = y0
|
||||||
t.x1 = x1
|
t.x1 = x1
|
||||||
@@ -85,7 +91,7 @@ func (t *Tree) rebuild_rec(parent TreeItem, level int) []renderedTreeItem {
|
|||||||
return lines
|
return lines
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tree) draw(ui *Ui) {
|
func (t *Tree) draw() {
|
||||||
if t.lines == nil {
|
if t.lines == nil {
|
||||||
t.Rebuild()
|
t.Rebuild()
|
||||||
}
|
}
|
||||||
@@ -118,11 +124,11 @@ func (t *Tree) draw(ui *Ui) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tree) setActive(ui *Ui, active bool) {
|
func (t *Tree) setActive(active bool) {
|
||||||
t.active = active
|
t.active = active
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tree) keyEvent(ui *Ui, mod Modifier, key Key) {
|
func (t *Tree) keyEvent(mod Modifier, key Key) {
|
||||||
switch key {
|
switch key {
|
||||||
case KeyArrowUp:
|
case KeyArrowUp:
|
||||||
t.activeLine = bounded(t.activeLine-1, 0, len(t.lines)-1)
|
t.activeLine = bounded(t.activeLine-1, 0, len(t.lines)-1)
|
||||||
@@ -130,11 +136,11 @@ func (t *Tree) keyEvent(ui *Ui, mod Modifier, key Key) {
|
|||||||
t.activeLine = bounded(t.activeLine+1, 0, len(t.lines)-1)
|
t.activeLine = bounded(t.activeLine+1, 0, len(t.lines)-1)
|
||||||
case KeyEnter:
|
case KeyEnter:
|
||||||
if t.Listener != nil && t.activeLine >= 0 && t.activeLine < len(t.lines) {
|
if t.Listener != nil && t.activeLine >= 0 && t.activeLine < len(t.lines) {
|
||||||
t.Listener(ui, t, t.lines[t.activeLine].Item)
|
t.Listener(t.ui, t, t.lines[t.activeLine].Item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui.Refresh()
|
t.ui.Refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tree) characterEvent(ui *Ui, ch rune) {
|
func (t *Tree) characterEvent(ch rune) {
|
||||||
}
|
}
|
||||||
|
|||||||
13
uiterm/ui.go
13
uiterm/ui.go
@@ -52,7 +52,7 @@ func (ui *Ui) Refresh() {
|
|||||||
termbox.Clear(termbox.Attribute(ui.fg), termbox.Attribute(ui.bg))
|
termbox.Clear(termbox.Attribute(ui.fg), termbox.Attribute(ui.bg))
|
||||||
termbox.HideCursor()
|
termbox.HideCursor()
|
||||||
for _, element := range ui.elements {
|
for _, element := range ui.elements {
|
||||||
element.View.draw(ui)
|
element.View.draw()
|
||||||
}
|
}
|
||||||
termbox.Flush()
|
termbox.Flush()
|
||||||
}
|
}
|
||||||
@@ -65,11 +65,11 @@ func (ui *Ui) Active() View {
|
|||||||
func (ui *Ui) SetActive(name string) {
|
func (ui *Ui) SetActive(name string) {
|
||||||
element, _ := ui.elements[name]
|
element, _ := ui.elements[name]
|
||||||
if ui.activeElement != nil {
|
if ui.activeElement != nil {
|
||||||
ui.activeElement.View.setActive(ui, false)
|
ui.activeElement.View.setActive(false)
|
||||||
}
|
}
|
||||||
ui.activeElement = element
|
ui.activeElement = element
|
||||||
if element != nil {
|
if element != nil {
|
||||||
element.View.setActive(ui, true)
|
element.View.setActive(true)
|
||||||
}
|
}
|
||||||
ui.Refresh()
|
ui.Refresh()
|
||||||
}
|
}
|
||||||
@@ -123,7 +123,7 @@ func (ui *Ui) Run() error {
|
|||||||
|
|
||||||
func (ui *Ui) onCharacterEvent(ch rune) {
|
func (ui *Ui) onCharacterEvent(ch rune) {
|
||||||
if ui.activeElement != nil {
|
if ui.activeElement != nil {
|
||||||
ui.activeElement.View.characterEvent(ui, ch)
|
ui.activeElement.View.characterEvent(ch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ func (ui *Ui) onKeyEvent(mod Modifier, key Key) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ui.activeElement != nil {
|
if ui.activeElement != nil {
|
||||||
ui.activeElement.View.keyEvent(ui, mod, key)
|
ui.activeElement.View.keyEvent(mod, key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,8 +153,9 @@ func (ui *Ui) SetView(name string, x0, y0, x1, y1 int, view View) {
|
|||||||
Y1: y1,
|
Y1: y1,
|
||||||
View: view,
|
View: view,
|
||||||
}
|
}
|
||||||
|
view.uiInitialize(ui)
|
||||||
}
|
}
|
||||||
view.setBounds(ui, x0, y0, x1, y1)
|
view.setBounds(x0, y0, x1, y1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ui *Ui) View(name string) View {
|
func (ui *Ui) View(name string) View {
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
package uiterm
|
package uiterm
|
||||||
|
|
||||||
type View interface {
|
type View interface {
|
||||||
setActive(ui *Ui, active bool)
|
uiInitialize(ui *Ui)
|
||||||
setBounds(ui *Ui, x0, y0, x1, y1 int)
|
setActive(active bool)
|
||||||
draw(ui *Ui)
|
setBounds(x0, y0, x1, y1 int)
|
||||||
keyEvent(ui *Ui, mod Modifier, key Key)
|
draw()
|
||||||
characterEvent(ui *Ui, ch rune)
|
keyEvent(mod Modifier, key Key)
|
||||||
|
characterEvent(ch rune)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user