/*******************************************************************************
* 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.imageviewer;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import org.eclipse.che.ide.CoreLocalizationConstant;
import org.eclipse.che.ide.api.dialogs.CancelCallback;
import org.eclipse.che.ide.api.dialogs.ConfirmCallback;
import org.eclipse.che.ide.api.dialogs.DialogFactory;
import org.eclipse.che.ide.api.editor.AbstractEditorPresenter;
import org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;
import org.eclipse.che.ide.api.editor.EditorInput;
import org.eclipse.che.ide.api.event.FileEvent;
import org.eclipse.che.ide.api.event.FileEvent.FileEventHandler;
import org.eclipse.che.ide.api.machine.WsAgentURLModifier;
import org.eclipse.che.ide.api.parts.WorkspaceAgent;
import org.eclipse.che.ide.resource.Path;
import org.vectomatic.dom.svg.ui.SVGResource;
import javax.validation.constraints.NotNull;
/**
* Is used for displaying images in editor area.
*
* @author Ann Shumilova
*/
public class ImageViewer extends AbstractEditorPresenter implements FileEventHandler {
private ImageViewerResources resources;
private CoreLocalizationConstant constant;
private DialogFactory dialogFactory;
private WorkspaceAgent workspaceAgent;
private WsAgentURLModifier urlModifier;
private ScrollPanel editorView;
@Inject
public ImageViewer(ImageViewerResources resources,
CoreLocalizationConstant constant,
DialogFactory dialogFactory,
EventBus eventBus,
WorkspaceAgent workspaceAgent,
WsAgentURLModifier urlModifier) {
this.resources = resources;
this.constant = constant;
this.dialogFactory = dialogFactory;
this.workspaceAgent = workspaceAgent;
this.urlModifier = urlModifier;
resources.imageViewerCss().ensureInjected();
eventBus.addHandler(FileEvent.TYPE, this);
}
/** {@inheritDoc} */
@Override
public void doSave() {
}
@Override
public void doSave(AsyncCallback<EditorInput> callback) {
}
/** {@inheritDoc} */
@Override
public void doSaveAs() {
}
/** {@inheritDoc} */
@Override
public void activate() {
}
/** {@inheritDoc} */
@NotNull
@Override
public String getTitle() {
return input.getName();
}
/** {@inheritDoc} */
@Override
public SVGResource getTitleImage() {
return input.getSVGResource();
}
/** {@inheritDoc} */
@Override
public String getTitleToolTip() {
return null;
}
/** {@inheritDoc} */
@Override
public void onClose(@NotNull final AsyncCallback<Void> callback) {
if (isDirty()) {
dialogFactory.createConfirmDialog(
constant.askWindowCloseTitle(),
constant.messagesSaveChanges(getEditorInput().getName()),
new ConfirmCallback() {
@Override
public void accepted() {
doSave();
handleClose();
callback.onSuccess(null);
}
},
new CancelCallback() {
@Override
public void cancelled() {
handleClose();
callback.onSuccess(null);
}
}).show();
} else {
handleClose();
callback.onSuccess(null);
}
}
/** {@inheritDoc} */
@Override
public void go(AcceptsOneWidget container) {
VerticalPanel panel = new VerticalPanel();
panel.setSize("100%", "100%");
panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
panel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
panel.add(getImage());
editorView = new ScrollPanel(panel);
editorView.getElement().getFirstChildElement().getStyle().setHeight(100, Unit.PCT);
container.setWidget(editorView);
}
/**
* Image to display file with image type.
*
* @return {@link Image}
*/
private Image getImage() {
String contentLink = urlModifier.modify(input.getFile().getContentUrl());
Image image = (contentLink != null) ? new Image(contentLink) : new Image();
image.setStyleName(resources.imageViewerCss().imageViewer());
return image;
}
/** {@inheritDoc} */
@Override
protected void initializeEditor(OpenEditorCallback callback) {
}
/** {@inheritDoc} */
@Override
public void close(final boolean save) {
// nothing to do
}
/** {@inheritDoc} */
@Override
public IsWidget getView() {
return editorView;
}
/** {@inheritDoc} */
@Override
public void onFileOperation(FileEvent event) {
if (event.getOperationType() != FileEvent.FileOperation.CLOSE) {
return;
}
final Path eventFilePath = event.getFile().getLocation();
final Path filePath = input.getFile().getLocation();
if (filePath.equals(eventFilePath)) {
workspaceAgent.removePart(this);
}
}
}