Пример #1
0
        /// <summary>
        /// MIDIデバイスの選択肢の欄を更新します
        /// </summary>
        private void updateMidiDevice()
        {
            int sel_midi = comboMidiInPortNumber.SelectedIndex;
            int sel_mtc  = comboMtcMidiInPortNumber.SelectedIndex;

            comboMidiInPortNumber.Items.Clear();
            comboMtcMidiInPortNumber.Items.Clear();
#if ENABLE_MIDI
            List <MidiDevice.Info> midiins = new List <MidiDevice.Info>();
            foreach (MidiDevice.Info info in MidiSystem.getMidiDeviceInfo())
            {
#if DEBUG
                if (info != null)
                {
                    sout.println("Preference#updateMidiDevice; info.getName()=" + info.getName());
                }
#endif
                MidiDevice device = null;
                try {
                    device = MidiSystem.getMidiDevice(info);
                } catch (Exception ex) {
                    device = null;
                }
                if (device == null)
                {
                    continue;
                }
#if DEBUG
                sout.println("Preference#updateMidiDevice; (device is Receiver)=" + (device is Receiver));
#endif
                // MIDI-OUTの最大接続数.-1は制限なしを表す
                int max = device.getMaxTransmitters();
                if (max > 0 || max == -1)
                {
                    midiins.Add(info);
                }
            }

            foreach (MidiDevice.Info info in midiins)
            {
                comboMidiInPortNumber.Items.Add(info);
                comboMtcMidiInPortNumber.Items.Add(info);
            }
            if (midiins.Count <= 0)
            {
                comboMtcMidiInPortNumber.Enabled = false;
                comboMidiInPortNumber.Enabled    = false;
            }
            else
            {
#if ENABLE_MTC
                comboMtcMidiInPortNumber.setEnabled(true);
#else // ENABLE_MTC
                comboMtcMidiInPortNumber.Enabled = false;
#endif // ENABLE_MTC
                comboMidiInPortNumber.Enabled = true;
            }
#else // ENABLE_MIDI
            comboMtcMidiInPortNumber.setEnabled(false);
            comboMidiInPortNumber.setEnabled(false);
#endif // ENABLE_MIDI

            // 可能なら選択状態を復帰
            if (sel_midi >= 0)
            {
                if (comboMidiInPortNumber.Items.Count <= sel_midi)
                {
                    sel_midi = comboMidiInPortNumber.Items.Count - 1;
                }
                comboMidiInPortNumber.SelectedIndex = sel_midi;
            }

            if (sel_mtc >= 0)
            {
                if (comboMtcMidiInPortNumber.Items.Count <= sel_mtc)
                {
                    sel_mtc = comboMtcMidiInPortNumber.Items.Count - 1;
                }
                comboMtcMidiInPortNumber.SelectedIndex = sel_mtc;
            }
        }