diff --git a/core/src/cz/nic/tablexia/screen/createuser/FormScreen.java b/core/src/cz/nic/tablexia/screen/createuser/FormScreen.java index 8e429ef5870a045605a7eb8d0b811609e803f40e..89d224be78bd76a10abe5c067a8b1e51cb701c2a 100644 --- a/core/src/cz/nic/tablexia/screen/createuser/FormScreen.java +++ b/core/src/cz/nic/tablexia/screen/createuser/FormScreen.java @@ -99,17 +99,20 @@ public class FormScreen extends AbstractAutoloadTablexiaScreen<Void> { selector.addActor(steps[2] = ScaleUtil.createImageWidthPosition(getTexture("switch_right"), getStage().getWidth() * 0.035f, 0, 0)); selector.setPosition(getStage().getWidth() * 0.735f, getStage().getWidth() * 0.169f); group.addActor(selector); - DragSwitchListener sl =new DragSwitchListener(selector, getStage().getWidth() * 0.71f, getStage().getWidth() * 0.71f + getStage().getWidth() * 0.055f, getStage().getWidth() * 0.71f + getStage().getWidth() * 0.027f); + float middle = getStage().getWidth() * 0.71f + getStage().getWidth() * 0.027f; + DragSwitchListener sl =new DragSwitchListener(selector, getStage().getWidth() * 0.71f, getStage().getWidth() * 0.71f + getStage().getWidth() * 0.055f, middle); selector.addListener(sl); sl.setSwitchMovedListener(new DragSwitchListener.SwitchMovedListener() { @Override public void movedToStep(int step) { - for(Image im : steps){ + for (Image im : steps) { im.setVisible(false); } steps[step].setVisible(true); } }); + sl.switchToStep(1); + sl.setDisabledPoint(middle); // TODO pencil and stamp layers group.addActor(pen = ScaleUtil.createImageWidthPosition(getTexture("pencil_dropped"), getStage().getWidth() * 0.2f, getStage().getWidth() * 0.85f, getStage().getWidth() * -0.13f)); diff --git a/core/src/cz/nic/tablexia/util/listener/DragSwitchListener.java b/core/src/cz/nic/tablexia/util/listener/DragSwitchListener.java index 7ef828eafef9aca0ae657e9253e41ef599addf29..824909a6b33486b6e7f7257bad0cd61daaa226a7 100644 --- a/core/src/cz/nic/tablexia/util/listener/DragSwitchListener.java +++ b/core/src/cz/nic/tablexia/util/listener/DragSwitchListener.java @@ -17,12 +17,13 @@ public class DragSwitchListener extends InputListener { private final Actor actor; private SwitchMovedListener switchMovedListener; private SwitchSelectedListener switchSelectedListener; + private Float disabledPoint; - public DragSwitchListener(Actor actor, float minX, float maxX, float... snadPoints) { + public DragSwitchListener(Actor actor, float minX, float maxX, float... snapPoints) { this.actor = actor; this.minX = minX; this.maxX = maxX; - this.snadPoints = snadPoints == null ? new float[0] : snadPoints; + this.snadPoints = snapPoints == null ? new float[0] : snapPoints; } // TODO add callback method @@ -44,8 +45,8 @@ public class DragSwitchListener extends InputListener { float bx = actor.getX() + (x - grabX); if (bx > minX && bx < maxX) { actor.setPosition(bx, actor.getY()); - if(switchMovedListener != null){ - switchMovedListener.movedToStep(getStep()); + if (switchMovedListener != null) { + switchMovedListener.movedToStep(getStep(true)); } } event.stop(); @@ -54,15 +55,18 @@ public class DragSwitchListener extends InputListener { @Override public void touchUp(InputEvent event, float x, float y, int pointer, int button) { super.touchUp(event, x, y, pointer, button); - actor.addAction(Actions.moveTo(getClosestValue(), actor.getY())); - if(switchSelectedListener != null){ - switchSelectedListener.stepSelected(getStep()); + actor.addAction(Actions.moveTo(getClosestValue(false), actor.getY())); + if (switchMovedListener != null) { + switchMovedListener.movedToStep(getStep(false)); + } + if (switchSelectedListener != null) { + switchSelectedListener.stepSelected(getStep(false)); } event.stop(); } - private int getStep() { - float closest = getClosestValue(); + private int getStep(boolean useDisabled) { + float closest = getClosestValue(useDisabled); for (int i = 0; i < snadPoints.length; i++) { if (snadPoints[i] == closest) { @@ -72,12 +76,34 @@ public class DragSwitchListener extends InputListener { return closest == minX ? 0 : snadPoints.length + 1; } - private float getClosestValue() { + private float getX(int step) { + if (step == 0) { + return minX; + } else if (step <= snadPoints.length) { + return snadPoints[step - 1]; + } + return maxX; + } + + public void switchToStep(int step) { + actor.setX(getX(step)); + if (switchMovedListener != null) { + switchMovedListener.movedToStep(getStep(true)); + } + if (switchSelectedListener != null) { + switchSelectedListener.stepSelected(getStep(true)); + } + } + + private float getClosestValue(boolean useDisabled) { float left = minX; float right = maxX; // find closest snap points for (float snap : snadPoints) { + if (!useDisabled && disabledPoint != null && snap == disabledPoint.floatValue()) { + continue; + } if (snap > actor.getX() && ((snap - actor.getX()) < (right - actor.getX()))) { right = snap; } else if (snap <= actor.getX() && ((actor.getX() - snap) < (actor.getX() - left))) { @@ -92,6 +118,10 @@ public class DragSwitchListener extends InputListener { return switchMovedListener; } + public void setDisabledPoint(Float disabledPoint) { + this.disabledPoint = disabledPoint; + } + public void setSwitchMovedListener(SwitchMovedListener switchMovedListener) { this.switchMovedListener = switchMovedListener; }