Refactor Everything. Co-authored-by: Anna Rose Wiggins <annabunches@gmail.com> Co-committed-by: Anna Rose Wiggins <annabunches@gmail.com>
43 lines
1 KiB
Go
43 lines
1 KiB
Go
package mappingrules
|
|
|
|
import (
|
|
"errors"
|
|
"slices"
|
|
|
|
"git.annabunches.net/annabunches/joyful/internal/logger"
|
|
"github.com/holoplot/go-evdev"
|
|
)
|
|
|
|
type RuleTargetModeSelect struct {
|
|
Modes []string
|
|
}
|
|
|
|
func NewRuleTargetModeSelect(modes []string) (*RuleTargetModeSelect, error) {
|
|
if len(modes) == 0 {
|
|
return nil, errors.New("cannot create RuleTargetModeSelect: mode list is empty")
|
|
}
|
|
return &RuleTargetModeSelect{
|
|
Modes: modes,
|
|
}, nil
|
|
}
|
|
|
|
// RuleTargetModeSelect doesn't make sense as an input type
|
|
func (target *RuleTargetModeSelect) NormalizeValue(_ int32) int32 {
|
|
return -1
|
|
}
|
|
|
|
func (target *RuleTargetModeSelect) CreateEvent(_ int32, mode *string) *evdev.InputEvent {
|
|
index := 0
|
|
if currentMode := slices.Index(target.Modes, *mode); currentMode != -1 {
|
|
// find the next mode
|
|
index = (currentMode + 1) % len(target.Modes)
|
|
}
|
|
|
|
*mode = target.Modes[index]
|
|
logger.Logf("Mode changed to '%s'", *mode)
|
|
return nil
|
|
}
|
|
|
|
func (target *RuleTargetModeSelect) MatchEvent(_ *evdev.InputDevice, _ *evdev.InputEvent) bool {
|
|
return false
|
|
}
|