/******************************************************************************* * Copyright (c) 2008, 2011 Obeo. * 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: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.eef.runtime.ui.widgets.imageviewer; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.eef.runtime.EEFRuntimePlugin; import org.eclipse.emf.eef.runtime.ui.utils.EditingUtils; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; /** * @author <a href="mailto:goulwen.lefur@obeo.fr">Goulwen Le Fur</a> */ public class EEFImageViewer extends Composite implements ISelectionProvider { private static final String[] EXTENSIONS = new String[] { "*.png", "*.bmp", "*.jpeg", "*.jpg", "*.gif", "*.*"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ private Canvas viewerCanvas; private String key; private String imagePath; private List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>(); /** * @param parent * @param style */ public EEFImageViewer(Composite parent, int style) { super(parent, style); setLayout(new FillLayout()); viewerCanvas = new Canvas(this, SWT.NONE); viewerCanvas.addMouseListener(new MouseAdapter() { /** * {@inheritDoc} * * @see org.eclipse.swt.events.MouseAdapter#mouseDoubleClick(org.eclipse.swt.events.MouseEvent) */ @Override public void mouseDoubleClick(MouseEvent e) { if (isEnabled()) { FileDialog dialog = new FileDialog(getParent().getShell(), SWT.OPEN); dialog.setFilterExtensions(EXTENSIONS); String fn = dialog.open(); if (fn != null) { updateImage(fn); SelectionChangedEvent event = new SelectionChangedEvent(EEFImageViewer.this, new StructuredSelection(fn)); for (ISelectionChangedListener listener : listeners) { listener.selectionChanged(event); } } } } }); EditingUtils.setEEFtype(viewerCanvas, "eef::ImageViewer"); } /** * @param key * the key to set */ public void initViewer(String key, String imagePath) { this.key = key; updateImage(imagePath); } /** * Sets the given ID to the EMFComboViewer * * @param id * the ID to give */ public void setID(Object id) { EditingUtils.setID(viewerCanvas, id); } /** * @return the ID of the EObjectFlatComboViewer */ public Object getID() { return EditingUtils.getID(viewerCanvas); } /** * */ private void updateImage(String imagePath) { this.imagePath = imagePath; EEFRuntimePlugin.getDefault().registerImage(key, imagePath); Image image = EEFRuntimePlugin.getDefault().getRegisteredImage(key); if (image != null) { Image newImage = null; if (this.getLayoutData() instanceof GridData) { GridData gridData = (GridData)this.getLayoutData(); newImage = new Image(image.getDevice(), image.getImageData().scaledTo(gridData.widthHint, gridData.heightHint)); } if (newImage == null) { viewerCanvas.setBackgroundImage(image); } else { viewerCanvas.setBackgroundImage(newImage); } } viewerCanvas.redraw(); } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener) */ public void addSelectionChangedListener(ISelectionChangedListener listener) { listeners.add(listener); } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection() */ public ISelection getSelection() { if (imagePath != null) return new StructuredSelection(imagePath); else return new StructuredSelection(""); //$NON-NLS-1$ } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener) */ public void removeSelectionChangedListener(ISelectionChangedListener listener) { listeners.remove(listener); } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection) */ public void setSelection(ISelection selection) { if (selection instanceof StructuredSelection) { StructuredSelection sSelection = (StructuredSelection)selection; if (sSelection.getFirstElement() instanceof String) { String path = (String)sSelection.getFirstElement(); updateImage(path); } } } }