diff --git a/_example/dashboard.go b/_example/dashboard.go index 1cdd68a..ecf8921 100644 --- a/_example/dashboard.go +++ b/_example/dashboard.go @@ -21,6 +21,14 @@ func main() { p.TextFgColor = ui.ColorWhite p.BorderLabel = "Text Box" p.BorderFg = ui.ColorCyan + p.Handle("/timer/1s", func(e ui.Event) { + cnt := e.Data.(ui.EvtTimer) + if cnt.Count%2 == 0 { + p.TextFgColor = ui.ColorRed + } else { + p.TextFgColor = ui.ColorWhite + } + }) strs := []string{"[0] gizak/termui", "[1] editbox.go", "[2] iterrupt.go", "[3] keyboard.go", "[4] output.go", "[5] random_out.go", "[6] dashboard.go", "[7] nsf/termbox-go"} list := ui.NewList() diff --git a/events.go b/events.go index 38694f5..3c397d7 100644 --- a/events.go +++ b/events.go @@ -315,3 +315,13 @@ func NewTimerCh(du time.Duration) chan Event { var DefualtHandler = func(e Event) { } + +var usrEvtCh = make(chan Event) + +func SendCustomEvt(path string, data interface{}) { + e := Event{} + e.Path = path + e.Data = data + e.Time = time.Now().Unix() + usrEvtCh <- e +} diff --git a/render.go b/render.go index 57415ad..0cf9b88 100644 --- a/render.go +++ b/render.go @@ -41,6 +41,8 @@ func Init() error { DefaultEvtStream.Init() DefaultEvtStream.Merge("termbox", NewSysEvtCh()) DefaultEvtStream.Merge("timer", NewTimerCh(time.Second)) + DefaultEvtStream.Merge("custom", usrEvtCh) + DefaultEvtStream.Handle("/", DefualtHandler) DefaultEvtStream.Handle("/sys/wnd/resize", func(e Event) { w := e.Data.(EvtWnd) diff --git a/test/runtest.go b/test/runtest.go index 422a1ad..97caf83 100644 --- a/test/runtest.go +++ b/test/runtest.go @@ -40,8 +40,13 @@ func main() { } }) + termui.Handle(("/usr"), func(e termui.Event) { + debug.Logf("->%v\n", e) + }) + termui.Handle("/timer/1s", func(e termui.Event) { t := e.Data.(termui.EvtTimer) + termui.SendCustomEvt("/usr/t", t.Count) if t.Count%2 == 0 { b.BorderLabel = "[HELLO](fg-red,bg-green) [WORLD](fg-blue,bg-white)" @@ -52,5 +57,6 @@ func main() { termui.Render(b) }) + termui.Loop() } diff --git a/widget.go b/widget.go index 71ae8bf..df15b5d 100644 --- a/widget.go +++ b/widget.go @@ -80,3 +80,11 @@ func (wm WgtMgr) WgtHandlersHook() func(Event) { } var DefaultWgtMgr WgtMgr + +func (b *Block) Handle(path string, handler func(Event)) { + if _, ok := DefaultWgtMgr[b.Id()]; !ok { + DefaultWgtMgr.AddWgt(b) + } + + DefaultWgtMgr.AddWgtHandler(b.Id(), path, handler) +}