package com.iambookmaster.client;
import java.util.ArrayList;
import com.google.code.gwt.database.client.service.DataServiceException;
import com.google.code.gwt.database.client.service.ListCallback;
import com.google.code.gwt.database.client.service.ScalarCallback;
import com.google.code.gwt.database.client.service.VoidCallback;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.iambookmaster.client.beans.Paragraph;
import com.iambookmaster.client.common.EditorPlayer;
import com.iambookmaster.client.common.FileExchangeClient;
import com.iambookmaster.client.iphone.IPhonePlayerListener;
import com.iambookmaster.client.iphone.IPhoneViewerOldBook;
import com.iambookmaster.client.iphone.data.IPhoneDataService;
import com.iambookmaster.client.iphone.data.IPhoneFileBean;
import com.iambookmaster.client.iphone.urq.IPhoneURQ;
import com.iambookmaster.client.locale.AppConstants;
import com.iambookmaster.client.locale.AppLocale;
import com.iambookmaster.client.locale.AppMessages;
import com.iambookmaster.client.model.Model;
import com.iambookmaster.client.player.PlayerListener;
import com.iambookmaster.client.player.PlayerStyles;
public class IPhoneURQWrapper extends VerticalPanel implements EditorPlayer {
static AppConstants appConstants = AppLocale.getAppConstants();
static AppMessages appMessages = AppLocale.getAppMessages();
static final FileExchangeClient fileExchange = new FileExchangeClient();
static final int WIDHT = 320;
private static final int HEIGHT = 480;
final IPhoneURQ player;
private AbsolutePanel canvas;
private Image image1;
private Image image2;
private Image rotate;
int width= WIDHT;
private int height= HEIGHT;
private boolean activated;
private PlayerMasterMenu locationMenuPanel;
protected String lastGameState;
protected Timer timer;
public IPhoneURQWrapper(PlayerListener listener, int deviceWidth, int deviceHheight) {
setSize("100%", "100%");
canvas = new AbsolutePanel();
canvas.setSize("729px", "729px");
add(canvas);
image1 = new Image();
image1.getElement().getStyle().setProperty("cursor", "url(images/cursor-up.ico),default");
image1.setTitle(appConstants.playerIphoneScrollUp());
image1.addMouseDownHandler(new MouseDownHandler() {
public void onMouseDown(MouseDownEvent event) {
player.scrollDown();
}
});
canvas.add(image1,0,0);
image2 = new Image();
image2.getElement().getStyle().setProperty("cursor", "url(images/cursor-down.ico),default");
image2.setTitle(appConstants.playerIphoneScrollDown());
image2.addMouseDownHandler(new MouseDownHandler() {
public void onMouseDown(MouseDownEvent event) {
player.scrollUp();
}
});
canvas.add(image2,0,0);
player = new IPhoneURQ() {
@Override
protected int getClientWidth() {
return width;
}
@Override
protected int getClientHeight() {
return height;
}
};
try {
player.init();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
canvas.add(player.getLayout(),0,0);
rotate = new Image(Images.IPHONE_SETTINGS);
rotate.setStyleName(Styles.CLICKABLE);
rotate.setTitle(appConstants.playerIphoneOptions());
rotate.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
locationMenuPanel.setPopupPosition(Event.getCurrentEvent().getClientX(),Event.getCurrentEvent().getClientY());
locationMenuPanel.show();
}
});
canvas.add(rotate,0,0);
applyLayout(true);
locationMenuPanel = new PlayerMasterMenu(this);
}
// private void startTimer(final boolean direction) {
// timer = new Timer() {
// @Override
// public void run() {
// if (direction) {
// player.scrollDown();
// } else {
// player.scrollUp();
// }
// }
// };
// timer.scheduleRepeating(200);
// }
//
// private void clearTimer() {
// if (timer != null) {
// timer.cancel();
// timer = null;
// }
// }
void applyLayout(boolean horizontal) {
if (horizontal) {
image1.setUrl(Images.IPHONE_HORIZONTAL_TOP);
image2.setUrl(Images.IPHONE_HORIZONTAL_BOTTOM);
width = HEIGHT;
height = WIDHT;
canvas.setWidgetPosition(image2,-1,190);
canvas.setWidgetPosition(player.getLayout(),131,30);
} else {
image1.setUrl(Images.IPHONE_VERTICAL_LEFT);
image2.setUrl(Images.IPHONE_VERTICAL_RIGHT);
width = WIDHT;
height = HEIGHT;
canvas.setWidgetPosition(image2,0,363);
canvas.setWidgetPosition(player.getLayout(),30,131);
}
player.getLayout().setSize(IPhoneViewerOldBook.toPixels(width), IPhoneViewerOldBook.toPixels(height));
player.onResize();
}
public void deactivate() {
}
public void activate() {
if (activated==false) {
activated = true;
DeferredCommand.addCommand(new Command() {
public void execute() {
player.setStyleName(PlayerStyles.IPHONE);
loadPlayer();
}
});
}
}
private void loadPlayer() {
player.loadPlayer(new IPhoneDataService() {
private String data;
@Override
public void storeState(String state) {
lastGameState=state;
}
@Override
public void loadLastState(Model model, ScalarCallback<String> callback) {
}
@Override
public void donate(VoidCallback callback) {
}
@Override
public void calculateDonate(ScalarCallback<String> callback) {
}
@Override
public void selectAvailableFiles(String exention, ListCallback<IPhoneFileBean> callback) {
data = fileExchange.loadFile(appConstants.loadURQ());
if (data == null) {
callback.onFailure(new DataServiceException("Canceled"));
} else {
ArrayList<IPhoneFileBean> result = new ArrayList<IPhoneFileBean>(1);
result.add(createFile(""));
callback.onSuccess(result);
}
}
@Override
public void loadSingleFile(String name, ScalarCallback<String> callback) {
// TODO Auto-generated method stub
}
}, new IPhonePlayerListener() {
public boolean onParagraph(Paragraph paragraph) {
return true;
}
public boolean onOpenPlayerList() {
return true;
}
public boolean onOpenFeedback() {
return true;
}
});
}
private native IPhoneFileBean createFile(String name)/*-{
var f = {};
f.name = name;
return f;
}-*/;
public void close() {
player.close();
}
public void start() {
loadModule();
}
public boolean isSupportRotation() {
return true;
}
public void rotate() {
applyLayout(width == IPhoneURQWrapper.WIDHT);
}
public void editCurrentParagraph() {
}
public void restart() {
lastGameState=null;
player.restart();
}
public void save() {
if (lastGameState != null) {
fileExchange.saveFile(lastGameState,IPhoneURQWrapper.appConstants.playerSavedGame());
}
}
public void load() {
String text = fileExchange.loadFile(IPhoneURQWrapper.appConstants.playerRestoreGame());
if (text != null) {
player.restoreGame(text);
}
}
public boolean isSupportSaveAndLoad() {
return fileExchange.checkApplet();
}
public void goCurrentParagraph() {
}
public boolean isSupportScale() {
return false;
}
public void scale(int scale) {
}
public boolean isSupportModel() {
return false;
}
public void loadModule() {
}
}