3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.editor
.images
;
14 import java
.net
.URISyntaxException
;
16 import org
.apache
.log4j
.Logger
;
17 import org
.eclipse
.swt
.SWT
;
18 import org
.eclipse
.swt
.events
.FocusAdapter
;
19 import org
.eclipse
.swt
.events
.FocusEvent
;
20 import org
.eclipse
.swt
.events
.PaintEvent
;
21 import org
.eclipse
.swt
.events
.PaintListener
;
22 import org
.eclipse
.swt
.graphics
.Color
;
23 import org
.eclipse
.swt
.graphics
.Font
;
24 import org
.eclipse
.swt
.graphics
.Image
;
25 import org
.eclipse
.swt
.widgets
.Canvas
;
26 import org
.eclipse
.ui
.forms
.widgets
.TableWrapData
;
27 import org
.eclipse
.ui
.views
.properties
.IPropertySource
;
29 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
30 import eu
.etaxonomy
.cdm
.model
.media
.ImageFile
;
31 import eu
.etaxonomy
.taxeditor
.editor
.CompositeBorderDecorator
;
32 import eu
.etaxonomy
.taxeditor
.editor
.GroupComposite
;
33 import eu
.etaxonomy
.taxeditor
.editor
.GroupedComposite
;
34 import eu
.etaxonomy
.taxeditor
.editor
.description
.DescriptionElementComposite
;
35 import eu
.etaxonomy
.taxeditor
.editor
.name
.AcceptedNameComposite
;
36 import eu
.etaxonomy
.taxeditor
.propertysheet
.images
.ImagePropertySource
;
37 import eu
.etaxonomy
.taxeditor
.store
.model
.ImageResources
;
44 public class ImageComposite
extends GroupedComposite
{
45 private static final Logger logger
= Logger
.getLogger(ImageComposite
.class);
48 protected Image image
;
50 private Canvas canvas
;
52 private FocusAdapter focusListener
;
54 private ImageFile imageFile
;
57 * @param groupComposite
62 public ImageComposite(TaxonImageEditor editor
, GroupComposite groupComposite
, ImageFile imageFile
) {
63 super(editor
, groupComposite
);
67 this.imageFile
= imageFile
;
69 setIsDraggable(false);
70 // setIcon(AcceptedNameComposite.ACCEPTED_ICON);
71 setIndent(AcceptedNameComposite
.ACCEPTED_INDENT
);
73 createImage(imageFile
);
75 this.setMenu(editor
.getMenu());
77 createBorderSupport();
81 protected void createControl() {
82 super.createControl();
84 Color groupBackgroundColor
= getDisplay().getSystemColor(SWT
.COLOR_WHITE
);
85 setBackground(groupBackgroundColor
);
91 private void createImage(ImageFile imageFile
) {
95 // TODO ImageFile.getUri should return a URI
97 uri
= new URI(imageFile
.getUri());
98 } catch (URISyntaxException e1
) {
99 // TODO this should never happen
100 e1
.printStackTrace();
104 image
= ImageResources
.getImage(uri
);
106 // Not optimal - why should getting composite to size to img be so obtuse?!
107 // canvas = new Canvas(this, SWT.NO_REDRAW_RESIZE);
108 canvas
= new Canvas(this, SWT
.NONE
);
110 TableWrapData layoutData
= new TableWrapData(TableWrapData
.LEFT
, TableWrapData
.TOP
);
111 layoutData
.heightHint
= image
.getBounds().height
;
112 canvas
.setLayoutData(layoutData
);
114 canvas
.addPaintListener (new PaintListener () {
115 public void paintControl (PaintEvent e
) {
117 canvas
.setBounds(image
.getBounds());
118 e
.gc
.drawImage (image
, 0, 0);
123 canvas
.setBounds(image
.getBounds());
125 focusListener
= new FocusAdapter() {
126 public void focusGained(FocusEvent e
) {
130 canvas
.addFocusListener(focusListener
);
135 * @see eu.etaxonomy.taxeditor.editor.GroupedComposite#getViewerFont()
138 protected Font
getViewerFont() {
143 * @see eu.etaxonomy.taxeditor.editor.IHasPropertySource#getPropertySource()
145 public IPropertySource
getPropertySource() {
146 return new ImagePropertySource(getTaxon(), imageFile
);
149 public void createBorderSupport() {
151 CompositeBorderDecorator borderDecorator
= new CompositeBorderDecorator(
152 canvas
, managedForm
);
153 setBorderDecorator(borderDecorator
);
154 borderDecorator
.setLoseFocus(false);
155 this.addFocusListener(borderDecorator
);
159 public void dispose () {
162 if (getBorderDecorator() != null) {
163 this.removeFocusListener(getBorderDecorator());