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++ {
}
}
-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) {
}
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++ {
}
}
-func (t *Textbox) keyEvent(ui *Ui, mod Modifier, key Key) {
+func (t *Textbox) keyEvent(mod Modifier, key Key) {
redraw := false
switch key {
case KeyCtrlC:
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
}
}
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()
}
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
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 {
}
}
-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) {
}
lines []renderedTreeItem
activeLine int
+
+ ui *Ui
active bool
x0, y0, x1, y1 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
return lines
}
-func (t *Tree) draw(ui *Ui) {
+func (t *Tree) draw() {
if t.lines == nil {
t.Rebuild()
}
}
}
-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)
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) {
}
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()
}
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()
}
func (ui *Ui) onCharacterEvent(ch rune) {
if ui.activeElement != nil {
- ui.activeElement.View.characterEvent(ui, ch)
+ ui.activeElement.View.characterEvent(ch)
}
}
}
}
if ui.activeElement != nil {
- ui.activeElement.View.keyEvent(ui, mod, key)
+ ui.activeElement.View.keyEvent(mod, key)
}
}
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 {
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)
}