/*
   * (non-Javadoc)
   *
   * @see
   * si.vicos.annotations.editor.tracking.TrackingEditor.EditAssistant#editFrame
   * (si.vicos.annotations.editor.tracking.EditableAnnotatedSequence, int,
   * si.vicos.annotations.Annotation)
   */
  @Override
  public EditList editFrame(EditableAnnotatedSequence sequence, int frame, Annotation region) {

    EditList list = new EditList();

    try {

      list.add(new EditRegionOperation(frame, region));
      list.add(new EditTagAddOperation(frame, "keyframe"));

      // Interpolate forward if possible

      int last = 0;

      for (last = frame + 1; last < sequence.size(); last++)
        if (sequence.hasTag(last, "keyframe") && !sequence.get(last).isNull()) break;

      if (!(last == sequence.size() || frame > last - 2))
        list.addAll(interpolate(sequence, frame, region, last, sequence.get(frame)));

      // Interpolate backwards if possible

      int first = 0;

      for (first = frame - 1; first >= 0; first--)
        if (sequence.hasTag(first, "keyframe") && !sequence.get(first).isNull()) break;

      if (!(first == -1 || first > frame - 2))
        list.addAll(interpolate(sequence, first, sequence.get(first), frame, region));

    } catch (Exception e) {

      Application.getApplicationLogger().report(e);
    }

    return list;
  }