private void scroll(boolean leftScrolled) {
    JMRevision revision;
    FilePanel fp1;
    FilePanel fp2;
    int line;

    revision = diffPanel.getCurrentRevision();
    if (revision == null) {
      return;
    }

    if (leftScrolled) {
      fp1 = filePanelLeft;
      fp2 = filePanelRight;
    } else {
      fp1 = filePanelRight;
      fp2 = filePanelLeft;
    }

    line = getCurrentLineCenter(fp1);

    if (leftScrolled) {
      line = DiffUtil.getRevisedLine(revision, line);
    } else {
      line = DiffUtil.getOriginalLine(revision, line);
    }

    scrollToLine(fp2, line);
  }
  void toNextDelta(boolean next) {
    int line;
    JMRevision revision;
    JMDelta previousDelta;
    JMDelta currentDelta;
    JMDelta nextDelta;
    JMDelta toDelta;
    JMChunk original;
    int currentIndex;
    int nextIndex;
    List<JMDelta> deltas;
    int i;

    revision = diffPanel.getCurrentRevision();
    if (revision == null) {
      return;
    }

    deltas = revision.getDeltas();

    line = getCurrentLineCenter(filePanelLeft);

    currentDelta = null;
    currentIndex = -1;

    i = 0;
    for (JMDelta delta : deltas) {
      original = delta.getOriginal();

      currentIndex = i;
      i++;

      if (line >= original.getAnchor()) {
        if (line <= original.getAnchor() + original.getSize()) {
          currentDelta = delta;
          break;
        }
      } else {
        break;
      }
    }

    previousDelta = null;
    nextDelta = null;
    if (currentIndex != -1) {
      if (currentIndex > 0) {
        previousDelta = deltas.get(currentIndex - 1);
      }

      nextIndex = currentIndex;
      if (currentDelta != null) {
        nextIndex++;
      }

      if (nextIndex < deltas.size()) {
        nextDelta = deltas.get(nextIndex);
      }
    }

    if (next) {
      toDelta = nextDelta;
    } else {
      toDelta = previousDelta;
    }

    if (toDelta != null) {
      scrollToLine(filePanelLeft, toDelta.getOriginal().getAnchor());
      scroll(true);
    }
  }