package com.project.website.canvas.client.canvastools.tasklist;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.TakesValue;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.Widget;
import com.project.shared.client.events.SimpleEvent;
import com.project.shared.client.utils.NativeUtils;
import com.project.shared.client.utils.StyleUtils;
import com.project.website.canvas.client.resources.CanvasResources;
import com.project.website.canvas.shared.data.TaskData;
public class TaskTool extends Composite implements Focusable, TakesValue<TaskData> {
private static TaskToolUiBinder uiBinder = GWT.create(TaskToolUiBinder.class);
interface TaskToolUiBinder extends UiBinder<Widget, TaskTool> {
}
@UiField
HoverTextBox textTask;
@UiField
CheckBox checkTask;
@UiField
Button imageRemove;
@UiField
FlowPanel imageTask;
private ImageProvider imageProvider = new ImageProvider();
private final SimpleEvent<TaskTool> killRequestEvent = new SimpleEvent<TaskTool>();
private TaskData data = new TaskData();
public TaskTool() {
initWidget(uiBinder.createAndBindUi(this));
this.registerHandlers();
this.setImageUrl(ImageProvider.getDefaultImageUrl());
}
private void registerHandlers()
{
this.checkTask.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
public void onValueChange(ValueChangeEvent<Boolean> arg0) {
OnCheckChanged(arg0);
}
});
this.textTask.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
if (false == NativeUtils.keyIsSpace(event))
{
return;
}
if (false == textTask.isReadOnly())
{
return;
}
checkTask.setValue(false, true);
event.preventDefault();
}
});
this.textTask.addValueChangeHandler(new ValueChangeHandler<String>() {
public void onValueChange(ValueChangeEvent<String> event) {
textValueChanges(event.getValue());
}
});
final TaskTool that = this;
this.imageRemove.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
killRequestEvent.dispatch(that);
}
});
this.textTask.addFocusHandler(new FocusHandler() {
public void onFocus(FocusEvent event) {
// TODO Auto-generated method stub
textTask.selectAll();
}
});
}
private void setImageUrl(String url) {
this.imageTask.getElement().getStyle().setBackgroundImage(
StyleUtils.buildBackgroundUrl(url));
}
public HandlerRegistration addKillRequestEventHandler(SimpleEvent.Handler<TaskTool> handler) {
return this.killRequestEvent.addHandler(handler);
}
private void OnCheckChanged(ValueChangeEvent<Boolean> event) {
boolean checked = event.getValue();
setCompleted(checked);
}
private void textValueChanges(String text) {
this.setImageUrl(imageProvider.getImageUrl(text));
}
private void setCompleted(boolean checked) {
if (checked) {
this.textTask.addStyleName(CanvasResources.INSTANCE.main().taskListTextChecked());
this.imageTask.addStyleName(CanvasResources.INSTANCE.main().taskImageChecked());
this.textTask.setReadOnly(true);
} else {
this.textTask.removeStyleName(CanvasResources.INSTANCE.main().taskListTextChecked());
this.imageTask.removeStyleName(CanvasResources.INSTANCE.main().taskImageChecked());
this.textTask.setReadOnly(false);
}
}
public int getTabIndex() {
// TODO Auto-generated method stub
return this.textTask.getTabIndex();
}
public void setAccessKey(char key) {
// TODO Auto-generated method stub
this.textTask.setAccessKey(key);
}
public void setFocus(boolean focused) {
// TODO Auto-generated method stub
this.textTask.setFocus(focused);
}
public void setTabIndex(int index) {
// TODO Auto-generated method stub
this.textTask.setTabIndex(index);
}
@Override
public void setValue(TaskData value) {
this.data = value;
this.textTask.setText(value.description);
this.checkTask.setValue(value.completed);
this.setImageUrl(value.imageUrl);
// TODO: Support image alternate text
this.setCompleted(value.completed);
}
@Override
public TaskData getValue() {
this.data.description = this.textTask.getText();
this.data.completed = this.checkTask.getValue();
this.data.imageUrl = StyleUtils.getBackgroundUrl(this.imageTask.getElement().getStyle());
// TODO: Support image alternate text
return this.data;
}
}