/*******************************************************************************
* 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.projecttype.wizard.presenter;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
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.FlowPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import org.eclipse.che.ide.CoreLocalizationConstant;
import org.eclipse.che.ide.api.mvp.Presenter;
import org.eclipse.che.ide.api.project.type.wizard.ProjectWizardMode;
import org.eclipse.che.ide.ui.window.Window;
import static org.eclipse.che.ide.api.project.type.wizard.ProjectWizardMode.CREATE;
import static org.eclipse.che.ide.api.project.type.wizard.ProjectWizardMode.UPDATE;
/**
* @author Evgen Vidolob
* @author Oleksii Orel
*/
public class ProjectWizardViewImpl extends Window implements ProjectWizardView {
private static ProjectWizardViewImplUiBinder ourUiBinder = GWT.create(ProjectWizardViewImplUiBinder.class);
private final CoreLocalizationConstant locale;
@UiField
SimplePanel wizardPanel;
Button nextStepButton;
Button previousStepButton;
Button saveButton;
private boolean isCreatingNewProject;
private ActionDelegate delegate;
@Inject
public ProjectWizardViewImpl(org.eclipse.che.ide.Resources resources, CoreLocalizationConstant coreLocalizationConstant) {
this.locale = coreLocalizationConstant;
setTitle(coreLocalizationConstant.projectWizardDefaultTitleText());
setWidget(ourUiBinder.createAndBindUi(this));
saveButton = createPrimaryButton(locale.projectWizardDefaultSaveButtonText(), "projectWizard-saveButton", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
delegate.onSaveClicked();
}
});
saveButton.addStyleName(resources.Css().buttonLoader());
addButtonToFooter(saveButton);
nextStepButton = createButton(locale.next(), "projectWizard-nextStepButton", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
delegate.onNextClicked();
}
});
addButtonToFooter(nextStepButton);
previousStepButton = createButton(locale.back(), "projectWizard-previousStepButton", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
delegate.onBackClicked();
}
});
addButtonToFooter(previousStepButton);
this.ensureDebugId("projectWizard-window");
getWidget().getElement().getStyle().setPadding(0, Style.Unit.PX);
}
@Override
public void setLoaderVisibility(boolean visible) {
if (visible) {
saveButton.setHTML("<i></i>");
saveButton.setEnabled(false);
} else {
if (isCreatingNewProject) {
saveButton.setText(locale.projectWizardDefaultSaveButtonText());
} else {
saveButton.setText(locale.projectWizardSaveButtonText());
}
saveButton.setEnabled(true);
}
}
@Override
public void showPage(Presenter presenter) {
presenter.go(wizardPanel);
}
@Override
public void showDialog(ProjectWizardMode wizardMode) {
this.isCreatingNewProject = wizardMode == CREATE;
if (wizardMode == CREATE) {
setTitle(locale.projectWizardDefaultTitleText());
saveButton.setText(locale.projectWizardDefaultSaveButtonText());
} else if (wizardMode == UPDATE) {
setTitle(locale.projectWizardTitleText());
saveButton.setText(locale.projectWizardSaveButtonText());
}
show();
}
@Override
protected void onEnterClicked() {
if (isWidgetFocused(saveButton)) {
delegate.onSaveClicked();
return;
}
if (isWidgetFocused(nextStepButton)) {
delegate.onNextClicked();
return;
}
if (isWidgetFocused(previousStepButton)) {
delegate.onBackClicked();
return;
}
if (nextStepButton.isEnabled()) {
delegate.onNextClicked();
return;
}
if (saveButton.isEnabled()) {
delegate.onSaveClicked();
}
}
@Override
public void close() {
hide();
setLoaderVisibility(false);
}
@Override
public void setNextButtonEnabled(boolean enabled) {
nextStepButton.setEnabled(enabled);
}
@Override
public void setFinishButtonEnabled(boolean enabled) {
saveButton.setEnabled(enabled);
}
@Override
public void setPreviousButtonEnabled(boolean enabled) {
previousStepButton.setEnabled(enabled);
}
@Override
public void setDelegate(ActionDelegate delegate) {
this.delegate = delegate;
}
@Override
public Widget asWidget() {
return null;
}
@Override
protected void onClose() {
delegate.onCancelClicked();
}
interface ProjectWizardViewImplUiBinder extends UiBinder<FlowPanel, ProjectWizardViewImpl> {
}
}