/*
* Created on Apr 24, 2006
*
* Copyright (c) 2006 P.J.Leonard
*
* http://www.frinika.com
*
* This file is part of Frinika.
*
* Frinika is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* Frinika is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with Frinika; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.frinika.sequencer.model;
import com.frinika.sequencer.patchname.MyPatch;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiEvent;
import javax.sound.midi.ShortMessage;
public class ProgramChangeEvent extends ChannelEvent {
transient MidiEvent programEvent;
transient MidiEvent msbEvent;
transient MidiEvent lsbEvent;
int prog;
int msb;
int lsb;
/**
*
*/
private static final long serialVersionUID = 1L;
public ProgramChangeEvent(MidiPart part, long startTick, int prog, int msb,
int lsb) {
super(part, startTick);
}
@Override
public long getEndTick() {
// TODO Auto-generated method stub
return 0;
}
@SuppressWarnings("deprecation")
@Override
void commitRemoveImpl() { // Jens, renamed to be able to handle notification of CommitListeners in MultiEvent, see MultiEvent.commitXxx()
// System .out.println(" COMMIT REMOVE PROG ");
getTrack().remove(msbEvent);
getTrack().remove(lsbEvent);
getTrack().remove(programEvent);
zombie=true;
}
@SuppressWarnings("deprecation")
@Override
public void commitAddImpl() { // Jens, renamed to be able to handle notification of CommitListeners in MultiEvent, see MultiEvent.commitXxx()
// System. out.println(" COMMIT ADD PROG ");
try {
ShortMessage shm = new ShortMessage();
shm.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0, msb);
msbEvent = new MidiEvent(shm, startTick);
getTrack().add(msbEvent);
shm = new ShortMessage();
shm.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x20, lsb);
lsbEvent = new MidiEvent(shm, startTick);
getTrack().add(lsbEvent);
shm = new ShortMessage();
shm.setMessage(ShortMessage.PROGRAM_CHANGE, channel, prog, 0);
programEvent = new MidiEvent(shm, startTick);
getTrack().add(programEvent);
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
zombie=false;
}
public void restoreFromClone(EditHistoryRecordable object) {
// TODO Auto-generated method stub
ProgramChangeEvent evt=(ProgramChangeEvent)object;
this.part = evt.part;
this.startTick = evt.startTick;
this.prog = evt.prog;
this.msb = evt.msb;
this.lsb = evt.lsb;
}
public void setProgram(int prog2, int msb2, int lsb2) {
prog=prog2;
msb=msb2;
lsb=lsb2;
}
public MyPatch getPatch() {
return new MyPatch(prog, msb, lsb);
}
}