/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.compare.internal; 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.ui.PlatformUI; 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 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); PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.IMAGE_COMPARE_VIEW); 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) { 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) { // NeedWork } } } Image image= null; Display display= canvas.getDisplay(); if (stream != null) { try { image= new Image(display, stream); } catch (SWTException ex) { // silently ignored } } 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) { // silently ignored } } } } 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); } } }