Beispiel #1
0
        private void BuildBindingReports()
        {
            _bindingReports = new ConcurrentDictionary <BindingDescriptor, BindingReport>();
            for (var i = 0; i < 269; i++)
            {
                if (!Enum.IsDefined(typeof(JoystickOffset), i))
                {
                    continue;
                }
                var bindingType       = Utilities.OffsetToType((JoystickOffset)i);
                var bindingDescriptor = new BindingDescriptor
                {
                    Index    = i,
                    SubIndex = 0,
                    Type     = bindingType
                };
                var    category = bindingType == BindingType.Axis ? BindingCategory.Signed : BindingCategory.Momentary;
                string name;
                switch (bindingType)
                {
                case BindingType.Axis:
                    name = ((JoystickOffset)i).ToString();
                    break;

                case BindingType.Button:
                    name = (i - (int)JoystickOffset.Buttons0 + 1).ToString();
                    break;

                case BindingType.POV:
                    for (var j = 0; j < 4; j++)
                    {
                        // POV reports are added here
                        var povNum = (i - (int)JoystickOffset.PointOfViewControllers0) / 4;
                        bindingDescriptor.Index    = povNum;
                        bindingDescriptor.SubIndex = j;
                        _bindingReports.TryAdd(bindingDescriptor, PovBindingInfos[povNum][j]);
                    }
                    continue;

                default:
                    continue;
                }
                var prefix = bindingType.ToString();
                var br     = new BindingReport
                {
                    Title             = name,
                    Path              = $"{prefix}: {name}",
                    Category          = category,
                    BindingDescriptor = bindingDescriptor
                };
                // Button and Axis reports are added here
                _bindingReports.TryAdd(bindingDescriptor, br);
            }
        }
Beispiel #2
0
        static void ShowMissingParameters(BindingReport report)
        {
            Write("One or more required arguments are missing!");
            Write();

            var context = new BindingContext();

            foreach (var parameter in report.PropertiesNotBound.Select(p => new Parameter(p, context)).Where(p => p.Position > 0))
            {
                WritePositionalParameter(parameter, ExampleOutputSettings.DontShowExamples);
            }

            WriteHelpInstructions();
        }
Beispiel #3
0
        private void InitKeyReports()
        {
            _keyboardReports = new ConcurrentDictionary <BindingDescriptor, BindingReport>();
            _keyboardList    = new DeviceReportNode
            {
                Title = "Keys"
            };

            for (var i = 0; i < 256; i++)
            {
                BindingReport report = null;
                var           bd     = new BindingDescriptor
                {
                    Type     = BindingType.Button,
                    Index    = i,
                    SubIndex = 0
                };
                report = BuildKeyboardBindingReport(bd);
                if (report != null)
                {
                    _keyboardList.Bindings.Add(report);
                    _keyboardReports.TryAdd(bd, report);
                }
                // Check if this button has an extended (Right) variant
                var altBd = new BindingDescriptor
                {
                    Type     = BindingType.Button,
                    Index    = i + 256,
                    SubIndex = 0
                };
                var altReport = BuildKeyboardBindingReport(altBd);
                if (altReport != null && (report == null || report.Title != altReport.Title)) // If the alReport is not null, and is not the same as the report (if it exists)
                {
                    _keyboardList.Bindings.Add(altReport);
                    _keyboardReports.TryAdd(altBd, altReport);
                }
            }
            _keyboardList.Bindings.Sort((x, y) => string.Compare(x.Title, y.Title, StringComparison.Ordinal));
        }
        public BindingReportTextWriter(BindingReport binding, bool showValues)
        {
            _showValues = showValues;

            addDivider();
            _report.AddText("Binding report for " + binding.ModelType.FullName);
            addDivider();

            if (showValues)
            {
                _report.StartColumns(3);
                _report.AddColumnData("Property", "Handler", "Values ('[RawValue]' from '[Source]'/[RawKey])");
            }
            else
            {
                _report.StartColumns(2);
                _report.AddColumnData("Property", "Handler");
            }

            addDivider();

            binding.AcceptVisitor(this);
            addDivider();
        }
 void IBindingReportVisitor.Report(BindingReport report)
 {
     _bindingStack.Push(report);
 }
Beispiel #6
0
 public void Store(BindingReport report)
 {
     _reports.Add(report);
 }
Beispiel #7
0
 public void Store(BindingReport report)
 {
     _logger.DebugMessage(() => new ModelBindingLog{Report = report});
 }
Beispiel #8
0
        private void InputChanged(ProviderDescriptor providerDescriptor, DeviceDescriptor deviceDescriptor, BindingReport bindingReport, int value)
        {
            if (!DeviceBinding.MapCategory(bindingReport.Category).Equals(_deviceBinding.DeviceBindingCategory))
            {
                return;
            }
            if (!IsInputValid(bindingReport.Category, value))
            {
                return;
            }

            var device = FindDevice(providerDescriptor, deviceDescriptor);

            _deviceBinding.SetDeviceGuid(device.Guid);
            _deviceBinding.SetKeyTypeValue((int)bindingReport.BindingDescriptor.Type, bindingReport.BindingDescriptor.Index, bindingReport.BindingDescriptor.SubIndex);
            EndBindMode();
        }
Beispiel #9
0
        private void BuildInputDeviceReportTemplate()
        {
            _bindingReports = new ConcurrentDictionary <BindingDescriptor, BindingReport>();
            var node = new DeviceReportNode();

            for (var channel = 0; channel < 16; channel++)
            {
                var channelInfo = new DeviceReportNode
                {
                    Title = $"CH {channel + 1}"
                };

                // Notes - Keys, Pads

                var notesInfo = new DeviceReportNode
                {
                    Title = "Notes"
                };
                for (var octave = -2; octave < 9; octave++)
                {
                    var octaveInfo = new DeviceReportNode
                    {
                        Title = $"Octave {octave}"
                    };
                    for (var noteIndex = 0; noteIndex < NoteNames.Length; noteIndex++)
                    {
                        if (octave == 8 && noteIndex > 7)
                        {
                            continue;                               // MIDI ends at G8, Skip G# to B
                        }
                        var noteName = NoteNames[noteIndex];
                        var bd       = BuildNoteDescriptor(channel, octave, noteIndex);
                        var br       = new BindingReport
                        {
                            Title             = $"{noteName}",
                            Path              = $"CH{channel + 1} {noteName}{octave}",
                            Category          = BindingCategory.Signed,
                            BindingDescriptor = bd
                        };
                        _bindingReports.TryAdd(bd, br);
                        octaveInfo.Bindings.Add(br);
                    }
                    notesInfo.Nodes.Add(octaveInfo);
                }
                channelInfo.Nodes.Add(notesInfo);

                // ControlChange (CC) - Dials, Sliders etc

                var controlChangeInfo = new DeviceReportNode
                {
                    Title = "CtrlChange"
                };
                for (var controllerId = 0; controllerId < 128; controllerId++)
                {
                    var bd = BuildControlChangeDescriptor(channel, controllerId);
                    var br = new BindingReport
                    {
                        Title             = $"ID {controllerId}",
                        Path              = $"CH{channel} CC{controllerId}",
                        Category          = BindingCategory.Signed,
                        BindingDescriptor = bd
                    };
                    _bindingReports.TryAdd(bd, br);
                    controlChangeInfo.Bindings.Add(br);
                }
                channelInfo.Nodes.Add(controlChangeInfo);

                // Pitch Wheel
                var pwbd = new BindingDescriptor
                {
                    Index    = (int)MidiCommandCode.PitchWheelChange,
                    SubIndex = 0
                };
                var pwbr = new BindingReport
                {
                    Title             = "Pitch Wheel",
                    Path              = $"CH{channel + 1} PW",
                    Category          = BindingCategory.Signed,
                    BindingDescriptor = pwbd
                };
                _bindingReports.TryAdd(pwbd, pwbr);
                channelInfo.Bindings.Add(pwbr);

                // Add the channel
                node.Nodes.Add(channelInfo);
            }

            _inputDeviceReportTemplate = node;
        }
Beispiel #10
0
 void IBindingReportVisitor.Report(BindingReport report)
 {
     _bindingStack.Push(report);
 }
 public void Store(BindingReport report)
 {
     _logger.DebugMessage(() => new ModelBindingLog {
         Report = report
     });
 }
 public void Store(BindingReport report)
 {
     _reports.Add(report);
 }
Beispiel #13
0
 private static void BindModeHandler(ProviderDescriptor provider, DeviceDescriptor device, BindingReport binding, short value)
 {
     Console.WriteLine($"BIND MODE: Provider: {provider.ProviderName} | Device: {device.DeviceHandle}/{device.DeviceInstance} | Binding: {binding.BindingDescriptor.Type}/{binding.BindingDescriptor.Index}/{binding.BindingDescriptor.SubIndex} | Title: {binding.Title} | Path: {binding.Path} | Value: {value}");
 }
 public BindingReport BindAsNestedChild(IModelBinder binder)
 {
     _nested = new BindingReport(_property.PropertyType, binder);
     return _nested;
 }
Beispiel #15
0
 static bool RequiredParameterMissing(BindingReport bindingReport)
 {
     return(bindingReport.RequiredPropertiesNotBound.Any());
 }
        private void BuildInputList()
        {
            _buttonInfo = new DeviceReportNode
            {
                Title = "Buttons"
            };
            _bindingReports = new ConcurrentDictionary <BindingDescriptor, BindingReport>();
            for (var b = 0; b < 10; b++)
            {
                var bd = new BindingDescriptor
                {
                    Index = b,
                    Type  = BindingType.Button
                };
                var name = Utilities.buttonNames[bd.Index];
                var br   = new BindingReport
                {
                    Title             = name,
                    Path              = $"Button: {name}",
                    Category          = BindingCategory.Momentary,
                    BindingDescriptor = bd
                };
                _bindingReports.TryAdd(bd, br);
                _buttonInfo.Bindings.Add(br);
            }

            _axisInfo = new DeviceReportNode
            {
                Title = "Axes"
            };
            for (var a = 0; a < 6; a++)
            {
                var bd = new BindingDescriptor
                {
                    Index = a,
                    Type  = BindingType.Axis
                };
                var name = Utilities.axisNames[bd.Index];
                var br   = new BindingReport
                {
                    Title             = name,
                    Path              = $"Axis: {name}",
                    Category          = (bd.Index < 4 ? BindingCategory.Signed : BindingCategory.Unsigned),
                    BindingDescriptor = bd
                };
                _bindingReports.TryAdd(bd, br);
                _axisInfo.Bindings.Add(br);
            }

            _povInfo = new DeviceReportNode
            {
                Title = "DPad"
            };
            for (var d = 0; d < 4; d++)
            {
                var bd = new BindingDescriptor
                {
                    Index    = 0,
                    SubIndex = d,
                    Type     = BindingType.POV
                };
                var name = Utilities.povNames[bd.SubIndex];
                var br   = new BindingReport
                {
                    Title             = name,
                    Path              = $"DPad: {name}",
                    Category          = BindingCategory.Momentary,
                    BindingDescriptor = bd
                };
                _bindingReports.TryAdd(bd, br);
                _povInfo.Bindings.Add(br);
            }
        }
Beispiel #17
0
 public static void ProcessBindMode(ProviderDescriptor providerDescriptor, DeviceDescriptor deviceDescriptor,
                                    BindingReport bindingDescriptor, short state)
 {
     Console.WriteLine($"IOWrapper| BindMode: Proivider: {providerDescriptor.ProviderName}, Handle {deviceDescriptor.DeviceHandle}/{deviceDescriptor.DeviceInstance}" +
                       $", Type: {bindingDescriptor.BindingDescriptor.Type}, Index: {bindingDescriptor.BindingDescriptor.Index}/{bindingDescriptor.BindingDescriptor.SubIndex}, State: {state}");
 }