/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.ui.button; 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.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; 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.SimpleLayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import org.eclipse.che.ide.ui.tooltip.TooltipWidget; import org.vectomatic.dom.svg.ui.SVGImage; import org.vectomatic.dom.svg.ui.SVGResource; import javax.validation.constraints.NotNull; /** * @author Andrey Plotnikov * @author Valeriy Svydenko */ public class ConsoleButtonImpl extends Composite implements ConsoleButton, ClickHandler, MouseOverHandler, MouseOutHandler { interface ConsoleButtonImplUiBinder extends UiBinder<Widget, ConsoleButtonImpl> { } public static final int TOP_TOOLTIP_SHIFT = 35; private static final ConsoleButtonImplUiBinder UI_BINDER = GWT.create(ConsoleButtonImplUiBinder.class); @UiField SimpleLayoutPanel image; private final ButtonResources resources; private final TooltipWidget tooltip; private final SVGImage icon; private ActionDelegate delegate; @Inject public ConsoleButtonImpl(ButtonResources resources, TooltipWidget tooltip, @NotNull @Assisted String prompt, @NotNull @Assisted SVGResource image) { this.resources = resources; this.tooltip = tooltip; this.tooltip.setDescription(prompt); resources.buttonCss().ensureInjected(); initWidget(UI_BINDER.createAndBindUi(this)); icon = new SVGImage(image); icon.getElement().setAttribute("class", resources.buttonCss().mainButtonIcon()); setCheckedStatus(false); addDomHandler(this, ClickEvent.getType()); addDomHandler(this, MouseOutEvent.getType()); addDomHandler(this, MouseOverEvent.getType()); } /** {@inheritDoc} */ @Override public void setCheckedStatus(boolean isChecked) { ButtonResources.Css buttonCss = resources.buttonCss(); if (isChecked) { icon.removeClassNameBaseVal(buttonCss.whiteColor()); icon.addClassNameBaseVal(buttonCss.activeConsoleButton()); } else { icon.removeClassNameBaseVal(buttonCss.activeConsoleButton()); icon.addClassNameBaseVal(buttonCss.whiteColor()); } image.getElement().appendChild(icon.getSvgElement().getElement()); } /** {@inheritDoc} */ @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } /** {@inheritDoc} */ @Override public void onClick(ClickEvent clickEvent) { delegate.onButtonClicked(); } /** {@inheritDoc} */ @Override public void onMouseOut(MouseOutEvent mouseOutEvent) { tooltip.hide(); } /** {@inheritDoc} */ @Override public void onMouseOver(MouseOverEvent mouseOverEvent) { tooltip.setPopupPosition(getAbsoluteLeft(), getAbsoluteTop() + TOP_TOOLTIP_SHIFT); tooltip.show(); } }