+package tim.prune.function;
+
+import javax.swing.JOptionPane;
+
+import tim.prune.App;
+import tim.prune.GenericFunction;
+import tim.prune.I18nManager;
+import tim.prune.data.AudioClip;
+import tim.prune.undo.UndoDeleteAudio;
+
+/**
+ * Function to remove the currently selected audio clip
+ */
+public class RemoveAudioFunction extends GenericFunction
+{
+ /**
+ * Constructor
+ * @param inApp App object
+ */
+ public RemoveAudioFunction(App inApp) {
+ super(inApp);
+ }
+
+ /** @return name key */
+ public String getNameKey() {
+ return "function.removeaudio";
+ }
+
+ /**
+ * Perform the function
+ */
+ public void begin()
+ {
+ // Delete the current audio, and optionally its point too, keeping undo information
+ AudioClip currentAudio = _app.getTrackInfo().getCurrentAudio();
+ if (currentAudio != null)
+ {
+ // Audio is selected, see if it has a point or not
+ boolean deleted = false;
+ UndoDeleteAudio undoAction = null;
+ if (currentAudio.getDataPoint() == null)
+ {
+ // no point attached, so just delete
+ undoAction = new UndoDeleteAudio(currentAudio, _app.getTrackInfo().getSelection().getCurrentAudioIndex(),
+ null, -1);
+ deleted = _app.getTrackInfo().deleteCurrentAudio(false);
+ }
+ else
+ {
+ // point is attached, so need to confirm point deletion
+ final int pointIndex = _app.getTrackInfo().getTrack().getPointIndex(currentAudio.getDataPoint());
+ undoAction = new UndoDeleteAudio(currentAudio, _app.getTrackInfo().getSelection().getCurrentAudioIndex(),
+ currentAudio.getDataPoint(), pointIndex);
+ undoAction.setAtBoundaryOfSelectedRange(pointIndex == _app.getTrackInfo().getSelection().getStart() ||
+ pointIndex == _app.getTrackInfo().getSelection().getEnd());
+ int response = JOptionPane.showConfirmDialog(_app.getFrame(),
+ I18nManager.getText("dialog.deleteaudio.deletepoint"),
+ I18nManager.getText(getNameKey()), JOptionPane.YES_NO_CANCEL_OPTION);
+ boolean deletePointToo = (response == JOptionPane.YES_OPTION);
+ // Cancel delete if cancel pressed or dialog closed
+ if (response == JOptionPane.YES_OPTION || response == JOptionPane.NO_OPTION) {
+ deleted = _app.getTrackInfo().deleteCurrentAudio(deletePointToo);
+ }
+ }
+ // Add undo information to stack if necessary
+ if (deleted) {
+ _app.completeFunction(undoAction, currentAudio.getName() + " " + I18nManager.getText("confirm.media.removed"));
+ }
+ }
+ }
+}