package org.csstudio.sds.ui.sdslibrary.views;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.csstudio.sds.internal.persistence.PersistenceUtil;
import org.csstudio.sds.model.DisplayModel;
import org.csstudio.sds.ui.internal.editor.DisplayEditor;
import org.csstudio.sds.ui.thumbnail.SdsThumbnailCreator;
import org.csstudio.sds.ui.thumbnail.SdsThumbnailPanel;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.swt.dnd.DragSourceEffect;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
public class SdsLibraryDragSourceEffect extends DragSourceEffect {
private final SdsThumbnailPanel sdsThumbnailPanel;
private final IWorkbenchPage workbenchPage;
public SdsLibraryDragSourceEffect(SdsThumbnailPanel panel,
IWorkbenchPage workbenchPage) {
super(panel);
this.sdsThumbnailPanel = panel;
this.workbenchPage = workbenchPage;
}
@Override
public void dragStart(DragSourceEvent event) {
File selectedFile = sdsThumbnailPanel.getSelectedFile();
if (selectedFile != null) {
Image img = createDragImage(selectedFile);
if (img != null) {
event.image = img;
}
}
}
private Image createDragImage(File file) {
// Get DisplayModel for file
DisplayModel model = new DisplayModel();
FileInputStream fip = null;
try {
fip = new FileInputStream(file);
PersistenceUtil.syncFillModel(model, fip);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fip.close();
} catch (IOException e) {
e.printStackTrace();
}
}
int maxSize = Math.max(model.getWidth(), model.getHeight());
double zoom = 1.0;
IEditorPart activeEditor = workbenchPage.getActiveEditor();
if (activeEditor instanceof DisplayEditor) {
ScalableFreeformRootEditPart rootEditPart = (ScalableFreeformRootEditPart) ((DisplayEditor) activeEditor)
.getGraphicalViewer().getRootEditPart();
zoom = rootEditPart.getZoomManager().getZoom();
}
SdsThumbnailCreator thumbnailCreator = new SdsThumbnailCreator();
ImageData imageData = thumbnailCreator.createImageWithZoomingIn(model,
(int) (maxSize * zoom), Display.getDefault());
return new Image(Display.getDefault(), imageData);
}
}