diff --git a/uiterm/label.go b/uiterm/label.go index cde1de1..4cda72c 100644 --- a/uiterm/label.go +++ b/uiterm/label.go @@ -11,20 +11,25 @@ type Label struct { Fg Attribute Bg Attribute + ui *Ui 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.y0 = y0 l.x1 = x1 l.y1 = y1 } -func (l *Label) draw(ui *Ui) { +func (l *Label) draw() { reader := strings.NewReader(l.Text) for y := l.y0; y < l.y1; y++ { 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) { } diff --git a/uiterm/textbox.go b/uiterm/textbox.go index a1b38b4..c40ffe7 100644 --- a/uiterm/textbox.go +++ b/uiterm/textbox.go @@ -16,22 +16,27 @@ type Textbox struct { Input InputFunc + ui *Ui active bool 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.y0 = y0 t.x1 = x1 t.y1 = y1 } -func (t *Textbox) setActive(ui *Ui, active bool) { +func (t *Textbox) setActive(active bool) { t.active = active } -func (t *Textbox) draw(ui *Ui) { +func (t *Textbox) draw() { var setCursor = false reader := strings.NewReader(t.Text) 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 switch key { case KeyCtrlC: @@ -59,7 +64,7 @@ func (t *Textbox) keyEvent(ui *Ui, mod Modifier, key Key) { redraw = true case KeyEnter: if t.Input != nil { - t.Input(ui, t, t.Text) + t.Input(t.ui, t, t.Text) } t.Text = "" redraw = true @@ -76,13 +81,13 @@ func (t *Textbox) keyEvent(ui *Ui, mod Modifier, key Key) { } } if redraw { - t.draw(ui) + t.draw() termbox.Flush() } } -func (t *Textbox) characterEvent(ui *Ui, chr rune) { +func (t *Textbox) characterEvent(chr rune) { t.Text = t.Text + string(chr) - t.draw(ui) + t.draw() termbox.Flush() } diff --git a/uiterm/textview.go b/uiterm/textview.go index 1d0666b..dc23c5d 100644 --- a/uiterm/textview.go +++ b/uiterm/textview.go @@ -13,13 +13,19 @@ type Textview struct { Bg Attribute parsedLines []string + + ui *Ui 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) setActive(active bool) { } -func (t *Textview) setBounds(ui *Ui, x0, y0, x1, y1 int) { +func (t *Textview) setBounds(x0, y0, x1, y1 int) { t.x0 = x0 t.y0 = y0 t.x1 = x1 @@ -96,7 +102,7 @@ func (t *Textview) Clear() { t.parsedLines = nil } -func (t *Textview) draw(ui *Ui) { +func (t *Textview) draw() { var reader *strings.Reader line := len(t.parsedLines) - 1 - t.CurrentLine 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) { } diff --git a/uiterm/tree.go b/uiterm/tree.go index 1516bc9..dd5d3db 100644 --- a/uiterm/tree.go +++ b/uiterm/tree.go @@ -28,6 +28,8 @@ type Tree struct { lines []renderedTreeItem activeLine int + + ui *Ui active bool x0, y0, x1, y1 int } @@ -42,7 +44,11 @@ func bounded(i, lower, upper int) int { 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.y0 = y0 t.x1 = x1 @@ -85,7 +91,7 @@ func (t *Tree) rebuild_rec(parent TreeItem, level int) []renderedTreeItem { return lines } -func (t *Tree) draw(ui *Ui) { +func (t *Tree) draw() { if t.lines == nil { 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 } -func (t *Tree) keyEvent(ui *Ui, mod Modifier, key Key) { +func (t *Tree) keyEvent(mod Modifier, key Key) { switch key { case KeyArrowUp: 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) case KeyEnter: 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) { } diff --git a/uiterm/ui.go b/uiterm/ui.go index bb4d10b..63a0051 100644 --- a/uiterm/ui.go +++ b/uiterm/ui.go @@ -52,7 +52,7 @@ func (ui *Ui) Refresh() { termbox.Clear(termbox.Attribute(ui.fg), termbox.Attribute(ui.bg)) termbox.HideCursor() for _, element := range ui.elements { - element.View.draw(ui) + element.View.draw() } termbox.Flush() } @@ -65,11 +65,11 @@ func (ui *Ui) Active() View { func (ui *Ui) SetActive(name string) { element, _ := ui.elements[name] if ui.activeElement != nil { - ui.activeElement.View.setActive(ui, false) + ui.activeElement.View.setActive(false) } ui.activeElement = element if element != nil { - element.View.setActive(ui, true) + element.View.setActive(true) } ui.Refresh() } @@ -123,7 +123,7 @@ func (ui *Ui) Run() error { func (ui *Ui) onCharacterEvent(ch rune) { 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 { - 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, 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 { diff --git a/uiterm/view.go b/uiterm/view.go index c33d1a6..c9b6a65 100644 --- a/uiterm/view.go +++ b/uiterm/view.go @@ -1,9 +1,10 @@ package uiterm type View interface { - setActive(ui *Ui, active bool) - setBounds(ui *Ui, x0, y0, x1, y1 int) - draw(ui *Ui) - keyEvent(ui *Ui, mod Modifier, key Key) - characterEvent(ui *Ui, ch rune) + uiInitialize(ui *Ui) + setActive(active bool) + setBounds(x0, y0, x1, y1 int) + draw() + keyEvent(mod Modifier, key Key) + characterEvent(ch rune) }