package com.project.website.canvas.client; import java.util.ArrayList; import java.util.HashMap; 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.HumanInputEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import com.project.shared.client.events.SimpleEvent; import com.project.shared.client.loggers.HTMLLogger; import com.project.shared.client.utils.ElementUtils; import com.project.shared.client.utils.widgets.WidgetUtils; import com.project.website.canvas.client.canvastools.base.BuiltinTools; import com.project.website.canvas.client.canvastools.base.interfaces.ToolboxItem; import com.project.website.canvas.client.resources.CanvasResources; public class Toolbox extends Composite { private static ToolboxUiBinder uiBinder = GWT.create(ToolboxUiBinder.class); interface ToolboxUiBinder extends UiBinder<Widget, Toolbox> { } @UiField FlowPanel toolsPanel; @UiField FlowPanel toolboxHeader; final HashMap<ToolboxItem, Widget> toolboxItems = new HashMap<ToolboxItem, Widget>(); final SimpleEvent<ToolboxItem> toolChosenEvent = new SimpleEvent<ToolboxItem>(); final ArrayList<Widget> toolIconHolders = new ArrayList<Widget>(); public Toolbox() { initWidget(uiBinder.createAndBindUi(this)); ElementUtils.setTextSelectionEnabled(this.getElement(), false); for (ToolboxItem toolboxItem : BuiltinTools.getTools()) { this.addTool(toolboxItem); } this.toolboxHeader.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (false == RootPanel.get().remove(HTMLLogger.INSTANCE.getLogWidget())) { RootPanel.get().add(HTMLLogger.INSTANCE.getLogWidget()); } }} , ClickEvent.getType()); } public SimpleEvent<ToolboxItem> getToolChosenEvent() { return this.toolChosenEvent; } private void addTool(final ToolboxItem toolboxItem) { final FlowPanel outerElem = new FlowPanel(); this.toolboxItems.put(toolboxItem, outerElem); Label elem = new Label(); outerElem.add(elem); this.toolsPanel.add(outerElem); this.toolIconHolders.add(outerElem); outerElem.addStyleName(CanvasResources.INSTANCE.main().toolboxCommonIconStyle()); outerElem.setTitle(toolboxItem.getToolboxIconToolTip()); elem.addStyleName(CanvasResources.INSTANCE.main().toolboxInnerIconStyle()); elem.addStyleName(toolboxItem.getToolboxIconStyle()); WidgetUtils.addMovementStartHandler(elem, new SimpleEvent.Handler<HumanInputEvent<?>>() { @Override public void onFire(HumanInputEvent<?> arg) { setActiveTool(toolboxItem); arg.stopPropagation(); }}); } public void setActiveTool(ToolboxItem toolboxItem) { for (Widget w : toolIconHolders) { w.removeStyleName(CanvasResources.INSTANCE.main().toolboxCommonSelectedIconStyle()); } this.toolboxItems.get(toolboxItem).addStyleName( CanvasResources.INSTANCE.main().toolboxCommonSelectedIconStyle()); toolChosenEvent.dispatch(toolboxItem); } }