package com.iambookmaster.client.quick;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
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.Window;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.iambookmaster.client.Images;
import com.iambookmaster.client.Styles;
import com.iambookmaster.client.beans.Modificator;
import com.iambookmaster.client.beans.ObjectBean;
import com.iambookmaster.client.beans.ParagraphConnection;
import com.iambookmaster.client.beans.Parameter;
import com.iambookmaster.client.common.ColorPicker;
import com.iambookmaster.client.common.SimpleAbstractParameterListBox;
import com.iambookmaster.client.common.SimpleObjectsListBox;
import com.iambookmaster.client.editor.DiceValueWidget;
import com.iambookmaster.client.editor.ModelPersist;
import com.iambookmaster.client.locale.AppConstants;
import com.iambookmaster.client.locale.AppLocale;
import com.iambookmaster.client.model.Model;
import com.iambookmaster.client.model.ParagraphConnectionListener;
public class QuickViewParagraphConnectionEditor extends VerticalPanel implements QuickViewWidget {
private static final AppConstants appConstants = AppLocale.getAppConstants();
private ParagraphConnection connection;
private ModelPersist model;
private ParagraphConnectionListener locationConnectionListener;
private Image from;
private TextBox fromId;
private Image cut;
private TextBox toId;
private Image to;
private TextBox nameFrom;
private TextBox nameTo;
private SimpleObjectsListBox objectsListBox;
private Image remove;
private Label direction;
private Label backName;
private ColorPicker colorPicker;
private ListBox type;
private ListBox strictness;
private SimpleAbstractParameterListBox<Parameter> parameter;
private SimpleAbstractParameterListBox<Modificator> modificator;
private DiceValueWidget parameterValue;
private CheckBox reverseHiddenUsage;
public QuickViewParagraphConnectionEditor(Model mod, ParagraphConnection conn) {
this.model = (ModelPersist)mod;
setSize("100%", "100%");
HorizontalPanel horizontalPanel = new HorizontalPanel();
Label label = new Label(appConstants.quickConnectionTitle(),false);
horizontalPanel.add(label);
// horizontalPanel.setCellWidth(label,"99%");
ClickHandler clickListener = new ClickHandler() {
public void onClick(ClickEvent event) {
if (event.getSource()==remove) {
if (Window.confirm(appConstants.quickConnectionRemoveConfirm())) {
model.removeParagraphConnection(connection);
}
} else if (event.getSource()==cut) {
if (Window.confirm(appConstants.splitParagraphConnection())) {
model.splitParagraphConnection(connection);
}
} else if (event.getSource()==from) {
model.unselectParagraphConnection(connection, locationConnectionListener);
if (model.getCurrentParagraph()==connection.getFrom()) {
model.unselectParagraph(connection.getFrom(), null);
}
model.selectParagraph(connection.getFrom(), null);
} else if (event.getSource()==to) {
model.unselectParagraphConnection(connection, locationConnectionListener);
if (model.getCurrentParagraph()==connection.getTo()) {
model.unselectParagraph(connection.getTo(), null);
}
model.selectParagraph(connection.getTo(), null);
} else if (event.getSource()==reverseHiddenUsage) {
connection.setReverseHiddenUsage(reverseHiddenUsage.getValue());
}
}
};
ChangeHandler changeListener = new ChangeHandler() {
public void onChange(ChangeEvent event) {
updateConnection(event.getSource());
}
};
BlurHandler blueHandler = new BlurHandler() {
public void onBlur(BlurEvent event) {
updateConnection(event.getSource());
}
};
remove = new Image(Images.REMOVE);
remove.setTitle(appConstants.quickConnectionRemoveTitle());
remove.setStyleName(Styles.CLICKABLE);
remove.addClickHandler(clickListener);
horizontalPanel.add(remove);
// horizontalPanel.setCellWidth(remove,"99%");
add(horizontalPanel);
setCellHeight(horizontalPanel,"1%");
setCellWidth(horizontalPanel,"100%");
Grid grid = new Grid(12,2);
grid.setSize("100%", "100%");
int row=0;
colorPicker = new ColorPicker(changeListener);
label = new Label();
label.setStyleName(Styles.BOLD);
grid.setWidget(row,0,new Label(appConstants.connectionColor()));
grid.setWidget(row,1,colorPicker);
row++;
nameFrom = new TextBox();
nameFrom.setTitle(appConstants.quickConnectionNameTitle());
nameFrom.addBlurHandler(blueHandler);
grid.setWidget(row,0,new Label(appConstants.quickConnectionNameFrom()));
grid.setWidget(row,1,nameFrom);
row++;
nameTo = new TextBox();
nameTo.setTitle(appConstants.quickConnectionNameTitle());
nameTo.addBlurHandler(blueHandler);
backName = new Label(appConstants.quickConnectionNameTo());
grid.setWidget(row,0,backName);
grid.setWidget(row,1,nameTo);
row++;
HorizontalPanel panel = new HorizontalPanel();
from = new Image(Images.LEFT_GREEN);
from.addStyleName(Styles.CLICKABLE);
from.setTitle(appConstants.openParagraph());
from.addClickHandler(clickListener);
panel.add(from);
fromId = new TextBox();
fromId.setReadOnly(true);
fromId.setTitle(appConstants.quickConnectionTextLinkDesciption());
fromId.setWidth("100%");
panel.add(fromId);
cut = new Image(Images.SPLIT);
cut.addStyleName(Styles.CLICKABLE);
cut.setTitle(appConstants.splitParagraphConnection());
cut.addClickHandler(clickListener);
panel.add(cut);
toId = new TextBox();
toId.setReadOnly(true);
toId.setTitle(appConstants.quickConnectionTextLinkDesciption());
toId.setWidth("100%");
panel.add(toId);
to = new Image(Images.RIGHT_GREEN);
to.addStyleName(Styles.CLICKABLE);
to.setTitle(appConstants.openParagraph());
to.addClickHandler(clickListener);
panel.add(to);
grid.setWidget(row,0,new Label(appConstants.quickConnectionID()));
grid.setWidget(row,1,panel);
row++;
grid.setWidget(row,0,new Label(appConstants.quickConnectionType()));
direction = new Label();
grid.setWidget(row,1,direction);
row++;
type = new ListBox();
type.addItem(appConstants.connectionTypeNormal(), ParagraphConnection.TYPE_NORMAL_STR);
type.addItem(appConstants.connectionTypeObject(), ParagraphConnection.TYPE_NORMAL_STR);
type.addItem(appConstants.connectionTypeParameterIsMore(), ParagraphConnection.TYPE_PARAMETER_MORE_STR);
type.addItem(appConstants.connectionTypeParameterIsLess(), ParagraphConnection.TYPE_PARAMETER_LESS_STR);
type.addItem(appConstants.connectionTypeModificatorPresent(), ParagraphConnection.TYPE_MODIFICATOR_STR);
type.addItem(appConstants.connectionTypeModificatorNotPresent(), ParagraphConnection.TYPE_NO_MODIFICATOR_STR);
type.addItem(appConstants.connectionTypeVitalLess(), ParagraphConnection.TYPE_VITAL_LESS_STR);
type.addItem(appConstants.connectionTypeEnemyVitalLess(), ParagraphConnection.TYPE_ENEMY_VITAL_LESS_STR);
type.addItem(appConstants.connectionTypeBattleRoundsMore(), ParagraphConnection.TYPE_BATTLE_ROUND_MORE_STR);
type.addChangeHandler(changeListener);
type.setTitle(appConstants.connectionTypeTitle());
grid.setWidget(row,0,new Label(appConstants.connectionType()));
grid.setWidget(row,1,type);
row++;
strictness = new ListBox();
strictness.addItem(appConstants.connectionStrictnessCan(), ParagraphConnection.STRICTNESS_CAN_STR);
strictness.addItem(appConstants.connectionStrictnessMust(), ParagraphConnection.STRICTNESS_MUST_STR);
strictness.addItem(appConstants.connectionStrictnessMustNot(), ParagraphConnection.STRICTNESS_MUST_NOT_STR);
strictness.addChangeHandler(changeListener);
strictness.setTitle(appConstants.connectionStrictnessTitle());
grid.setWidget(row,0,new Label(appConstants.connectionStrictness()));
grid.setWidget(row,1,strictness);
row++;
objectsListBox = new SimpleObjectsListBox(mod);
objectsListBox.addChangeHandler(changeListener);
objectsListBox.setTitle(appConstants.quickConnectionConditionObjectTitle());
grid.setWidget(row,0,new Label(appConstants.quickConnectionConditionObject()));
grid.setWidget(row,1,objectsListBox);
row++;
parameter = new SimpleAbstractParameterListBox<Parameter>(Parameter.class,model,true);
parameter.setTitle(appConstants.connectionParameterTitle());
parameter.addChangeHandler(changeListener);
grid.setWidget(row,0,new Label(appConstants.connectionParameter()));
grid.setWidget(row,1,parameter);
row++;
horizontalPanel = new HorizontalPanel();
parameterValue = new DiceValueWidget(horizontalPanel);
parameterValue.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
updateConnection(parameterValue);
}
});
grid.setWidget(row,0,new Label(appConstants.connectionParameterValue()));
grid.setWidget(row,1,horizontalPanel);
row++;
modificator = new SimpleAbstractParameterListBox<Modificator>(Modificator.class,model,true);
modificator.setTitle(appConstants.connectionModificatorTitle());
modificator.addChangeHandler(changeListener);
grid.setWidget(row,0,new Label(appConstants.connectionModificator()));
grid.setWidget(row,1,modificator);
row++;
reverseHiddenUsage = new CheckBox(appConstants.quickReverseHiddenUsage());
reverseHiddenUsage.setTitle(appConstants.quickReverseHiddenUsageTitle());
reverseHiddenUsage.addClickHandler(clickListener);
grid.setWidget(row,0,new HTML(" "));
grid.setWidget(row,1,reverseHiddenUsage);
row++;
add(grid);
setCellHeight(grid,"1%");
setCellWidth(grid,"100%");
HTML html = new HTML(" ");
add(html);
setCellHeight(html,"99%");
setCellWidth(html,"100%");
locationConnectionListener = new ParagraphConnectionListener(){
public void refreshAll() {
open(QuickViewParagraphConnectionEditor.this.connection);
}
public void select(ParagraphConnection connection) {
}
public void unselect(ParagraphConnection connection) {
}
public void update(ParagraphConnection connection) {
if (connection==QuickViewParagraphConnectionEditor.this.connection) {
open(QuickViewParagraphConnectionEditor.this.connection);
}
}
public void remove(ParagraphConnection connection) {
}
public void addNew(ParagraphConnection connection) {
if (connection==QuickViewParagraphConnectionEditor.this.connection) {
open(QuickViewParagraphConnectionEditor.this.connection);
}
}
};
model.addParagraphConnectionListener(locationConnectionListener);
open(conn);
}
private void updateConnection(Object object) {
if (object==objectsListBox) {
ObjectBean obj = objectsListBox.getSelectedObject();
connection.setObject(obj);
if (obj==null) {
type.setSelectedIndex(0);
} else {
type.setSelectedIndex(1);
}
} else if (object==colorPicker) {
connection.setColor(colorPicker.getSelectedIndex());
} else if (object==type) {
int tp = type.getSelectedIndex();
if (tp>1) {
connection.setType(tp-1);
} else {
connection.setType(ParagraphConnection.TYPE_NORMAL);
}
if (connection.getType()!=ParagraphConnection.TYPE_NORMAL) {
connection.setObject(null);
objectsListBox.setSelectedObject(null);
}
applyControls();
} else if (object==parameter) {
connection.setParameter(parameter.getSelectedParameter());
} else if (object==modificator) {
connection.setModificator(modificator.getSelectedParameter());
} else if (object==parameterValue) {
connection.setParameterValue(parameterValue.getDiceValue());
} else if (object==strictness) {
connection.setStrictness(strictness.getSelectedIndex());
} else if (object==nameFrom) {
connection.setNameFrom(nameFrom.getText().trim());
} else if (object==nameTo) {
connection.setNameTo(nameTo.getText().trim());
}
model.updateParagraphConnection(connection, locationConnectionListener);
}
public void open(ParagraphConnection connection) {
this.connection = connection;
fromId.setText(connection.getFromId());
toId.setText(connection.getToId());
objectsListBox.setSelectedObject(connection.getObject());
if (connection.isBothDirections()) {
direction.setText(appConstants.quickConnectionBiDirection());
objectsListBox.setEnabled(false);
} else {
direction.setText(appConstants.quickConnectionOneWay());
objectsListBox.setEnabled(true);
}
colorPicker.setSelectedIndex(connection.getColor());
if (connection.isBothDirections()==false) {
if (connection.getType()==ParagraphConnection.TYPE_NORMAL) {
if (connection.getObject()==null) {
type.setSelectedIndex(0);
} else {
type.setSelectedIndex(1);
}
} else {
type.setSelectedIndex(connection.getType()+1);
}
parameter.setSelectedParameter(connection.getParameter());
modificator.setSelectedParameter(connection.getModificator());
parameterValue.apply(connection.getParameterValue());
strictness.setSelectedIndex(connection.getStrictness());
}
nameFrom.setText(connection.getNameFrom());
nameTo.setText(connection.getNameTo());
reverseHiddenUsage.setValue(connection.isReverseHiddenUsage());
applyControls();
}
private void applyControls() {
if (connection.isBothDirections()) {
parameter.setEnabled(false);
modificator.setEnabled(false);
parameterValue.setEnabled(false);
type.setEnabled(false);
strictness.setEnabled(false);
nameTo.setEnabled(true);
nameTo.setVisible(true);
backName.setVisible(true);
return;
}
nameTo.setEnabled(false);
nameTo.setVisible(false);
backName.setVisible(false);
type.setEnabled(true);
strictness.setEnabled(true);
int tp = type.getSelectedIndex();
if (tp>1) {
tp=tp-1;
} else {
tp=ParagraphConnection.TYPE_NORMAL;
}
switch (tp) {
case ParagraphConnection.TYPE_PARAMETER_LESS:
case ParagraphConnection.TYPE_PARAMETER_MORE:
parameter.setEnabled(true);
modificator.setEnabled(false);
objectsListBox.setEnabled(false);
parameterValue.setEnabled(true);
if (connection.getParameterValue()==null) {
connection.setParameterValue(parameterValue.getDiceValue());
}
break;
case ParagraphConnection.TYPE_MODIFICATOR:
case ParagraphConnection.TYPE_NO_MODIFICATOR:
parameter.setEnabled(false);
modificator.setEnabled(true);
parameterValue.setEnabled(false);
objectsListBox.setEnabled(false);
break;
case ParagraphConnection.TYPE_VITAL_LESS:
case ParagraphConnection.TYPE_ENEMY_VITAL_LESS:
parameter.setEnabled(false);
modificator.setEnabled(false);
parameterValue.setEnabled(true);
objectsListBox.setEnabled(false);
if (connection.getParameterValue()==null) {
connection.setParameterValue(parameterValue.getDiceValue());
}
break;
case ParagraphConnection.TYPE_BATTLE_ROUND_MORE:
parameter.setEnabled(false);
modificator.setEnabled(false);
parameterValue.setEnabled(true);
objectsListBox.setEnabled(false);
if (connection.getParameterValue()==null) {
connection.setParameterValue(parameterValue.getDiceValue());
}
break;
default:
parameter.setEnabled(false);
modificator.setEnabled(false);
parameterValue.setEnabled(false);
objectsListBox.setEnabled(true);
break;
}
}
public void close() {
model.removeParagraphConnectionListener(locationConnectionListener);
}
public ParagraphConnection getLocationConnection() {
return connection;
}
}