/******************************************************************************* * 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.multisplitpanel.tab; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.DoubleClickEvent; 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.SimplePanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import org.eclipse.che.ide.api.parts.PartStackUIResources; import org.vectomatic.dom.svg.ui.SVGImage; import org.vectomatic.dom.svg.ui.SVGResource; import javax.validation.constraints.NotNull; import static com.google.gwt.dom.client.NativeEvent.BUTTON_LEFT; import static com.google.gwt.dom.client.NativeEvent.BUTTON_MIDDLE; /** * Widget that represents a tab. * * @author Artem Zatsarynnyi */ public class TabWidget extends Composite implements Tab { private static final TabItemWidgetUiBinder UI_BINDER = GWT.create(TabItemWidgetUiBinder.class); private final String title; private final SVGResource icon; @UiField SimplePanel iconPanel; @UiField Label titleLabel; @UiField FlowPanel closeButton; @UiField(provided = true) PartStackUIResources resources; private ActionDelegate delegate; @Inject public TabWidget(PartStackUIResources resources, @Assisted String title, @Assisted SVGResource icon, @Assisted boolean closable) { this.resources = resources; this.title = title; this.icon = icon; initWidget(UI_BINDER.createAndBindUi(this)); titleLabel.setText(title); iconPanel.add(new SVGImage(getIcon())); addDomHandler(this, ClickEvent.getType()); addDomHandler(this, DoubleClickEvent.getType()); if (closable) { closeButton.addDomHandler(event -> delegate.onTabClosing(TabWidget.this), ClickEvent.getType()); } else { closeButton.setVisible(false); } } @Override public SVGResource getIcon() { return icon; } @Override public String getTitleText() { return title; } @Override public void select() { getElement().setAttribute("focused", ""); } @Override public void unSelect() { getElement().removeAttribute("focused"); } @Override public void onClick(@NotNull ClickEvent event) { if (BUTTON_LEFT == event.getNativeButton()) { delegate.onTabClicked(this); } else if (BUTTON_MIDDLE == event.getNativeButton()) { delegate.onTabClosing(this); } } @Override public void onDoubleClick(DoubleClickEvent event) { delegate.onTabDoubleClicked(this); } @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } interface TabItemWidgetUiBinder extends UiBinder<Widget, TabWidget> { } }