Ejemplo n.º 1
0
        internal ComboMidiDefinition(MappingType type, int channel, Format.MidiDefinition definition)
            : base(type, channel, definition)
        {
            var defs = splitDefinition(definition);

            _midiDefinition1 = AGenericMidiDefinition.Parse(type, defs.Item1);
            _midiDefinition2 = AGenericMidiDefinition.Parse(type, defs.Item2);
        }
Ejemplo n.º 2
0
        private void updateBinding(AMidiDefinition definition = null)
        {
            string          expression;
            AMidiDefinition tmpDefinition;

            foreach (var mapping in _mappings)
            {
                expression    = null;
                tmpDefinition = definition;

                if (IsGenericMidi)
                {
                    if (!String.IsNullOrEmpty(_channel))
                    {
                        if (!String.IsNullOrEmpty(_note))
                        {
                            expression = _channel + "." + _note.Replace("+", "+" + _channel + ".");
                        }
                        else if (mapping.MidiBinding != null)
                        {
                            expression = Regex.Replace(mapping.MidiBinding.Note, @"Ch\d+", _channel);
                        }
                    }
                    else if (!String.IsNullOrEmpty(_note))
                    {
                        if (mapping.MidiBinding != null)
                        {
                            var channel = mapping.MidiBinding.Note.Substring(0, 4);
                            expression = channel + "." + _note.Replace("+", "+" + channel + ".");
                        }
                    }

                    if (expression != null)
                    {
                        tmpDefinition = AGenericMidiDefinition.Parse(mapping.Command.MappingType, expression);
                    }
                }
                else
                {
                    if (tmpDefinition != null && mapping.Command.MappingType != tmpDefinition.Type)
                    {
                        tmpDefinition = _proprietaryDefinitions.First(p => p.Type == mapping.Command.MappingType && p.Note == tmpDefinition.Note);
                    }
                }

                mapping.SetBinding(tmpDefinition);
            }

            analyzeSelection();
            updateMenus();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Set binding.
        /// </summary>
        /// <param name="device">The device this mapping belongs to. </param>
        /// <param name="midi">AMidiDefinition or null to reset binding.</param>
        /// <returns>True if binding was changed.</returns>
        public bool SetBinding(Device device, AMidiDefinition midi) // if the Device paramater was left out, it would be possible to make an invalid binding.
        {
            // given device and definition do not match. binding cannot be kept.
            if (midi != null && device.TypeStr != midi.DeviceTypeStr)
            {
                MidiBinding = null;
                return(true);
            }

            // midi definitions and bindings
            var deviceData  = device.RawDevice.Data;
            var definitions = (Command.MappingType == MappingType.In) ? deviceData.MidiDefinitions.In.Definitions : deviceData.MidiDefinitions.Out.Definitions;
            var bindings    = deviceData.Mappings.MidiBindings.Bindings;

            // remove old binding and definition(s) if no longer in use
            if (MidiBinding != null)
            {
                // remove old binding and check if old definition can be removed too, because it is not used in another binding
                var oldBinding = bindings.SingleOrDefault(b => b.BindingId.Equals(Id));
                if (oldBinding != null)
                {
                    bindings.Remove(oldBinding);

                    var oldBindings = bindings.Where(b => b.MidiNote.Equals(MidiBinding.Note));
                    if (!oldBindings.Any())
                    {
                        int removedCount = definitions.RemoveAll(d => d.MidiNote.Equals(MidiBinding.Note));
                        if (removedCount > 1)
                        {
                            // TODO: Something for the consolidation function
                        }
                    }
                }
            }

            if (midi != null)
            {
                // add midi definition to device, if it doesn't already exist
                var matchingDefinitions = definitions.Where(d => d.MidiNote.Equals(midi.Note));
                if (matchingDefinitions.Any() == false)
                {
                    var definition = midi.RawDefinition;

                    // adapt encoder mode to device, if necessary
                    var genericDefinition = midi as AGenericMidiDefinition;
                    if (genericDefinition != null) //  && genericDefinition.MidiEncoderMode != device.EncoderMode)
                    {
                        genericDefinition = AGenericMidiDefinition.Parse(genericDefinition.Type, definition);
                        // genericDefinition.MidiEncoderMode = device.EncoderMode;
                        genericDefinition.MidiEncoderMode =
                            //this.MidiBinding.RawDefinition.MidiEncoderMode;
                            this.Command.RawSettings.EncoderMode2;

                        //genericDefinition.MidiEncoderMode = this.Command.Control.EncoderMode;

                        definition = genericDefinition.RawDefinition;  // pestrela: this was unchanged
                    }

                    definitions.Add(definition);
                }
                else
                {
                    // definition already exist. Update encoder
                    //matchingDefinitions.First().EncoderMode = this.MidiBinding.MidiEncoderMode;
                }

                // add midi binding to device
                bindings.Add(new Format.MidiNoteBinding(Id, midi.Note));
            }

            // set midi binding to mapping
            bool changed = (MidiBinding != null && !MidiBinding.Equals(midi)) || (midi != null && !midi.Equals(MidiBinding));

            if (changed)
            {
                MidiBinding = midi;
            }

            return(changed);
        }
Ejemplo n.º 4
0
        // This is when we select a new Channel or Note
        private void updateBinding(AMidiDefinition definition = null)
        {
            //if (_channel == "None")
            //    _channel = null;  // this is to simplify the processing a lot

            string          expression;
            AMidiDefinition tmpDefinition;
            bool            needs_cleanup = false;

            foreach (var mapping in _mappings)
            {
                expression    = null;
                tmpDefinition = definition;

                if (IsGenericMidi)
                {
                    // special HACK follows
                    if (!String.IsNullOrEmpty(_note) && _note[0] == '_')
                    {
                        // remove the initial '_', but keep it for further processing
                        // the expression is already complete - doesn't need manipulations
                        expression = _note.Substring(1);
                    }
                    else if (!String.IsNullOrEmpty(_channel))
                    {
                        if (!String.IsNullOrEmpty(_note))
                        {
                            expression = _channel + "." + _note.Replace("+", "+" + _channel + ".");
                        }
                        else if (mapping.MidiBinding != null)
                        {
                            expression = Regex.Replace(mapping.MidiBinding.Note, @"Ch\d+", _channel);
                        }
                    }
                    else if (!String.IsNullOrEmpty(_note))
                    {
                        if (mapping.MidiBinding != null)
                        {
                            var channel = mapping.MidiBinding.Note.Substring(0, 4);
                            expression = channel + "." + _note.Replace("+", "+" + channel + ".");
                        }
                    }

                    if (expression != null)
                    {
                        tmpDefinition = AGenericMidiDefinition.Parse(mapping.Command.MappingType, expression);
                    }
                }
                else
                {
                    if (tmpDefinition != null && mapping.Command.MappingType != tmpDefinition.Type)
                    {
                        tmpDefinition = _proprietaryDefinitions.First(p => p.Type == mapping.Command.MappingType && p.Note == tmpDefinition.Note);
                    }
                }

                mapping.SetBinding(tmpDefinition);
            }

            if (needs_cleanup)
            {
                _note = _note.Substring(6);   //this is just to display correctly in the textbox
            }
            ;

            analyzeSelection();
            updateMenus();
        }