package org.multiverseking.gui.control;
import org.multiverseking.gui.DialogWindowListener;
import com.jme3.input.controls.ActionListener;
import com.jme3.math.Vector2f;
import tonegod.gui.controls.lists.Spinner;
import tonegod.gui.controls.windows.Window;
import tonegod.gui.core.Screen;
/**
*
* @author roah
*/
public class DialogWindow extends EditorWindow {
protected final DialogWindowListener listener;
private Window popup;
private boolean enabled = true;
public DialogWindow(Screen screen, String WindowName, DialogWindowListener listener) {
super(screen, null, WindowName);
this.listener = listener;
}
public final void show(boolean addCancel) {
addButtonList("ConfirmBtn", (addCancel ? new String[]{"Confirm", "Cancel"} : new String[]{"Confirm"}), HAlign.right, ButtonType.TEXT);
screen.getApplication().getInputManager().addListener(dialogPopupListener,
(addCancel ? new String[]{"confirmDialog", "cancelDialog"} : new String[]{"confirmDialog"}));
super.show(null, null);
}
public void addInputText(String labelName) {
addTextField(null, "Name", null, HAlign.left, 1);
}
public void addButton(String labelName) {
addButtonField(null, labelName, HAlign.full, ButtonType.TEXT);
}
public void addSpinnerField(String labelName, int[] value) {
addSpinnerField(null, labelName, value, HAlign.left);
}
public void addLabelField(String labelText){
addLabelField(null, labelText, HAlign.left);
}
public void showText(String string) {
addLabelField(null, string, HAlign.left);
}
@Override
protected void onButtonTrigger(String labelName) {
if (labelName.equals("Confirm")) {
listener.onDialogTrigger(name, true);
} else if (labelName.equals("Cancel")) {
listener.onDialogTrigger(name, false);
}
}
@Override
public void onPressCloseAndHide() {
listener.onDialogTrigger(name, false);
}
@Override
public void removeFromScreen() {
removeMapping();
super.removeFromScreen();
}
private void removeMapping() {
screen.getApplication().getInputManager().removeListener(dialogPopupListener);
}
private final ActionListener dialogPopupListener = new ActionListener() {
public void onAction(String name, boolean isPressed, float tpf) {
if (enabled) {
if (name.equals("confirmDialog") && !isPressed) {
onButtonTrigger("Confirm");
} else if (name.equals("cancelDialog") && !isPressed) {
onButtonTrigger("Cancel");
}
}
}
};
@Override
protected void onTextFieldInput(String UID, String input, boolean triggerOn) {
if (triggerOn) {
onButtonTrigger("Confirm");
} else {
onButtonTrigger("Cancel");
}
}
@Override
public boolean isVisible() {
if (getWindow() != null) {
return getWindow().getIsVisible();
} else {
return false;
}
}
public String getTextInput(String name) {
return getTextField(null, name).getText();
}
public int getSpinnerInput(String name) {
return getSpinnerField(null, name).getSelectedIndex();
}
@Override
public void hide() {
if (window != null && popup != null) {
popup.getElementParent().removeChild(popup);
}
super.hide();
}
public void popupBox(String message) {
if (popup == null) {
popup = new Window(screen, getUID() + "popupBox", new Vector2f(0, getWindow().getHeight()), new Vector2f(getWindow().getWidth(), 25));
popup.removeAllChildren();
getWindow().addChild(popup);
} else if (!popup.getIsVisible()) {
getWindow().addChild(popup);
}
popup.setText(message);
}
public void enable(boolean enabled) {
this.enabled = enabled;
}
@Override
protected void onNumericFieldInput(Integer input) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
protected void onSelectBoxFieldChange(Enum value) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
protected void onSpinnerChange(String sTrigger, int currentIndex, Spinner.ChangeType type) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}