package com.project.website.canvas.client.canvastools.sitecrop; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyPressEvent; 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.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.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PushButton; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.ToggleButton; import com.google.gwt.user.client.ui.Widget; import com.project.shared.client.events.SimpleEvent; import com.project.shared.client.events.SimpleEvent.Handler; import com.project.shared.client.handlers.SpecificKeyPressHandler; import com.project.shared.client.utils.HandlerUtils; import com.project.website.canvas.client.resources.CanvasResources; import com.project.website.canvas.client.shared.widgets.ToggleButtonPanel; public class SiteCropToolbar extends Composite { //#region UiBinder Declarations private static SiteCropToolbarUiBinder uiBinder = GWT .create(SiteCropToolbarUiBinder.class); interface SiteCropToolbarUiBinder extends UiBinder<Widget, SiteCropToolbar> { } //#endregion //#region UiFields @UiField ToggleButtonPanel toggleButtonPanel; @UiField CheckBox chkAutoSize; @UiField ToggleButton dragButton; @UiField PushButton browseButton; @UiField ToggleButton cropButton; @UiField Button acceptCropButton; @UiField Label urlLabel; @UiField TextBox urlTextBox; @UiField CheckBox interactiveCheckBox; //#endregion private SimpleEvent<String> _urlChangeEvent = new SimpleEvent<String>(); public SiteCropToolbar() { initWidget(uiBinder.createAndBindUi(this)); this.registerHandlers(); this.toggleButtonPanel.setDefaultButton(this.dragButton); this.browseButton.getUpFace().setImage( new Image(CanvasResources.INSTANCE.cropBrowseIcon())); } public void registerHandlers() { this.urlTextBox.addKeyPressHandler(new SpecificKeyPressHandler(KeyCodes.KEY_ENTER) { @Override public void onSpecificKeyPress(KeyPressEvent event) { _urlChangeEvent.dispatch(urlTextBox.getText()); } }); } public HandlerRegistration addToggleDragRequestHandler(final Handler<Boolean> handler) { return this.dragButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { handler.onFire(event.getValue()); } }); } public HandlerRegistration addToggleCropModeRequestHandler(final Handler<Boolean> handler) { return this.cropButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { handler.onFire(event.getValue()); } }); } public HandlerRegistration addUrlChangedHandler(final Handler<String> handler) { return this._urlChangeEvent.addHandler(handler); } public HandlerRegistration addDebugClickRequestHandler(final Handler<Void> handler) { return this.urlLabel.addClickHandler(HandlerUtils.asClickHandler(handler)); } public HandlerRegistration addAcceptCropRequestHandler(final Handler<Void> handler) { return this.acceptCropButton.addClickHandler(HandlerUtils.asClickHandler(handler)); } public void setAcceptCropVisibility(boolean visible) { this.acceptCropButton.setVisible(visible); } public void enableCrop(boolean enabled) { this.cropButton.setEnabled(enabled); } public void enableBrowse(boolean enabled) { this.browseButton.setEnabled(enabled); } public void enableDrag(boolean enabled) { this.dragButton.setEnabled(enabled); } public HandlerRegistration addBrowseRequestHandler(final Handler<Void> handler) { return this.browseButton.addClickHandler(HandlerUtils.asClickHandler(handler)); } public HandlerRegistration addIsInteractiveChangedHandler(ValueChangeHandler<Boolean> handler) { return this.interactiveCheckBox.addValueChangeHandler(handler); } public void toggleDrag() { this.dragButton.setValue(true, true); } public void toggleCrop() { this.dragButton.setValue(true, true); } public void setUrl(String url) { if (this.urlTextBox.getText().equals(url)) { return; } this.urlTextBox.setValue(url); } public void setIsInteractive(boolean isInteractive) { this.interactiveCheckBox.setValue(isInteractive, false); } }