Added state preservation logic to image editor to keep brush and fill pattern selections intact when switching images

This commit is contained in:
Brendan Robert 2015-03-14 23:24:08 -05:00
parent 5da472806d
commit 547d0c72f4
3 changed files with 35 additions and 3 deletions

View File

@ -4,6 +4,7 @@
*/
package org.badvision.outlaweditor;
import java.util.EnumMap;
import javafx.scene.control.Menu;
import org.badvision.outlaweditor.data.xml.Image;
import org.badvision.outlaweditor.data.xml.PlatformData;
@ -19,6 +20,10 @@ public abstract class ImageEditor extends Editor<Image, ImageEditor.DrawMode> {
Toggle, Pencil1px, Pencil3px, Pencil5px, Rectangle, Circle, Stamp
}
abstract public EnumMap getState();
abstract public void setState(EnumMap oldState);
abstract public void buildPatternSelector(Menu tilePatternMenu);
public abstract void togglePanZoom();

View File

@ -4,6 +4,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
@ -44,6 +45,7 @@ public class AppleImageEditor extends ImageEditor implements EventHandler<MouseE
protected double zoom = 1.0;
protected int xScale = 2;
protected int yScale = 2;
public static enum StateVars{PATTERN, DRAW_MODE};
public Platform getPlatform() {
return Platform.AppleII;
@ -66,6 +68,7 @@ public class AppleImageEditor extends ImageEditor implements EventHandler<MouseE
public void buildPatternSelector(Menu tilePatternMenu) {
FillPattern.buildMenu(tilePatternMenu, (FillPattern object) -> {
changeCurrentPattern(object);
state.put(StateVars.PATTERN, object);
});
}
@ -76,11 +79,29 @@ public class AppleImageEditor extends ImageEditor implements EventHandler<MouseE
lastActionY = -1;
}
EnumMap<StateVars, Object> state = new EnumMap<>(StateVars.class);
@Override
public EnumMap getState() {
return state;
}
@Override
public void setState(EnumMap oldState) {
state.putAll(oldState);
changeCurrentPattern((FillPattern) state.get(StateVars.PATTERN));
_setDrawMode((DrawMode) state.get(StateVars.DRAW_MODE));
}
@Override
public void setDrawMode(DrawMode drawMode) {
_setDrawMode(drawMode);
state.put(StateVars.DRAW_MODE, drawMode);
}
private void _setDrawMode(DrawMode drawMode) {
currentDrawMode = drawMode;
lastActionX = -1;
lastActionY = -1;
lastActionY = -1;
}
@Override

View File

@ -1,5 +1,6 @@
package org.badvision.outlaweditor.ui.impl;
import java.util.EnumMap;
import java.util.List;
import org.badvision.outlaweditor.ui.EntitySelectorCell;
import java.util.logging.Level;
@ -163,14 +164,16 @@ public class ImageEditorTabControllerImpl extends ImageEditorTabController {
}
private void setCurrentImage(Image i) {
imageNameField.textProperty().removeListener(rebuildListener);
imageCategoryField.textProperty().removeListener(rebuildListener);
if (currentImage != null && currentImage.equals(i)) {
return;
}
imageNameField.textProperty().removeListener(rebuildListener);
imageCategoryField.textProperty().removeListener(rebuildListener);
imageSelector.getSelectionModel().select(i);
currentImage = i;
EnumMap oldEditorState = null;
if (currentImageEditor != null) {
oldEditorState = currentImageEditor.getState();
currentImageEditor.unregister();
}
if (i == null) {
@ -209,6 +212,9 @@ public class ImageEditorTabControllerImpl extends ImageEditorTabController {
imageEditorZoomGroup.setScaleY(1.0);
imageNameField.textProperty().addListener(rebuildListener);
imageCategoryField.textProperty().addListener(rebuildListener);
if (oldEditorState != null) {
currentImageEditor.setState(oldEditorState);
}
}
}