/* * Trail.java * de.sciss.timebased package * * Copyright (c) 2004-2016 Hanns Holger Rutz. All rights reserved. * * This software is published under the GNU General Public License v3+ * * * For further information, please contact Hanns Holger Rutz at * contact@sciss.de * * * Changelog: * 06-Jan-06 created * 25-Feb-06 extends TreeNode ; moved to double precision */ package de.sciss.timebased; import java.io.IOException; import java.util.EventListener; import java.util.List; import javax.swing.tree.TreeNode; import de.sciss.app.BasicEvent; import de.sciss.app.AbstractCompoundEdit; import de.sciss.io.Span; import de.sciss.util.Disposable; public interface Trail extends Disposable, TreeNode { public static final int TOUCH_NONE = 0; public static final int TOUCH_SPLIT = 1; public static final int TOUCH_RESIZE = 2; public void clear(Object source); public void dispose(); public void insert(Object source, Span span); public void insert(Object source, Span span, int touchMode); public void editInsert(Object source, Span span, AbstractCompoundEdit ce); public void editInsert(Object source, Span span, int touchMode, AbstractCompoundEdit ce); public void remove(Object source, Span span); public void remove(Object source, Span span, int touchMode); public void editRemove(Object source, Span span, AbstractCompoundEdit ce); public void editRemove(Object source, Span span, int touchMode, AbstractCompoundEdit ce); public void clear(Object source, Span span); public void clear(Object source, Span span, int touchMode); public void editClear(Object source, Span span, AbstractCompoundEdit ce); public void editClear(Object source, Span span, int touchMode, AbstractCompoundEdit ce); public void add(Object source, Stake stake) throws IOException; public void editAdd(Object source, Stake stake, AbstractCompoundEdit ce) throws IOException; public void addAll(Object source, List<Stake> stakes) throws IOException; public void editAddAll(Object source, List<Stake> stakes, AbstractCompoundEdit ce) throws IOException; public void remove(Object source, Stake stake) throws IOException; public void editRemove(Object source, Stake stake, AbstractCompoundEdit ce) throws IOException; public void removeAll(Object source, List<Stake> stakes) throws IOException; public void editRemoveAll(Object source, List<Stake> stakes, AbstractCompoundEdit ce) throws IOException; public int getDefaultTouchMode(); // public void replace( Object source, Stake oldStake, Stake newStake, CompoundEdit ce ); public List<Stake> getRange(Span span, boolean byStart); public List<Stake> getCutRange(Span span, boolean byStart, int touchMode, long shiftVirtual); public Trail getCutTrail(Span span, int touchMode, long shiftVirtual); // public List getRange( int startIdx, int stopIdx, boolean byStart ); public List<Stake> getAll(boolean byStart); public Stake get(int idx, boolean byStart); public int getNumStakes(); public Span getSpan(); public double getRate(); public int indexOf(Stake stake, boolean byStart); public int indexOf(long pos, boolean byStart); public boolean contains(Stake stake); public boolean isEmpty(); // public Stake getLeftMost( int idx, boolean byStart ); // public Stake getRightMost( int idx, boolean byStart ); // public int getLeftMostIndex( int idx, boolean byStart ); // public int getRightMostIndex( int idx, boolean byStart ); public void addListener(Trail.Listener listener); public void removeListener(Trail.Listener listener); public void editBegin(AbstractCompoundEdit ce); public void editEnd(AbstractCompoundEdit ce); // -------------------------- inner Listener interface -------------------------- public interface Listener extends EventListener { public void trailModified(Trail.Event e); } // --------------------- internal classes --------------------- @SuppressWarnings("serial") public static class Event extends BasicEvent { public static final int MODIFIED = 0; private final Trail t; private Span span; public Event(Trail t, Object source, Span affectedSpan) { super(source, MODIFIED, System.currentTimeMillis()); this.t = t; this.span = affectedSpan; } public Trail getTrail() { return t; } public Span getAffectedSpan() { return span; } public boolean incorporate(BasicEvent oldEvent) { if (oldEvent instanceof Event && this.getSource() == oldEvent.getSource() && this.getID() == oldEvent.getID()) { final Event e = (Event) oldEvent; if (e.getTrail() == this.getTrail()) { this.span = Span.union(this.getAffectedSpan(), e.getAffectedSpan()); return true; } } return false; } } }