private void OnAddCustomFunctionRequested(object parameter)
        {
            if (this.Preset == null)
            {
                return;
            }

            var newPreset = new PresetCustom((uint)XboxCustomFunction.Button_A, InputKey.None);

            this.Preset.CustomFunctions.Add(newPreset);

            // Auto scrolling to end
            var scrollViewer = Helpers.ParentFinder.FindParent <ScrollViewer>(this);

            if (scrollViewer != null)
            {
                scrollViewer.ScrollToEnd();
            }
        }
        public List <InputKey> GetKeys(PresetCustom presetCustom)
        {
            var keys = new List <InputKey>();

            keys.AddRange(this.CustomFunctions.Where(x => x.Function == presetCustom.Function).Select(x => x.Key));

            foreach (var customFunction in this.CustomFunctions)
            {
                if (customFunction.Function != presetCustom.Function)
                {
                    continue;
                }

                var xboxCustomFunction = (XboxCustomFunction)presetCustom.Function;
                var functionType       = Helpers.CustomFunctionHelper.GetFunctionType(xboxCustomFunction);
                switch (functionType)
                {
                case FunctionType.Button:
                    foreach (var presetButton in this.Buttons)
                    {
                        var xboxButton = Helpers.CustomFunctionHelper.GetXboxButton(xboxCustomFunction);
                        if (xboxButton == (XboxButton)presetButton.Button)
                        {
                            keys.Add(presetButton.Key);
                        }
                    }

                    break;

                case FunctionType.Axis:
                    foreach (var presetAxis in this.Axes)
                    {
                        XboxAxisPosition pos;
                        var xboxAxis = Helpers.CustomFunctionHelper.GetXboxAxis(xboxCustomFunction, out pos);
                        if (xboxAxis == (XboxAxis)presetAxis.Axis && pos == (XboxAxisPosition)presetAxis.Value)
                        {
                            keys.Add(presetAxis.Key);
                        }
                    }

                    break;

                case FunctionType.Dpad:
                    foreach (var presetDpad in this.Dpads)
                    {
                        var direction = Helpers.CustomFunctionHelper.GetDpadDirection(xboxCustomFunction);
                        if (direction == (XboxDpadDirection)presetDpad.Direction)
                        {
                            keys.Add(presetDpad.Key);
                        }
                    }

                    break;

                case FunctionType.Trigger:
                    foreach (var presetTrigger in this.Triggers)
                    {
                        var xboxTrigger = Helpers.CustomFunctionHelper.GetXboxTrigger(xboxCustomFunction);
                        if (xboxTrigger == (XboxTrigger)presetTrigger.Trigger)
                        {
                            keys.Add(presetTrigger.Key);
                        }
                    }

                    break;

                default:
                    throw new NotImplementedException(
                              "Not implemented Function Type: " + functionType);
                }
            }

            return(keys);
        }