/*******************************************************************************
* Copyright 2014 Rafael Garcia Moreno.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.bladecoder.engineeditor.ui.panels;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.ui.Cell;
import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.Widget;
public abstract class EditDialog extends Dialog {
private Cell<Widget> infoCell;
private Label infoLbl;
private Table centerPanel;
boolean cancelled = false;
private Skin skin;
public EditDialog(String title, Skin skin) {
super(title, skin);
this.skin = skin;
setResizable(false);
setKeepWithinStage(false);
infoLbl = new Label("", skin);
infoLbl.setWrap(true);
centerPanel = new Table(skin);
infoCell = getContentTable().add((Widget) infoLbl).prefWidth(200);
getContentTable().add(new ScrollPane(centerPanel, skin))
.maxHeight(Gdx.graphics.getHeight() * 0.8f)
.maxWidth(Gdx.graphics.getWidth() * 0.7f)
.minHeight(Gdx.graphics.getHeight() * 0.5f)
.minWidth(Gdx.graphics.getWidth() * 0.5f);
centerPanel.addListener(new InputListener() {
@Override
public void enter(InputEvent event, float x, float y, int pointer, com.badlogic.gdx.scenes.scene2d.Actor fromActor) {
// EditorLogger.debug("ENTER - X: " + x + " Y: " + y);
getStage().setScrollFocus(centerPanel);
}
});
button("OK", true);
button("Cancel", false);
// DISABLE the enter key because conflicts when newline in TextFields
// key(Keys.ENTER, true);
key(Keys.ESCAPE, false);
padBottom(10);
padLeft(10);
padRight(10);
}
public void addInputPanel(InputPanel i) {
getCenterPanel().row().fill().expandX();
getCenterPanel().add(i);
}
public void setVisible(InputPanel i, boolean v) {
i.setVisible(v);
Cell<InputPanel> c = getCenterPanel().getCell(i);
if(v) {
c.height(i.getPrefHeight());
} else {
c.height(1);
}
i.invalidateHierarchy();
}
public Skin getSkin() {
return skin;
}
public Table getCenterPanel() {
return centerPanel;
}
public void setInfo(String text) {
infoLbl.setText(text);
}
public void setInfoWidget(Actor c) {
infoCell.setActor(null);
infoCell.setActor(c).fill();
}
public void setTitle(String title) {
getTitleLabel().setText(title);
}
public boolean isCancel() {
return cancelled;
}
@Override
protected void result(Object object) {
if (((boolean) object) == true) {
if (validateFields()) {
ok();
} else {
cancel();
}
} else {
cancelled = true;
}
}
abstract protected boolean validateFields();
abstract protected void ok();
}