--- /dev/null
+package tim.prune.function;
+
+import tim.prune.App;
+import tim.prune.DataSubscriber;
+import tim.prune.GenericFunction;
+import tim.prune.I18nManager;
+import tim.prune.UpdateMessageBroker;
+import tim.prune.data.AudioClip;
+import tim.prune.data.DataPoint;
+import tim.prune.data.Photo;
+import tim.prune.undo.UndoConnectMedia;
+import tim.prune.undo.UndoOperation;
+
+/**
+ * Function to connect either a photo or an audio clip to the current point
+ */
+public class ConnectToPointFunction extends GenericFunction
+{
+ /**
+ * Constructor
+ * @param inApp app object
+ */
+ public ConnectToPointFunction(App inApp) {
+ super(inApp);
+ }
+
+ /**
+ * @return name key
+ */
+ public String getNameKey() {
+ return "function.connecttopoint";
+ }
+
+ /**
+ * Perform function
+ */
+ public void begin()
+ {
+ Photo photo = _app.getTrackInfo().getCurrentPhoto();
+ DataPoint point = _app.getTrackInfo().getCurrentPoint();
+ AudioClip audio = _app.getTrackInfo().getCurrentAudio();
+ boolean connectPhoto = (point != null && photo != null && point.getPhoto() == null);
+ boolean connectAudio = (point != null && audio != null && point.getAudio() == null);
+
+ if (connectPhoto && connectAudio) {
+ // TODO: Let user choose whether to connect photo/audio or both
+ }
+ // Make undo object
+ UndoOperation undo = new UndoConnectMedia(point, connectPhoto?photo.getName():null,
+ connectAudio?audio.getName():null);
+ // Connect the media
+ if (connectPhoto) {
+ photo.setDataPoint(point);
+ point.setPhoto(photo);
+ }
+ if (connectAudio) {
+ audio.setDataPoint(point);
+ point.setAudio(audio);
+ }
+ UpdateMessageBroker.informSubscribers(DataSubscriber.SELECTION_CHANGED);
+ _app.completeFunction(undo, I18nManager.getText("confirm.media.connect"));
+ }
+}