1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
package tim.prune.cmd;
import tim.prune.DataSubscriber;
import tim.prune.data.AudioClip;
import tim.prune.data.DataPoint;
import tim.prune.data.MediaObject;
import tim.prune.data.Photo;
import tim.prune.data.TrackInfo;
/**
* Connect or disconnect a photo and/or audio to a single point
*/
public class ConnectMediaCmd extends Command
{
private final DataPoint _point;
private final Photo _photo;
private final AudioClip _audio;
public ConnectMediaCmd(DataPoint inPoint, Photo inPhoto, AudioClip inAudio) {
this(null, inPoint, inPhoto, inAudio);
}
public ConnectMediaCmd(DataPoint inPoint, MediaObject inMedia) {
this(null, inPoint, inMedia instanceof Photo ? (Photo) inMedia : null,
inMedia instanceof AudioClip ? (AudioClip) inMedia : null);
}
protected ConnectMediaCmd(ConnectMediaCmd inParent, DataPoint inPoint, Photo inPhoto, AudioClip inAudio)
{
super(inParent);
_point = inPoint;
_photo = inPhoto;
_audio = inAudio;
}
@Override
public int getUpdateFlags() {
return DataSubscriber.DATA_EDITED | DataSubscriber.MEDIA_MODIFIED;
}
@Override
protected boolean executeCommand(TrackInfo inInfo)
{
if (_point == null) {
return false;
}
boolean connectPhoto = (_photo != null && _point.getPhoto() == null);
boolean disconnectPhoto = (_photo == null && _point.getPhoto() != null);
boolean connectAudio = (_audio != null && _point.getAudio() == null);
boolean disconnectAudio = (_audio == null && _point.getAudio() != null);
if (connectPhoto) {
_point.setPhoto(_photo);
_photo.setDataPoint(_point);
}
else if (disconnectPhoto) {
_point.getPhoto().setDataPoint(null);
_point.setPhoto(null);
}
if (connectAudio) {
_point.setAudio(_audio);
_audio.setDataPoint(_point);
}
else if (disconnectAudio) {
_point.getAudio().setDataPoint(null);
_point.setAudio(null);
}
return true;
}
@Override
protected Command makeInverse(TrackInfo inInfo)
{
Photo photo = (_photo == null ? _point.getPhoto() : null);
AudioClip audio = (_audio == null ? _point.getAudio() : null);
return new ConnectMediaCmd(this, _point, photo, audio);
}
}
|