WIP Wrap up Event

This commit is contained in:
Zack Guo 2015-08-08 19:07:32 -04:00
parent 5816873b74
commit 283c3a36f2
1 changed files with 43 additions and 40 deletions

View File

@ -8,10 +8,10 @@
package termui
import "github.com/nsf/termbox-go"
//import "github.com/nsf/termbox-go"
/***********************************termbox-go**************************************/
/*
type (
EventType uint8
Modifier uint8
@ -127,9 +127,9 @@ const (
EventRaw
EventNone
)
*/
/**************************************end**************************************/
/*
// convert termbox.Event to termui.Event
func uiEvt(e termbox.Event) Event {
event := Event{}
@ -171,49 +171,52 @@ func evtListen() {
}
}()
}
/*
// EventHandlers is a handler sequence
var EventHandlers []func(Event)
var signalQuit = make(chan bool)
// Quit sends quit signal to terminate termui
func Quit() {
signalQuit <- true
*/
type Event struct {
Type string
Uri string
Data interface{}
Time int
Refer string
}
// Wait listening to signalQuit, block operation.
func Wait() {
<-signalQuit
type evtCtl struct {
in chan Event
out chan Event
suspend chan int
recover chan int
close chan int
}
// RegEvtHandler register function into TSEventHandler sequence.
func RegEvtHandler(fn func(Event)) {
EventHandlers = append(EventHandlers, fn)
//
type EvtStream struct {
srcMap map[string]evtCtl
stream chan Event
}
// EventLoop handles all events and
// redirects every event to callbacks in EventHandlers
func EventLoop() {
evt := make(chan termbox.Event)
func newEvtCtl() evtCtl {
ec := evtCtl{}
ec.in = make(chan Event)
ec.suspend = make(chan int)
ec.recover = make(chan int)
ec.close = make(chan int)
ec.out = make(chan Event)
return ec
}
go func() {
for {
evt <- termbox.PollEvent()
}
}()
for {
select {
case c := <-signalQuit:
defer func() { signalQuit <- c }()
return
case e := <-evt:
for _, fn := range EventHandlers {
fn(uiEvt(e))
}
}
func NewEvtStream() EvtStream {
return EvtStream{
srcMap: make(map[string]evtCtl),
stream: make(chan Event),
}
}
/*
func (es *EvtStream) hookup() {
}
func (es EvtStream) Subscribe(uri string) chan Event {
}
*/