package com.iambookmaster.client.quick;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.iambookmaster.client.Styles;
import com.iambookmaster.client.beans.AbstractParameter;
import com.iambookmaster.client.beans.Battle;
import com.iambookmaster.client.editor.ParametersCalculationWidget;
import com.iambookmaster.client.editor.SimpleParameterListBox;
import com.iambookmaster.client.locale.AppConstants;
import com.iambookmaster.client.locale.AppLocale;
import com.iambookmaster.client.model.Model;
public class QuickBattleEditor extends QuickAbstractParameterEditor {
private static final AppConstants appConstants = AppLocale.getAppConstants();
private Battle battle;
private CheckBox oneTurnBattle;
private CheckBox attactDefence;
private CheckBox differenceIsDamage;
private SimpleParameterListBox vitalResource;
private ParametersCalculationWidget attack;
private ParametersCalculationWidget defense;
private ParametersCalculationWidget damage;
private ListBox fatal;
public QuickBattleEditor(Model mod) {
super(mod);
}
@Override
public String getEditorName() {
return appConstants.quickBattleEditor();
}
@Override
protected int getGridWidgetsCount() {
return 5;
}
@Override
public Widget getTail() {
vitalResource = new SimpleParameterListBox(model,true);
attack = new ParametersCalculationWidget(appConstants.battleAttack(),model,true,false);
defense = new ParametersCalculationWidget(appConstants.battleDefence(),model,true,false);
defense.addStyleName(Styles.BORDER);
damage = new ParametersCalculationWidget(appConstants.battleDamage(),model,true,false);
ClickHandler handler = new ClickHandler() {
public void onClick(ClickEvent event) {
if (event.getSource()==oneTurnBattle) {
battle.setOneTurnBattle(oneTurnBattle.getValue());
} else if (event.getSource()==attactDefence) {
battle.setAttackDefense(attactDefence.getValue());
} else if (event.getSource()==differenceIsDamage) {
battle.setDifferenceIsDamage(differenceIsDamage.getValue());
}
updateParameter(event.getSource());
applyControls();
}
};
ChangeHandler changeHandler = new ChangeHandler() {
public void onChange(ChangeEvent event) {
if (event != null) {
if (event.getSource()==vitalResource) {
battle.setVital(vitalResource.getSelectedParameter());
} else if (event.getSource()==fatal) {
battle.setFatal(fatal.getSelectedIndex());
}
}
updateParameter(null);
}
};
attack.addChangeHandler(changeHandler);
defense.addChangeHandler(changeHandler);
damage.addChangeHandler(changeHandler);
oneTurnBattle = new CheckBox();
oneTurnBattle.addClickHandler(handler);
oneTurnBattle.setTitle(appConstants.quickBattleOneTurnTitle());
addWidgetToGrid(oneTurnBattle, appConstants.quickBattleOneTurn());
attactDefence = new CheckBox();
attactDefence.addClickHandler(handler);
attactDefence.setTitle(appConstants.quickBattleAttacDefenceTitle());
addWidgetToGrid(attactDefence, appConstants.quickBattleAttacDefence());
differenceIsDamage = new CheckBox();
differenceIsDamage.addClickHandler(handler);
differenceIsDamage.setTitle(appConstants.quickBattleDefferenceIsDamageTitle());
addWidgetToGrid(differenceIsDamage, appConstants.quickBattleDefferenceIsDamage());
vitalResource.addChangeHandler(changeHandler);
vitalResource.setTitle(appConstants.quickBattleVitalTitle());
addWidgetToGrid(vitalResource, appConstants.quickBattleVital());
fatal = new ListBox();
fatal.setTitle(appConstants.battleFatalTitle());
fatal.addItem(appConstants.battleFatalNone(), Battle.FATAL_NONE_STR);
fatal.addItem(appConstants.battleFatalDead(), Battle.FATAL_DEAD_STR);
fatal.addItem(appConstants.battleFatalNormal(), Battle.FATAL_NORMAL_STR);
fatal.addChangeHandler(changeHandler);
addWidgetToGrid(fatal, appConstants.quickBattleFatal());
VerticalPanel panel = new VerticalPanel();
panel.setSize("100%", "100%");
panel.add(attack);
panel.setCellWidth(attack,"100%");
panel.add(defense);
panel.setCellWidth(defense,"100%");
panel.add(damage);
panel.setCellWidth(damage,"100%");
return panel;
}
@Override
public void open(AbstractParameter object) {
super.open(object);
battle = (Battle) object;
if (battle.getVital()==null) {
battle.setVital(vitalResource.getSelectedParameter());
} else {
vitalResource.setSelectedParameter(battle.getVital());
}
oneTurnBattle.setValue(battle.isOneTurnBattle());
attactDefence.setValue(battle.isAttackDefense());
differenceIsDamage.setValue(battle.isDifferenceIsDamage());
attack.apply(battle.getAttack());
defense.apply(battle.getDefense());
damage.apply(battle.getDamage());
fatal.setSelectedIndex(battle.getFatal());
applyControls();
}
private void applyControls() {
if (battle.isOneTurnBattle()) {
defense.setEnabled(false);
damage.setEnabled(false);
fatal.setEnabled(false);
differenceIsDamage.setEnabled(false);
attactDefence.setEnabled(false);
} else {
defense.setEnabled(battle.isAttackDefense());
damage.setEnabled(battle.isDifferenceIsDamage()==false);
fatal.setEnabled(true);
differenceIsDamage.setEnabled(true);
attactDefence.setEnabled(true);
}
}
}