private static Dictionary <string, AMidiDefinition> createGenericMidiDefinitions(MappingType type)
        {
            Dictionary <string, AMidiDefinition> result = new Dictionary <string, AMidiDefinition>();

            KeyConverter keyConverter = new KeyConverter();

            int numChannels = 16;
            int num         = 128;

            for (int i = 1; i <= numChannels; i++)
            {
                for (int j = 0; j < num; j++)
                {
                    var cc = new ControlChangeMidiDefinition(type, i, j);
                    result.Add(cc.Note, cc);
                    var note = new NoteMidiDefinition(type, i, keyConverter.GetKeyTextIPN(j));
                    result.Add(note.Note, note);
                }

                var pitch = new PitchBendMidiDefinition(type, i);
                result.Add(pitch.Note, pitch);
            }
            return(result);
        }
        ////////////


        private void applyMidiRange()
        {
            var templateBinding = _mappings.First().MidiBinding as AGenericMidiDefinition;

            var isCC = templateBinding is ControlChangeMidiDefinition;

            var keyConverter = new MidiLib.Utils.KeyConverter();

            int number = isCC ? (templateBinding as ControlChangeMidiDefinition).Cc : keyConverter.ToKeyIPN((templateBinding as NoteMidiDefinition).KeyText);

            AGenericMidiDefinition newBinding;

            foreach (var m in _mappings)
            {
                if (m.MidiBinding != null && m.MidiBinding.Equals(templateBinding))
                {
                    continue;
                }

                number++;

                if (isCC)
                {
                    newBinding = new ControlChangeMidiDefinition(templateBinding.Type, templateBinding.Channel, number);
                }
                else
                {
                    newBinding = new NoteMidiDefinition(templateBinding.Type, templateBinding.Channel, keyConverter.GetKeyTextIPN(number));
                }

                m.SetBinding(newBinding);
            }

            analyzeSelection();
            updateMenus();
        }