package com.baselet.gui.command; import com.baselet.control.Main; import com.baselet.diagram.DiagramHandler; import com.baselet.element.interfaces.GridElement; import com.baselet.gui.CurrentGui; import com.baselet.gui.pane.OwnSyntaxPane; public class ChangePanelAttributes extends Command { private GridElement _entity; public GridElement getEntity() { return _entity; } private String _newState; private String _oldState; private int _oldCaret; private int _newCaret; public String getNewState() { return _newState; } public String getOldState() { return _oldState; } public int getOldCaret() { return _oldCaret; } public int getNewCaret() { return _newCaret; } public ChangePanelAttributes(GridElement e, String oldState, String newState, int oldCaret, int newCaret) { _entity = e; _newState = newState; _oldState = oldState; _newCaret = newCaret; _oldCaret = oldCaret; } @Override public void execute(DiagramHandler handler) { super.execute(handler); _entity.setPanelAttributes(_newState); _entity.repaint(); GridElement gridElement = Main.getInstance().getEditedGridElement(); if (gridElement != null && gridElement.equals(_entity)) { OwnSyntaxPane pane = CurrentGui.getInstance().getGui().getPropertyPane(); pane.switchToElement(gridElement); if (pane.getText().length() >= _newCaret) { pane.getTextComponent().setCaretPosition(_newCaret); } } } @Override public void undo(DiagramHandler handler) { // AB: Do not call super.undo() which would deselect the entity // super.undo(handler); _entity.setPanelAttributes(_oldState); _entity.repaint(); GridElement gridElement = Main.getInstance().getEditedGridElement(); if (gridElement != null && gridElement.equals(_entity)) { OwnSyntaxPane pane = CurrentGui.getInstance().getGui().getPropertyPane(); pane.switchToElement(gridElement); if (pane.getText().length() >= _oldCaret) { pane.getTextComponent().setCaretPosition(_oldCaret); } } } @Override public boolean isMergeableTo(Command c) { // method is not mergeable (to allow undo of property changes) return false; } @Override public Command mergeTo(Command c) { ChangePanelAttributes tmp = (ChangePanelAttributes) c; ChangePanelAttributes ret = new ChangePanelAttributes(getEntity(), tmp.getOldState(), getNewState(), tmp.getOldCaret(), getNewCaret()); return ret; } @Override public String toString() { return "Changestate from " + getOldState() + " to " + getNewState(); } }