Compare commits
5 Commits
ae2f2e8a84
...
f/aggregat
Author | SHA1 | Date | |
---|---|---|---|
d117052ca4
|
|||
b30f806894
|
|||
4872fd3db3
![]() |
|||
833c346914
|
|||
8ef4a9a572
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.kske</groupId>
|
<groupId>dev.kske</groupId>
|
||||||
<artifactId>undo-redo</artifactId>
|
<artifactId>undo-redo</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.1.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package dev.kske.undoredo.core;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Kai S. K. Engelbart
|
||||||
|
* @since 0.2.0
|
||||||
|
*/
|
||||||
|
public final class AggregateChange<C extends Change> implements Change {
|
||||||
|
|
||||||
|
private final List<C> changes = new ArrayList<>();
|
||||||
|
|
||||||
|
@SafeVarargs
|
||||||
|
public AggregateChange(C... changes) {
|
||||||
|
this(Arrays.asList(changes));
|
||||||
|
}
|
||||||
|
|
||||||
|
public AggregateChange(Collection<C> changes) {
|
||||||
|
changes.addAll(changes);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void apply() {
|
||||||
|
changes.forEach(Change::apply);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Change invert() {
|
||||||
|
List<Change> invertedChanges =
|
||||||
|
changes
|
||||||
|
.parallelStream()
|
||||||
|
.map(Change::invert)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
Collections.reverse(invertedChanges);
|
||||||
|
return new AggregateChange<>(invertedChanges);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isIdentity() {
|
||||||
|
return changes.stream().allMatch(Change::isIdentity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<C> changes() {
|
||||||
|
return Collections.unmodifiableList(changes);
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package dev.kske.undoredo.core;
|
package dev.kske.undoredo.core;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base interface for changes to be registered in an undo manager.
|
* Base interface for changes to be registered in a change manager.
|
||||||
*
|
*
|
||||||
* @author Maximilian Käfer
|
* @author Maximilian Käfer
|
||||||
* @since 0.0.1
|
* @since 0.0.1
|
||||||
|
@ -18,7 +18,7 @@ public final class UnlimitedChangeManager<C extends Change> implements ChangeMan
|
|||||||
private int markedIndex = -1;
|
private int markedIndex = -1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @implNode As this change manager uses a linear history model, all changes behind the last
|
* @implNote As this change manager uses a linear history model, all changes behind the last
|
||||||
* applied change will be discarded and therefore can be garbage collected.
|
* applied change will be discarded and therefore can be garbage collected.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@ -9,14 +9,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.kske</groupId>
|
<groupId>dev.kske</groupId>
|
||||||
<artifactId>undo-redo</artifactId>
|
<artifactId>undo-redo</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.1.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>dev.kske</groupId>
|
<groupId>dev.kske</groupId>
|
||||||
<artifactId>undo-redo-core</artifactId>
|
<artifactId>undo-redo-core</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjfx</groupId>
|
<groupId>org.openjfx</groupId>
|
||||||
|
@ -28,13 +28,13 @@ public class ChangeManagerWrapper<C extends Change, M extends ChangeManager<C>>
|
|||||||
public static final String UNDO_AVAILABLE = "undoAvailable";
|
public static final String UNDO_AVAILABLE = "undoAvailable";
|
||||||
public static final String REDO_AVAILABLE = "redoAvailable";
|
public static final String REDO_AVAILABLE = "redoAvailable";
|
||||||
|
|
||||||
protected ReadOnlyObjectWrapper<C> lastChange =
|
protected final ReadOnlyObjectWrapper<C> lastChange =
|
||||||
new ReadOnlyObjectWrapper<>(this, LAST_CHANGE);
|
new ReadOnlyObjectWrapper<>(this, LAST_CHANGE);
|
||||||
protected ReadOnlyBooleanWrapper atMarkedChange =
|
protected final ReadOnlyBooleanWrapper atMarkedChange =
|
||||||
new ReadOnlyBooleanWrapper(this, AT_MARKED_CHANGE);
|
new ReadOnlyBooleanWrapper(this, AT_MARKED_CHANGE);
|
||||||
protected ReadOnlyBooleanWrapper undoAvailable =
|
protected final ReadOnlyBooleanWrapper undoAvailable =
|
||||||
new ReadOnlyBooleanWrapper(this, UNDO_AVAILABLE);
|
new ReadOnlyBooleanWrapper(this, UNDO_AVAILABLE);
|
||||||
protected ReadOnlyBooleanWrapper redoAvailable =
|
protected final ReadOnlyBooleanWrapper redoAvailable =
|
||||||
new ReadOnlyBooleanWrapper(this, REDO_AVAILABLE);
|
new ReadOnlyBooleanWrapper(this, REDO_AVAILABLE);
|
||||||
|
|
||||||
protected final M manager;
|
protected final M manager;
|
||||||
|
2
pom.xml
2
pom.xml
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>dev.kske</groupId>
|
<groupId>dev.kske</groupId>
|
||||||
<artifactId>undo-redo</artifactId>
|
<artifactId>undo-redo</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.1.0</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<name>Undo-Redo</name>
|
<name>Undo-Redo</name>
|
||||||
|
Reference in New Issue
Block a user