Moving editor sources back into trunk
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / editor / images / ImageComposite.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10
11 package eu.etaxonomy.taxeditor.editor.images;
12
13 import java.net.URI;
14 import java.net.URISyntaxException;
15
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;
28
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;
38
39 /**
40 * @author p.ciardelli
41 * @created 30.03.2009
42 * @version 1.0
43 */
44 public class ImageComposite extends GroupedComposite {
45 private static final Logger logger = Logger.getLogger(ImageComposite.class);
46
47
48 protected Image image;
49
50 private Canvas canvas;
51
52 private FocusAdapter focusListener;
53
54 private ImageFile imageFile;
55
56 /**
57 * @param groupComposite
58 * @param form
59 * @param taxon
60 * @param url
61 */
62 public ImageComposite(TaxonImageEditor editor, GroupComposite groupComposite, ImageFile imageFile) {
63 super(editor, groupComposite);
64
65
66
67 this.imageFile = imageFile;
68
69 setIsDraggable(false);
70 // setIcon(AcceptedNameComposite.ACCEPTED_ICON);
71 setIndent(AcceptedNameComposite.ACCEPTED_INDENT);
72
73 createImage(imageFile);
74
75 this.setMenu(editor.getMenu());
76
77 createBorderSupport();
78
79 }
80
81 protected void createControl() {
82 super.createControl();
83
84 Color groupBackgroundColor = getDisplay().getSystemColor(SWT.COLOR_WHITE);
85 setBackground(groupBackgroundColor);
86 }
87
88 /**
89 * @param url
90 */
91 private void createImage(ImageFile imageFile) {
92
93 URI uri = null;
94
95 // TODO ImageFile.getUri should return a URI
96 try {
97 uri = new URI(imageFile.getUri());
98 } catch (URISyntaxException e1) {
99 // TODO this should never happen
100 e1.printStackTrace();
101 }
102
103
104 image = ImageResources.getImage(uri);
105
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);
109
110 TableWrapData layoutData = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP);
111 layoutData.heightHint = image.getBounds().height;
112 canvas.setLayoutData(layoutData);
113
114 canvas.addPaintListener (new PaintListener () {
115 public void paintControl (PaintEvent e) {
116 if (image != null) {
117 canvas.setBounds(image.getBounds());
118 e.gc.drawImage (image, 0, 0);
119 }
120 }
121 });
122
123 canvas.setBounds(image.getBounds());
124
125 focusListener = new FocusAdapter() {
126 public void focusGained(FocusEvent e) {
127 setFocus();
128 }
129 };
130 canvas.addFocusListener(focusListener);
131 }
132
133
134 /* (non-Javadoc)
135 * @see eu.etaxonomy.taxeditor.editor.GroupedComposite#getViewerFont()
136 */
137 @Override
138 protected Font getViewerFont() {
139 return null;
140 }
141
142 /* (non-Javadoc)
143 * @see eu.etaxonomy.taxeditor.editor.IHasPropertySource#getPropertySource()
144 */
145 public IPropertySource getPropertySource() {
146 return new ImagePropertySource(getTaxon(), imageFile);
147 }
148
149 public void createBorderSupport() {
150
151 CompositeBorderDecorator borderDecorator = new CompositeBorderDecorator(
152 canvas, managedForm);
153 setBorderDecorator(borderDecorator);
154 borderDecorator.setLoseFocus(false);
155 this.addFocusListener(borderDecorator);
156
157 }
158
159 public void dispose () {
160 super.dispose();
161
162 if (getBorderDecorator() != null) {
163 this.removeFocusListener(getBorderDecorator());
164 }
165
166 if (image != null) {
167 image.dispose();
168 }
169 }
170 }