mirror of
https://github.com/miguelmota/cointop
synced 2024-11-14 18:12:57 +00:00
9a906c3a68
Lots of new functionality including: - mouse support: click select, scroll, menus, table-sorting, etc - 24-bit color support in themes Co-authored-by: Simon Roberts <simon.roberts@anz.com> Co-authored-by: ѵµσɳɠ <3168632+vuon9@users.noreply.github.com>
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
// Copyright 2014 The gocui Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gocui
|
|
|
|
import (
|
|
"github.com/gdamore/tcell/v2"
|
|
)
|
|
|
|
// eventBinding are used to link a given key-press event with a handler.
|
|
type eventBinding struct {
|
|
viewName string
|
|
ev tcell.Event // ignore the Time
|
|
handler func(*Gui, *View) error
|
|
}
|
|
|
|
// newKeybinding returns a new eventBinding object for a key event.
|
|
func newKeybinding(viewname string, key tcell.Key, ch rune, mod tcell.ModMask, handler func(*Gui, *View) error) (kb *eventBinding) {
|
|
kb = &eventBinding{
|
|
viewName: viewname,
|
|
ev: tcell.NewEventKey(key, ch, mod),
|
|
handler: handler,
|
|
}
|
|
return kb
|
|
}
|
|
|
|
// newKeybinding returns a new eventBinding object for a mouse event.
|
|
func newMouseBinding(viewname string, btn tcell.ButtonMask, mod tcell.ModMask, handler func(*Gui, *View) error) (kb *eventBinding) {
|
|
kb = &eventBinding{
|
|
viewName: viewname,
|
|
ev: tcell.NewEventMouse(0, 0, btn, mod),
|
|
handler: handler,
|
|
}
|
|
return kb
|
|
}
|
|
|
|
func (kb *eventBinding) matchEvent(e tcell.Event) bool {
|
|
// TODO: check mask not ==mod?
|
|
switch tev := e.(type) {
|
|
case *tcell.EventKey:
|
|
if kbe, ok := kb.ev.(*tcell.EventKey); ok {
|
|
if tev.Key() == tcell.KeyRune {
|
|
return tev.Key() == kbe.Key() && tev.Rune() == kbe.Rune() && tev.Modifiers() == kbe.Modifiers()
|
|
}
|
|
return tev.Key() == kbe.Key() && tev.Modifiers() == kbe.Modifiers()
|
|
}
|
|
|
|
case *tcell.EventMouse:
|
|
if kbe, ok := kb.ev.(*tcell.EventMouse); ok {
|
|
return kbe.Buttons() == tev.Buttons() && kbe.Modifiers() == tev.Modifiers()
|
|
}
|
|
|
|
}
|
|
return false
|
|
}
|
|
|
|
// matchView returns if the eventBinding matches the current view.
|
|
func (kb *eventBinding) matchView(v *View) bool {
|
|
if kb.viewName == "" {
|
|
return true
|
|
}
|
|
return v != nil && kb.viewName == v.name
|
|
}
|