package com.iambookmaster.client; 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.dom.client.Style.Overflow; 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.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseUpEvent; import com.google.gwt.event.dom.client.MouseUpHandler; 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.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; 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.IPhoneViewerBook; import com.iambookmaster.client.iphone.IPhoneViewerOldBook; import com.iambookmaster.client.iphone.data.IPhoneDataService; import com.iambookmaster.client.iphone.data.IPhoneFileBean; import com.iambookmaster.client.locale.AppConstants; import com.iambookmaster.client.locale.AppLocale; import com.iambookmaster.client.model.Model; import com.iambookmaster.client.player.PlayerListener; import com.iambookmaster.client.player.PlayerStyles; public class IPadPlayerWrapper extends VerticalPanel implements EditorPlayer { static AppConstants appConstants = AppLocale.getAppConstants(); static final FileExchangeClient fileExchange = new FileExchangeClient(); final IPhoneViewerBook player; private AbsolutePanel canvas; private AbsolutePanel wrapper; private Image image1; private Image image2; private Image rotate; private int height; private int width; private boolean activated; Model model; private PlayerMasterMenu locationMenuPanel; protected String lastGameState; protected Timer timer; private int deviceWidth; private int deviceHeight; private int scale=70; public IPadPlayerWrapper(Model md, PlayerListener listener, int deviceWidth, int deviceHeight) { this.model = md; this.deviceWidth = deviceWidth; this.deviceHeight = deviceHeight; this.height = deviceHeight; this.width = deviceWidth; setSize("100%", "100%"); setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); canvas = new AbsolutePanel(); wrapper = new AbsolutePanel(); wrapper.setSize("100%", "100%"); wrapper.getElement().getStyle().setOverflow(Overflow.HIDDEN); add(wrapper); setCellVerticalAlignment(wrapper, HasVerticalAlignment.ALIGN_TOP); wrapper.add(canvas,0,0); image1 = new Image(); image1.addMouseUpHandler(new MouseUpHandler() { public void onMouseUp(MouseUpEvent event) { clearTimer(); } }); image1.addMouseOutHandler(new MouseOutHandler() { public void onMouseOut(MouseOutEvent event) { clearTimer(); } }); image1.addMouseDownHandler(new MouseDownHandler() { public void onMouseDown(MouseDownEvent event) { startTimer(false); } }); canvas.add(image1,0,0); image2 = new Image(); image2.addMouseUpHandler(new MouseUpHandler() { public void onMouseUp(MouseUpEvent event) { clearTimer(); } }); image2.addMouseOutHandler(new MouseOutHandler() { public void onMouseOut(MouseOutEvent event) { clearTimer(); } }); image2.addMouseDownHandler(new MouseDownHandler() { public void onMouseDown(MouseDownEvent event) { startTimer(true); } }); canvas.add(image2,0,0); player = new IPhoneViewerBook() { @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(),43,43); 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) { height = deviceHeight; width = deviceWidth; image1.getElement().getStyle().setProperty("cursor", "url(images/cursor-left.ico),default"); image1.setTitle(appConstants.playerIphonePageLeft()); image2.getElement().getStyle().setProperty("cursor", "url(images/cursor-right.ico),default"); image2.setTitle(appConstants.playerIphonePageRight()); image1.setUrl(Images.IPAD_HORIZONTAL_LEFT); image2.setUrl(Images.IPAD_HORIZONTAL_RIGHT); canvas.setWidgetPosition(image2,554,0); // canvas.add(player.getLayout(),43,43); } else { height = deviceWidth; width = deviceHeight; image1.getElement().getStyle().setProperty("cursor", "url(images/cursor-left.ico),default"); image1.setTitle(appConstants.playerIphonePageLeft()); image2.getElement().getStyle().setProperty("cursor", "url(images/cursor-right.ico),default"); image2.setTitle(appConstants.playerIphonePageRight()); image1.setUrl(Images.IPAD_VERTICAL_BOTTOM); image2.setUrl(Images.IPAD_VERTICAL_TOP); canvas.setWidgetPosition(image2,426,0); // canvas.add(player.getLayout(),43,43); } canvas.setSize(IPhoneViewerOldBook.toPixels(width+84), IPhoneViewerOldBook.toPixels(height+84)); player.getLayout().setSize(IPhoneViewerOldBook.toPixels(width), IPhoneViewerOldBook.toPixels(height)); scale(scale); player.onResize(); } public void deactivate() { // TODO Auto-generated method stub } 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(model, new IPhoneDataService() { @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) { } @Override public void loadSingleFile(String name, ScalarCallback<String> callback) { } }, new IPhonePlayerListener() { public boolean onParagraph(Paragraph paragraph) { return true; } public boolean onOpenPlayerList() { return true; } public boolean onOpenFeedback() { return true; } }); } public void close() { player.close(); } public void start() { } public boolean isSupportRotation() { return true; } public void rotate() { applyLayout(height == deviceWidth); } public void editCurrentParagraph() { model.editParagraph(player.getPlayerState().getCurrentParagraph(), null); } public void restart() { lastGameState=null; player.getPlayer().start(); } public void save() { if (lastGameState != null) { fileExchange.saveFile(lastGameState,IPadPlayerWrapper.appConstants.playerSavedGame()); } } public void load() { String text = fileExchange.loadFile(IPadPlayerWrapper.appConstants.playerRestoreGame()); if (text != null) { player.getPlayer().restoreGame(text); } } public boolean isSupportSaveAndLoad() { return fileExchange.checkApplet(); } public void goCurrentParagraph() { player.getPlayer().setCurrentParagraph(model.getCurrentParagraph()); } public boolean isSupportScale() { return true; } public void scale(int scale) { this.scale= scale; //1000 int t = (height-height*scale/100)/2; int l = (width-width*scale/100)/2; switch (scale) { case 50: canvas.setStyleName(Styles.ZOOM50); break; case 60: canvas.setStyleName(Styles.ZOOM60); break; case 70: canvas.setStyleName(Styles.ZOOM70); break; case 80: canvas.setStyleName(Styles.ZOOM80); break; case 90: canvas.setStyleName(Styles.ZOOM90); break; default: canvas.setStyleName(Styles.ZOOM_NO); } wrapper.setWidgetPosition(canvas,-l,-t); } public boolean isSupportModel() { return true; } public void loadModule() { } }