package com.github.czyzby.lml.vis.parser.impl.action;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.Disableable;
import com.github.czyzby.lml.parser.impl.action.DefaultStageAttacher;
import com.kotcrab.vis.ui.widget.VisDialog;
import com.kotcrab.vis.ui.widget.VisWindow;
/** Expands default stage attacher functionality with the ability to attach {@link VisDialog}s and {@link VisWindow}s.
*
* @author MJ */
public class VisStageAttacher extends DefaultStageAttacher {
@Override
public void attachToStage(final Actor actor, final Stage stage) {
if (actor instanceof VisDialog) {
((VisDialog) actor).show(stage);
} else if (actor instanceof VisWindow) {
stage.addActor(((VisWindow) actor).fadeIn());
}
super.attachToStage(actor, stage);
}
/** A specialized {@link ClickListener} which shows a {@link VisWindow} each time a non-disabled actor is clicked.
*
* @author MJ */
public static class PopupAttacher extends ClickListener {
private final VisWindow visWindow;
private final Actor actor;
public PopupAttacher(final VisWindow visWindow, final Actor actor) {
this.visWindow = visWindow;
this.actor = actor;
}
@Override
public void clicked(final InputEvent event, final float x, final float y) {
if (actor instanceof Disableable && ((Disableable) actor).isDisabled()) {
return;
}
actor.getStage().addActor(visWindow.fadeIn());
}
}
}