41 lines
936 B
Go
41 lines
936 B
Go
package mappingrules
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"git.annabunches.net/annabunches/joyful/internal/logger"
|
|
"github.com/holoplot/go-evdev"
|
|
)
|
|
|
|
type RuleTargetModeSelect struct {
|
|
RuleTargetBase
|
|
ModeSelect []string
|
|
}
|
|
|
|
func NewRuleTargetModeSelect(modes []string) *RuleTargetModeSelect {
|
|
return &RuleTargetModeSelect{
|
|
RuleTargetBase: NewRuleTargetBase("", nil, 0, false),
|
|
ModeSelect: modes,
|
|
}
|
|
}
|
|
|
|
// RuleTargetModeSelect doesn't make sense as an input type
|
|
func (target *RuleTargetModeSelect) NormalizeValue(value int32) int32 {
|
|
return -1
|
|
}
|
|
|
|
func (target *RuleTargetModeSelect) CreateEvent(value int32, mode *string) *evdev.InputEvent {
|
|
if value == 0 {
|
|
return nil
|
|
}
|
|
|
|
index := 0
|
|
if currentMode := slices.Index(target.ModeSelect, *mode); currentMode != -1 {
|
|
// find the next mode
|
|
index = (currentMode + 1) % len(target.ModeSelect)
|
|
}
|
|
|
|
*mode = target.ModeSelect[index]
|
|
logger.Logf("Mode changed to '%s'", *mode)
|
|
return nil
|
|
}
|