package com.iambookmaster.client.iphone; import java.util.ArrayList; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Label; import com.iambookmaster.client.common.Base64Coder; import com.iambookmaster.client.iphone.common.IPhoneButton; import com.iambookmaster.client.iphone.images.IPhoneImages; import com.iambookmaster.client.iphone.images.IPhoneStyles; import com.iambookmaster.client.locale.AppConstants; import com.iambookmaster.client.locale.AppLocale; import com.iambookmaster.client.player.PlayerState; public class IPhoneDebugPanel { private static final AppConstants appConstants = AppLocale.getAppConstants(); private static final IPhoneStyles css = IPhoneImages.INSTANCE.css(); private PlayerState playerState; private IPhoneDebugPanelListener owner; private ClickHandler back; private IPhoneViewListenerAdapter listener; private ClickHandler stepBack; private ClickHandler saveGame; private ArrayList<String> states = new ArrayList<String>(); private ClickHandler killAll; public IPhoneDebugPanel(PlayerState ps) { this.playerState = ps; listener = new IPhoneViewListenerAdapter(){ @Override public void back() { } @Override public void redraw(IPhoneCanvas viewer) { draw(viewer,false,false); } @Override public void forward() { } @Override public void drawn() { } }; back = new ClickHandler() { public void onClick(ClickEvent event) { owner.close(); } }; stepBack = new ClickHandler() { public void onClick(ClickEvent event) { playerState.goBack(); owner.close(); } }; saveGame = new ClickHandler() { public void onClick(ClickEvent event) { states.add(playerState.toJSON()); owner.close(); } }; killAll = new ClickHandler() { public void onClick(ClickEvent event) { playerState.killAllOpponents(); owner.close(); } }; } private void draw(IPhoneCanvas canvas,boolean animate,boolean leftToRight) { // this.canvas = canvas; canvas.setListener(listener); if (animate) { canvas.clearWithAnimation(leftToRight); } else { canvas.clear(); } Label label; label = new Label("Debug Mode"); label.setStyleName(css.bookName()); canvas.add(label); if (playerState.isHasBackState()) { addButton(canvas, "На шаг назад",stepBack); } addButton(canvas, "Сохранить игру",saveGame); if (playerState.isBattleActive()) { addButton(canvas, "Убить всех",killAll); } int count = states.size(); for (int i = 0; i < count; i++) { addButton(canvas, "Игра "+i,new RestoreGameClickHandler(i)); } addButton(canvas, appConstants.iphoneThankyouCancel(),back); canvas.done(); } private void addButton(IPhoneCanvas canvas, String title, ClickHandler handler) { IPhoneButton button = new IPhoneButton(title,handler); canvas.add(button); canvas.addClickHandler(button, handler); if (canvas.isVertical()) { button.setWidth(IPhoneViewerOldBook.toPixels(canvas.getClientWidth()-30)); } } public void show(IPhoneDebugPanelListener owner, IPhoneCanvas canvas,boolean leftToRight) { this.owner = owner; draw(canvas,true,leftToRight); } public class RestoreGameClickHandler implements ClickHandler { private int index; public RestoreGameClickHandler(int index) { this.index = index; } public void onClick(ClickEvent event) { playerState.restoreState(Base64Coder.encodeString(states.get(index))); owner.close(); } } }