/******************************************************************************* * 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.ext.java.client.organizeimports; 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.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.Label; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.che.ide.ext.java.client.JavaLocalizationConstant; import org.eclipse.che.ide.ext.java.shared.dto.ConflictImportDTO; import org.eclipse.che.ide.ui.window.Window; import java.util.List; import static com.google.gwt.dom.client.Style.Cursor.POINTER; import static org.eclipse.che.ide.api.theme.Style.getEditorSelectionColor; import static org.eclipse.che.ide.api.theme.Style.getMainFontColor; /** * Implements of {@link OrganizeImportsView}. * * @author Valeriy Svydenko */ @Singleton final class OrganizeImportsViewImpl extends Window implements OrganizeImportsView { interface OrganizeImportsViewImplUiBinder extends UiBinder<Widget, OrganizeImportsViewImpl> { } private static OrganizeImportsViewImplUiBinder UI_BINDER = GWT.create(OrganizeImportsViewImplUiBinder.class); @UiField VerticalPanel container; @UiField(provided = true) final JavaLocalizationConstant locale; private ActionDelegate delegate; private Button next; private Button back; private Button finish; private String selectedImport; private Label selectedLabel; @Inject public OrganizeImportsViewImpl(JavaLocalizationConstant locale) { this.locale = locale; setTitle(locale.organizeImportsName()); setWidget(UI_BINDER.createAndBindUi(this)); createButtons(locale); } /** {@inheritDoc} */ @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } /** {@inheritDoc} */ @Override public void show(ConflictImportDTO match) { container.clear(); List<String> matches = match.getTypeMatches(); for (String fqn : matches) { final Label label = new Label(fqn); if (fqn.equals(selectedImport)) { selectedLabel = label; selectedLabel.getElement().getStyle().setBackgroundColor(getEditorSelectionColor()); } label.getElement().getStyle().setColor(getMainFontColor()); label.getElement().getStyle().setCursor(POINTER); label.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent clickEvent) { selectedLabel.getElement().getStyle().setBackgroundColor("initial"); selectedLabel = label; label.getElement().getStyle().setBackgroundColor(getEditorSelectionColor()); } }); container.add(label); } super.show(); } /** {@inheritDoc} */ public String getSelectedImport() { return selectedLabel.getText(); } /** {@inheritDoc} */ @Override public void setSelectedImport(String fqn) { this.selectedImport = fqn; } /** {@inheritDoc} */ @Override public void changePage(ConflictImportDTO match) { show(match); } /** {@inheritDoc} */ @Override public void setEnableFinishButton(boolean isEnable) { finish.setEnabled(isEnable); } /** {@inheritDoc} */ @Override public void setEnableNextButton(boolean isEnable) { next.setEnabled(isEnable); } /** {@inheritDoc} */ @Override public void setEnableBackButton(boolean isEnable) { back.setEnabled(isEnable); } private void createButtons(JavaLocalizationConstant locale) { back = createButton(locale.organizeImportsButtonBack(), "imports-back-button", new ClickHandler() { @Override public void onClick(ClickEvent event) { delegate.onBackButtonClicked(); } }); next = createButton(locale.organizeImportsButtonNext(), "imports-next-button", new ClickHandler() { @Override public void onClick(ClickEvent event) { delegate.onNextButtonClicked(); } }); Button cancel = createButton(locale.organizeImportsButtonCancel(), "imports-cancel-button", new ClickHandler() { @Override public void onClick(ClickEvent event) { hide(); delegate.onCancelButtonClicked(); } }); finish = createPrimaryButton(locale.organizeImportsButtonFinish(), "imports-finish-button", new ClickHandler() { @Override public void onClick(ClickEvent event) { delegate.onFinishButtonClicked(); } }); addButtonToFooter(finish); addButtonToFooter(cancel); addButtonToFooter(next); addButtonToFooter(back); } }