/* * (c) Copyright IBM Corp. 2000, 2001. * All Rights Reserved. */ package org.eclipse.compare.internal; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.IOException; import java.util.ResourceBundle; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTException; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.core.runtime.CoreException; import org.eclipse.compare.*; import org.eclipse.compare.contentmergeviewer.ContentMergeViewer; /** */ public class ImageMergeViewer extends ContentMergeViewer { private static final String BUNDLE_NAME= "org.eclipse.compare.internal.ImageMergeViewerResources"; //$NON-NLS-1$ private Object fAncestorImage; private Object fLeftImage; private Object fRightImage; private ImageCanvas fAncestor; private ImageCanvas fLeft; private ImageCanvas fRight; public ImageMergeViewer(Composite parent, int styles, CompareConfiguration mp) { super(styles, ResourceBundle.getBundle(BUNDLE_NAME), mp); buildControl(parent); String title= Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$ getControl().setData(CompareUI.COMPARE_VIEWER_TITLE, title); } protected void updateContent(Object ancestor, Object left, Object right) { fAncestorImage= ancestor; setInput(fAncestor, ancestor); fLeftImage= left; setInput(fLeft, left); fRightImage= right; setInput(fRight, right); } /** * We can't modify the contents of either side we just return null. */ protected byte[] getContents(boolean left) { return null; } public void createControls(Composite composite) { fAncestor= new ImageCanvas(composite, SWT.NO_FOCUS); fLeft= new ImageCanvas(composite, SWT.NO_FOCUS); fRight= new ImageCanvas(composite, SWT.NO_FOCUS); } private static void setInput(ImageCanvas canvas, Object input) { if (canvas != null) { InputStream stream= null; if (input instanceof IStreamContentAccessor) { IStreamContentAccessor sca= (IStreamContentAccessor) input; if (sca != null) { try { stream= sca.getContents(); } catch (CoreException ex) { } } } Image image= null; Display display= canvas.getDisplay(); if (stream != null) { try { image= new Image(display, stream); } catch (SWTException ex) { } } canvas.setImage(image); if (image != null) { canvas.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND)); } else { canvas.setBackground(null); } if (stream != null) { try { stream.close(); } catch (IOException ex) { } } } } protected void handleResizeAncestor(int x, int y, int width, int height) { if (width > 0) { fAncestor.setVisible(true); fAncestor.setBounds(x, y, width, height); } else { fAncestor.setVisible(false); } } protected void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2, int height) { fLeft.setBounds(x, y, width1, height); fRight.setBounds(x+width1+centerWidth, y, width2, height); } protected void copy(boolean leftToRight) { if (leftToRight) { fRightImage= fLeftImage; setInput(fRight, fRightImage); setRightDirty(true); } else { fLeftImage= fRightImage; setInput(fLeft, fLeftImage); setLeftDirty(true); } } }