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.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Widget;
import com.iambookmaster.client.beans.AbstractParameter;
import com.iambookmaster.client.beans.Alchemy;
import com.iambookmaster.client.beans.Parameter;
import com.iambookmaster.client.common.NumberTextBox;
import com.iambookmaster.client.common.SimpleAbstractParameterListBox;
import com.iambookmaster.client.editor.DiceValueWidget;
import com.iambookmaster.client.locale.AppConstants;
import com.iambookmaster.client.locale.AppLocale;
import com.iambookmaster.client.model.Model;
public class QuickAlchemyEditor extends QuickAbstractParameterEditor {
private static final AppConstants appConstants = AppLocale.getAppConstants();
private Alchemy alchemy;
private ListBox battle;
private SimpleAbstractParameterListBox<Parameter> from;
private SimpleAbstractParameterListBox<Parameter> to;
private NumberTextBox fromValue;
private DiceValueWidget toValue;
private CheckBox onDemand;
private CheckBox weapon;
private SimpleAbstractParameterListBox<Parameter> battleLimit;
private CheckBox oneTimePerRound;
private CheckBox overflowControl;
public QuickAlchemyEditor(Model mod) {
super(mod);
}
@Override
public String getEditorName() {
return appConstants.quickAlchemyTitle();
}
@Override
protected int getGridWidgetsCount() {
return 10;
}
@Override
public Widget getTail() {
ChangeHandler changeHandler = new ChangeHandler() {
public void onChange(ChangeEvent event) {
if (event.getSource()==from) {
alchemy.setFrom(from.getSelectedParameter());
} else if (event.getSource()==to) {
alchemy.setTo(to.getSelectedParameter());
} else if (event.getSource()==toValue) {
alchemy.setToValue(toValue.getDiceValue());
} else if (event.getSource()==fromValue) {
alchemy.setFromValue(fromValue.getIntegerValue());
} else if (event.getSource()==battleLimit) {
alchemy.setBattleLimit(battleLimit.getSelectedParameter());
}
updateParameter(event.getSource());
}
};
ClickHandler clickHandler = new ClickHandler() {
public void onClick(ClickEvent event) {
if (event.getSource()==weapon) {
alchemy.setWeapon(weapon.getValue());
} else if (event.getSource()==onDemand) {
alchemy.setOnDemand(onDemand.getValue());
} else if (event.getSource()==battle) {
alchemy.setPlace(battle.getSelectedIndex());
} else if (event.getSource()==oneTimePerRound) {
alchemy.setOneTimePerRound(oneTimePerRound.getValue());
} else if (event.getSource()==overflowControl) {
alchemy.setOverflowControl(overflowControl.getValue());
}
updateParameter(event.getSource());
}
};
//from
from = new SimpleAbstractParameterListBox<Parameter>(Parameter.class,model,false);
from.addChangeHandler(changeHandler);
from.setTitle(appConstants.alchemyFromTitle());
addWidgetToGrid(from, appConstants.quickAlchemyFrom());
//from Value
fromValue = new NumberTextBox();
fromValue.addChangeHandler(changeHandler);
fromValue.setMaxLength(2);
fromValue.setVisibleLength(3);
fromValue.setRange(0,99);
addWidgetToGrid(fromValue, appConstants.quickAlchemyFromValue());
//to
to = new SimpleAbstractParameterListBox<Parameter>(Parameter.class,model,false);
to.addChangeHandler(changeHandler);
to.setTitle(appConstants.alchemyToTitle());
addWidgetToGrid(to, appConstants.quickAlchemyTo());
//to Value
HorizontalPanel horizontalPanel = new HorizontalPanel();
toValue = new DiceValueWidget(horizontalPanel);
addWidgetToGrid(horizontalPanel, appConstants.quickAlchemyToValue());
//limit control
overflowControl = new CheckBox();
overflowControl.addClickHandler(clickHandler);
if (model.getSettings().isOverflowControl()) {
overflowControl.setTitle(appConstants.quickAlchemyNoOverflowControlTitle());
addWidgetToGrid(overflowControl, appConstants.calculationNoOverflowControl());
} else {
overflowControl.setTitle(appConstants.quickAlchemyOverflowControlTitle());
addWidgetToGrid(overflowControl, appConstants.calculationOverflowControl());
}
//battle
battle = new ListBox();
battle.addItem(appConstants.quickAlchemyPeace(),String.valueOf(Alchemy.PLACE_PEACE));
battle.addItem(appConstants.quickAlchemyBattle(),String.valueOf(Alchemy.PLACE_BATTLE));
battle.addItem(appConstants.quickAlchemyBoth(),String.valueOf(Alchemy.PLACE_BOTH));
battle.addClickHandler(clickHandler);
battle.setTitle(appConstants.quickAlchemyBattleTitle());
addWidgetToGrid(battle, appConstants.quickAlchemyPlace());
//on-demand
onDemand = new CheckBox();
onDemand.addClickHandler(clickHandler);
onDemand.setTitle(appConstants.quickAlchemyOnDemandTitle());
addWidgetToGrid(onDemand, appConstants.quickAlchemyOnDemand());
//on-demand
weapon = new CheckBox();
weapon.addClickHandler(clickHandler);
weapon.setTitle(appConstants.quickAlchemyWeapondTitle());
addWidgetToGrid(weapon, appConstants.quickAlchemyWeapond());
//limit in battle
battleLimit = new SimpleAbstractParameterListBox<Parameter>(Parameter.class,model,true);
battleLimit.addChangeHandler(changeHandler);
battleLimit.setTitle(appConstants.alchemyBattleLimitTitle());
addWidgetToGrid(battleLimit, appConstants.alchemyBattleLimit());
//one time per round
oneTimePerRound = new CheckBox();
oneTimePerRound.addClickHandler(clickHandler);
oneTimePerRound.setTitle(appConstants.quickAlchemyOneTimePerRoundTitle());
addWidgetToGrid(oneTimePerRound, appConstants.quickAlchemyOneTimePerRound());
return null;
}
public void open(AbstractParameter object) {
super.open(object);
alchemy = (Alchemy) object;
battle.setSelectedIndex(alchemy.getPlace());
if (alchemy.getFrom()==null) {
alchemy.setFrom(from.getSelectedParameter());
} else {
from.setSelectedParameter(alchemy.getFrom());
}
if (alchemy.getTo()==null) {
alchemy.setTo(to.getSelectedParameter());
} else {
to.setSelectedParameter(alchemy.getTo());
}
fromValue.setValue(alchemy.getFromValue());
toValue.apply(alchemy.getToValue());
onDemand.setValue(alchemy.isOnDemand());
weapon.setValue(alchemy.isWeapon());
oneTimePerRound.setValue(alchemy.isOneTimePerRound());
battleLimit.setSelectedParameter(alchemy.getBattleLimit());
overflowControl.setValue(alchemy.isOverflowControl());
}
}