// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.videomapping.video;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Color;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.File;
import java.text.DateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JButton;
import org.openstreetmap.josm.plugins.videomapping.VideoPositionLayer;
//extends video playback, major control has the video player
public class GPSVideoPlayer extends VideoPlayer {
private List<GPSVideo> videos;
private VideoPositionLayer videoPositionLayer;
public GPSVideoPlayer(DateFormat videoTimeFormat, VideoPositionLayer videoPositionLayer) throws HeadlessException {
super(videoTimeFormat);
videos = new LinkedList<>();
this.videoPositionLayer = videoPositionLayer;
videoPositionLayer.setGPSVideoPlayer(this);
}
public GPSVideo addVideo(File videofile) {
GPSVideo video = new GPSVideo(super.addVideo(videofile, Integer.toString(videos.size())));
enableSingleVideoMode(true);
videos.add(video);
addSyncButton(video);
return video;
}
private void addSyncButton(GPSVideo video) {
JButton syncButton = new JButton(tr("Sync"));
syncButton.setBackground(Color.RED);
syncButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
resync(e);
}
});
video.SyncComponent = syncButton;
//video.panel.add(syncButton,BorderLayout.SOUTH);
controlsPanel.add(syncButton);
}
//do a (re)sync
private void resync(ActionEvent e) {
JButton btn = (JButton) e.getSource();
GPSVideo v = findVideo(btn);
v.doSync(videoPositionLayer);
btn.setBackground(Color.GREEN);
enableSingleVideoMode(false);
}
protected GPSVideo findVideo(JButton source) {
for (GPSVideo v : videos) {
if (v.SyncComponent == source) return v;
}
return null;
}
//jump in all videos this date, if possible
public void jumpTo(Date date) {
for (GPSVideo video : videos) {
video.jumpTo(date);
}
}
public boolean areAllVideosSynced() {
for (GPSVideo video : videos) {
if (!video.isSynced()) return false;
}
return true;
}
@Override
public void update_plays() {
super.update_plays();
if (areAllVideosSynced())
videoPositionLayer.setIconPosition(videos.get(0).getCurrentWayPoint());
}
@Override
public void windowClosing(WindowEvent arg0) {
videoPositionLayer.unload();
super.windowClosing(arg0);
}
}