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.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
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.Picture;
import com.iambookmaster.client.editor.PicturesListBox;
import com.iambookmaster.client.locale.AppConstants;
import com.iambookmaster.client.locale.AppLocale;
import com.iambookmaster.client.model.Model;
import com.iambookmaster.client.model.ParameterListener;
public abstract class QuickAbstractParameterEditor extends VerticalPanel implements QuickViewWidget {
protected static final AppConstants appConstants = AppLocale.getAppConstants();
private AbstractParameter parameter;
protected Model model;
private ParameterListener parameterListener;
private TextBox name;
private TextArea description;
private int gridRow;
private Grid grid;
private PicturesListBox icon;
public QuickAbstractParameterEditor(Model mod) {
this.model = mod;
setSize("100%", "100%");
Label label = new Label(getEditorName());
add(label);
setCellHeight(label,"1%");
setCellWidth(label,"100%");
grid = new Grid(getGridWidgetsCount()+2,2);
grid.setSize("100%", "100%");
ChangeHandler changeHandler = new ChangeHandler() {
public void onChange(ChangeEvent event) {
updateParameter(event.getSource());
}
};
KeyPressHandler keyPressHandler = new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
switch (event.getCharCode()) {
case KeyCodes.KEY_ENTER:
updateParameter(event.getSource());
break;
case KeyCodes.KEY_ESCAPE:
open(parameter);
break;
}
}
};
name = new TextBox();
name.addChangeHandler(changeHandler);
name.addKeyPressHandler(keyPressHandler);
grid.setWidget(gridRow,0,new Label(appConstants.quickItemName()));
grid.setWidget(gridRow,1,name);
gridRow++;
icon = new PicturesListBox(model,getIconType());
icon.addChangeHandler(changeHandler);
grid.setWidget(gridRow,0,new Label(appConstants.quickItemIcon()));
grid.setWidget(gridRow,1,icon);
gridRow++;
add(grid);
setCellHeight(grid,"1%");
setCellWidth(grid,"100%");
label = new Label(appConstants.quickItemMasterDescription());
add(label);
setCellHeight(label,"1%");
setCellWidth(label,"100%");
description = new TextArea();
description.addChangeHandler(changeHandler);
description.setWidth("100%");
description.setVisibleLines(3);
add(description);
setCellHeight(description,"1%");
setCellWidth(description,"100%");
Widget widget = getTail();
if (widget != null) {
add(widget);
setCellHeight(widget,"1%");
setCellWidth(widget,"100%");
}
HTML html = new HTML(" ");
html.setStyleName(Styles.FILLER);
add(html);
setCellHeight(html,"99%");
setCellWidth(html,"100%");
parameterListener = new ParameterListener(){
public void refreshAll() {
open(QuickAbstractParameterEditor.this.parameter);
}
public void addNewParameter(AbstractParameter parameter) {
parameterWasAdded(parameter);
}
public void remove(AbstractParameter parameter) {
parameterWasRemoved(parameter);
}
public void select(AbstractParameter parameter) {
}
public void update(AbstractParameter parameter) {
parameterWasUpdated(parameter);
}
public void showInfo(AbstractParameter parameter) {
}
};
model.addParamaterListener(parameterListener);
// open(obj);
}
protected int getIconType() {
return Picture.ROLE_ICON;
}
protected void parameterWasUpdated(AbstractParameter parameter) {
}
protected void parameterWasRemoved(AbstractParameter parameter) {
}
protected void parameterWasAdded(AbstractParameter parameter) {
}
protected int getGridWidgetsCount() {
return 0;
}
protected void addWidgetToGrid(Widget widet,String name) {
grid.setWidget(gridRow,0,new Label(name));
grid.setWidget(gridRow++,1,widet);
}
public abstract String getEditorName();
public Widget getTail() {
return null;
}
protected void updateParameter(Object sender) {
if (sender==name) {
parameter.setName(name.getText().trim());
} else if (sender==description) {
parameter.setDescription(description.getText().trim());
}
model.updateParameter(parameter, parameterListener);
}
public void open(final AbstractParameter object) {
this.parameter = object;
name.setText(object.getName());
DeferredCommand.addCommand(new Command(){
public void execute() {
description.setText(object.getDescription());
}
});
}
public void close() {
model.removeParamaterListener(parameterListener);
}
}