| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // Copyright 2018 visualfc. All rights reserved.
- package tk
- import (
- "fmt"
- "sync"
- )
- type Command struct {
- sync.RWMutex
- cmds []func()
- }
- func (c *Command) Bind(fn func()) {
- if fn == nil {
- return
- }
- c.Lock()
- c.cmds = append(c.cmds, fn)
- c.Unlock()
- }
- func (c *Command) Clear() {
- c.Lock()
- c.cmds = nil
- c.Unlock()
- }
- func (c *Command) Invoke() {
- c.RLock()
- for _, cmd := range c.cmds {
- if cmd != nil {
- cmd()
- }
- }
- c.RUnlock()
- }
- type CommandEx struct {
- sync.RWMutex
- cmds []func([]string) error
- }
- func (c *CommandEx) Bind(fn func([]string) error) {
- if fn == nil {
- return
- }
- c.Lock()
- c.cmds = append(c.cmds, fn)
- c.Unlock()
- }
- func (c *CommandEx) Clear() {
- c.Lock()
- c.cmds = nil
- c.Unlock()
- }
- func (c *CommandEx) Invoke(args []string) {
- c.RLock()
- for _, cmd := range c.cmds {
- if cmd != nil {
- cmd(args)
- }
- }
- c.RUnlock()
- }
- func bindCommand(id string, command string, fn func()) error {
- actName := makeActionId()
- err := eval(fmt.Sprintf("%v configure -%v {%v}", id, command, actName))
- if err != nil {
- return err
- }
- mainInterp.CreateAction(actName, func(args []string) {
- fn()
- })
- return nil
- }
- func bindCommandEx(id string, command string, fn func([]string)) error {
- actName := makeActionId()
- err := eval(fmt.Sprintf("%v configure -%v {%v}", id, command, actName))
- if err != nil {
- return err
- }
- mainInterp.CreateAction(actName, func(args []string) {
- fn(args)
- })
- return nil
- }
|