Skip to content
Snippets Groups Projects
Commit 4c286536 authored by Luboš Horáček's avatar Luboš Horáček
Browse files

#22 Generic switch listener

parent c87d53a9
Branches
Tags
No related merge requests found
......@@ -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));
......
......@@ -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;
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment