-
- /**
- * イベント選択リスナー
- */
- private EventSelectionListener eventSelectionListener;
- /**
- * 選択イベントの変更に反応するリスナー
- */
- private class EventSelectionListener implements ListSelectionListener {
- public EventSelectionListener() {
- getModel().getSelectionModel().addListSelectionListener(this);
- }
- @Override
- public void valueChanged(ListSelectionEvent e) {
- if( e.getValueIsAdjusting() )
- return;
- if( getSelectionModel().isSelectionEmpty() ) {
- queryPasteEventAction.setEnabled(false);
- copyEventAction.setEnabled(false);
- deleteEventAction.setEnabled(false);
- cutEventAction.setEnabled(false);
- }
- else {
- copyEventAction.setEnabled(true);
- deleteEventAction.setEnabled(true);
- cutEventAction.setEnabled(true);
- TrackEventListTableModel trackModel = getModel();
- int minIndex = getSelectionModel().getMinSelectionIndex();
- MidiEvent midiEvent = trackModel.getMidiEvent(minIndex);
- if( midiEvent != null ) {
- MidiMessage msg = midiEvent.getMessage();
- if( msg instanceof ShortMessage ) {
- ShortMessage sm = (ShortMessage)msg;
- int cmd = sm.getCommand();
- if( cmd == 0x80 || cmd == 0x90 || cmd == 0xA0 ) {
- // ノート番号を持つ場合、音を鳴らす。
- MidiChannel outMidiChannels[] = outputMidiDevice.getChannels();
- int ch = sm.getChannel();
- int note = sm.getData1();
- int vel = sm.getData2();
- outMidiChannels[ch].noteOn(note, vel);
- outMidiChannels[ch].noteOff(note, vel);
- }
- }
- }
- if( pairNoteOnOffModel.isSelected() ) {
- int maxIndex = getSelectionModel().getMaxSelectionIndex();
- int partnerIndex;
- for( int i=minIndex; i<=maxIndex; i++ ) {
- if( ! getSelectionModel().isSelectedIndex(i) ) continue;
- partnerIndex = trackModel.getIndexOfPartnerFor(i);
- if( partnerIndex >= 0 && ! getSelectionModel().isSelectedIndex(partnerIndex) )
- getSelectionModel().addSelectionInterval(partnerIndex, partnerIndex);
- }
- }
- }
- }
- }