redo method

void redo()

Implementation

void redo() {
  if (!isHistoryEnabled) {
    // History is disabled, therefore undo/redo are disabled.
    return;
  }

  editorEditsLog.info("Running redo");
  if (_future.isEmpty) {
    return;
  }

  editorEditsLog.finer("Future transaction:");
  for (final command in _future.last.commands) {
    editorEditsLog.finer(" - ${command.runtimeType}");
  }

  for (final editable in context._resources.values) {
    // Don't let editables notify listeners during redo.
    editable.onTransactionStart();
  }

  final commandTransaction = _future.removeLast();
  final edits = <EditEvent>[];
  for (final command in commandTransaction.commands) {
    final commandEdits = _executeCommand(command);
    edits.addAll(commandEdits);
  }
  _history.add(commandTransaction);

  editorEditsLog.info("Finished redo");

  editorEditsLog.finer("Ending transaction on all editables");
  for (final editable in context._resources.values) {
    // Let editables start notifying listeners again.
    editable.onTransactionEnd(edits);
  }

  // TODO: find out why this is needed. If it's not, remove it.
  _notifyListeners([]);
}