• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

luttje / Key2Joy / 6602669847

22 Oct 2023 08:23AM UTC coverage: 44.094% (-8.4%) from 52.519%
6602669847

push

github

web-flow
Add XInput in preparation for gamepad triggers + add xmldoc (#50)

* Add XInput in preparation for gamepad triggers + add xmldoc

* add parent-child relation between mapped options

* add remove child mappings option + remove debug context menu

* x86 > AnyCPU (gives more sensible errors in WinForms Designer) - Fixed Designer failing on MappingForm

* Fix polling gamepad

* Add gamepad input trigger and config control + Fix mapping list not updating correctly

* remove broken and quite useless test

* update readme with warning regarding #46 + update readme special thanks

* add warning on same gamepad id trigger and action

* attempt to give github actions more time before timeout (tests sometimes fail)

* use current default mapping profile from app (so we dont have to copy it to tests everytime manually)

* Add gamepad button trigger

* Add multi-property edit mode

* Show physical gamepad connection warning

* give even more time for tests so they dont fail

* Block arming mappings if simulated gamepad index collides with physical gamepad

* Cleanup + add GamePad Trigger Trigger

* Fix combined trigger remove not working

* Separate stick action and allow custom scaling

* improve stick feeling

* fix parent picker

* update default mappings

* add trigger and try work out conflicts between physical and simulated devices (no luck yet)

* Fix simulated gamepad recognized as physical

* Show gamepad devices in UI

* fix mapping form + add more multi-edit type support

* make reverse mapping tool more useful

* easily setup/update reverse mappings while creating/updating a mapping

* update readme screenshots + prefer 'Arm' terminology for enabling profile

* support more nullable types in mapping profile

* simplify groups

* add configurable grouping

* prevent wonky sorting across groups

* Add easy switch group option

* Fix being able to create corrupt profile

* fail loading ... (continued)

762 of 2383 branches covered (0.0%)

Branch coverage included in aggregate %.

3060 of 3060 new or added lines in 106 files covered. (100.0%)

3897 of 8183 relevant lines covered (47.62%)

12635.93 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

12.12
/Core/Key2Joy.Core/Mapping/Triggers/Keyboard/KeyboardTrigger.cs
1
using System;
2
using System.Text.Json.Serialization;
3
using System.Windows.Forms;
4
using Key2Joy.Contracts.Mapping;
5
using Key2Joy.Contracts.Mapping.Triggers;
6
using Key2Joy.LowLevelInput;
7

8
namespace Key2Joy.Mapping.Triggers.Keyboard;
9

10
[Trigger(
11
    Description = "Keyboard Event",
12
    GroupName = "Keyboard Triggers",
13
    GroupImage = "keyboard"
14
)]
15
public class KeyboardTrigger : CoreTrigger, IPressState, IProvideReverseAspect, IReturnInputHash, IEquatable<KeyboardTrigger>
16
{
17
    public const string PREFIX_UNIQUE = nameof(KeyboardTrigger);
18

19
    public Keys Keys { get; set; }
82✔
20

21
    public PressState PressState { get; set; }
82✔
22

23
    [JsonConstructor]
24
    public KeyboardTrigger(string name)
25
        : base(name)
82✔
26
    { }
82✔
27

28
    public override AbstractTriggerListener GetTriggerListener() => KeyboardTriggerListener.Instance;
×
29

30
    /// <inheritdoc/>
31
    public void MakeReverse(AbstractMappingAspect aspect)
32
        => CommonReverseAspect.MakeReversePressState(this, aspect);
×
33

34
    public static int GetInputHashFor(Keys keys) => (int)keys;
×
35

36
    public int GetInputHash() => GetInputHashFor(this.Keys);
×
37

38
    // Keep Press and Release together while sorting
39
    public override int CompareTo(AbstractMappingAspect other)
40
    {
41
        if (other == null || other is not KeyboardTrigger otherKeyboardTrigger)
×
42
        {
43
            return base.CompareTo(other);
×
44
        }
45

46
        return $"{this.Keys}#{(int)this.PressState}"
×
47
            .CompareTo($"{otherKeyboardTrigger.Keys}#{(int)otherKeyboardTrigger.PressState}");
×
48
    }
49

50
    public override bool Equals(object obj)
51
    {
52
        if (obj is not KeyboardTrigger other)
×
53
        {
54
            return false;
×
55
        }
56

57
        return this.Equals(other);
×
58
    }
59

60
    public bool Equals(KeyboardTrigger other) => this.Keys == other.Keys
×
61
            && this.PressState == other.PressState;
×
62

63
    public override string GetNameDisplay()
64
    {
65
        var format = "(keyboard) {1} {0}";
×
66
        return format.Replace("{0}", this.Keys.ToString())
×
67
            .Replace("{1}", Enum.GetName(typeof(PressState), this.PressState));
×
68
    }
69

70
    public KeyboardState GetKeyboardState()
71
    {
72
        if (this.PressState == PressState.Press)
×
73
        {
74
            return KeyboardState.KeyDown;
×
75
        }
76

77
        return KeyboardState.KeyUp;
×
78
    }
79
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc