added modification of circuit settings to undo event sourcing

This commit is contained in:
hneemann 2017-05-28 20:51:21 +02:00
parent 91cac1587c
commit 3f951bcc1c
3 changed files with 29 additions and 28 deletions

View File

@ -6,7 +6,10 @@ import com.thoughtworks.xstream.io.xml.StaxDriver;
import de.neemann.digital.core.ObservableValue;
import de.neemann.digital.core.ObservableValues;
import de.neemann.digital.core.Observer;
import de.neemann.digital.core.element.*;
import de.neemann.digital.core.element.ElementAttributes;
import de.neemann.digital.core.element.Keys;
import de.neemann.digital.core.element.PinDescription;
import de.neemann.digital.core.element.Rotation;
import de.neemann.digital.core.io.In;
import de.neemann.digital.core.io.IntFormat;
import de.neemann.digital.core.io.Out;
@ -19,17 +22,14 @@ import de.neemann.digital.draw.graphics.Style;
import de.neemann.digital.draw.graphics.Vector;
import de.neemann.digital.draw.shapes.Drawable;
import de.neemann.digital.draw.shapes.ShapeFactory;
import de.neemann.digital.gui.components.AttributeDialog;
import de.neemann.digital.gui.sync.NoSync;
import de.neemann.digital.gui.sync.Sync;
import de.neemann.digital.lang.Lang;
import de.neemann.digital.testing.TestData;
import de.neemann.gui.language.Language;
import java.awt.*;
import java.io.*;
import java.util.*;
import java.util.List;
import static de.neemann.digital.core.element.PinInfo.input;
@ -43,16 +43,6 @@ import static de.neemann.digital.core.element.PinInfo.input;
*/
public class Circuit {
private static final Set<Drawable> EMPTY_SET = Collections.emptySet();
private static final ArrayList<Key> ATTR_LIST = new ArrayList<>();
static {
ATTR_LIST.add(Keys.WIDTH);
ATTR_LIST.add(Keys.IS_DIL);
ATTR_LIST.add(Keys.PINCOUNT);
ATTR_LIST.add(Keys.BACKGROUND_COLOR);
ATTR_LIST.add(Keys.DESCRIPTION);
ATTR_LIST.add(Keys.LOCKED_MODE);
}
private int version = 1;
private ElementAttributes attributes;
@ -174,19 +164,6 @@ public class Circuit {
return attributes;
}
/**
* Opens the attribute editor
*
* @param parent the parent component
*/
public void editAttributes(Component parent) {
if (new AttributeDialog(parent, ATTR_LIST, getAttributes()).showDialog()) {
if (attributes.isEmpty())
attributes = null;
modified();
}
}
/**
* Draws tis circuit using the given graphic instance
*

View File

@ -536,7 +536,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
ToolTipAction editAttributes = new ToolTipAction(Lang.get("menu_editAttributes")) {
@Override
public void actionPerformed(ActionEvent e) {
circuitComponent.getCircuit().editAttributes(Main.this);
circuitComponent.editCircuitAttributes(Main.this);
}
}.setToolTip(Lang.get("menu_editAttributes_tt"));

View File

@ -52,6 +52,16 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
public static final Icon ICON_DELETE = IconCreator.create("delete.png");
private static final Icon ICON_UNDO = IconCreator.create("edit-undo.png");
private static final Icon ICON_REDO = IconCreator.create("edit-redo.png");
private static final ArrayList<Key> ATTR_LIST = new ArrayList<>();
static {
ATTR_LIST.add(Keys.WIDTH);
ATTR_LIST.add(Keys.IS_DIL);
ATTR_LIST.add(Keys.PINCOUNT);
ATTR_LIST.add(Keys.BACKGROUND_COLOR);
ATTR_LIST.add(Keys.DESCRIPTION);
ATTR_LIST.add(Keys.LOCKED_MODE);
}
private static final String DEL_ACTION = "myDelAction";
private static final int MOUSE_BORDER_SMALL = 10;
@ -306,6 +316,20 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
}.setActive(false).setAcceleratorCTRLplus('C').enableAcceleratorIn(this);
}
/**
* Opens the attribute editor
*
* @param parent the parent component
*/
public void editCircuitAttributes(Component parent) {
ElementAttributes edited = new ElementAttributes(circuit.getAttributes());
if (new AttributeDialog(parent, ATTR_LIST, edited).showDialog()) {
if (!edited.equals(circuit.getAttributes()))
modify(circuit -> circuit.getAttributes().getValuesFrom(edited));
}
}
/**
* Apply a modification
*