package org.ripple.power.ui.projector;
import java.awt.Dimension;
import java.awt.Window;
import javax.swing.JPanel;
import org.ripple.power.config.LSystem;
import org.ripple.power.txns.Updateable;
import org.ripple.power.ui.RPDialogTool;
import org.ripple.power.ui.UIConfig;
import org.ripple.power.ui.graphics.geom.RectBox;
import org.ripple.power.ui.projector.core.LHandler;
import org.ripple.power.ui.projector.core.graphics.Screen;
import org.ripple.power.ui.view.WaitDialog;
import org.ripple.power.wallet.WalletItem;
public class UIScene extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private static UIScene lock = null;
private RPDialogTool tool;
private LHandler handler;
private Updateable exit;
public static UIScene showDialog(String text, int width, int height,
Screen screen, Window parent, WalletItem item, boolean show) {
if (show) {
synchronized (UIScene.class) {
if (lock == null) {
return (lock = new UIScene(text, width, height, screen,
parent, item));
} else {
if (lock != null) {
lock.closeDialog();
lock = new UIScene(text, width, height, screen, parent,
item);
}
return lock;
}
}
}
return null;
}
public static UIScene showDialog(String text, int width, int height,
Screen screen, Window parent, WalletItem item) {
return showDialog(text, width, height, screen, parent, item, true);
}
public RPDialogTool get() {
return tool;
}
private void close() {
if (handler != null) {
if (handler.getView() != null) {
handler.getView().endPaint();
handler.getView().setRunning(false);
LSystem.destroy();
}
}
if (exit != null) {
exit.action(this);
}
}
public void closeDialog() {
synchronized (WaitDialog.class) {
close();
tool.close();
lock = null;
}
}
public UIScene(String text, final int width, final int height,
final Screen screen, Window parent, WalletItem item) {
LSystem.screenRect = new RectBox(0, 0, width, height);
Dimension dim = new Dimension(width, height);
setPreferredSize(dim);
setSize(dim);
setLayout(null);
setBackground(UIConfig.dialogbackground);
this.tool = RPDialogTool.show(parent, text, this, -1, -1, false,
LSystem.MINUTE);
Updateable update = new Updateable() {
@Override
public void action(Object o) {
tool.setClose(new Updateable() {
@Override
public void action(Object o) {
close();
}
});
UIScene.this.handler = new LHandler(tool.getDialog(), width,
height);
UIScene.this.handler.setScreen(screen);
UIView view = new UIView(handler);
add(view);
view.setFPS(LSystem.DEFAULT_MAX_FPS);
view.createScreen();
view.setShowFPS(false);
view.mainLoop();
view.startPaint();
}
};
LSystem.postThread(update);
}
public Updateable getExit() {
return exit;
}
public void setExit(Updateable exit) {
this.exit = exit;
}
}