p2izing the editor
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / 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.URL;
14
15 import org.apache.log4j.Logger;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.events.FocusAdapter;
18 import org.eclipse.swt.events.FocusEvent;
19 import org.eclipse.swt.events.PaintEvent;
20 import org.eclipse.swt.events.PaintListener;
21 import org.eclipse.swt.graphics.Color;
22 import org.eclipse.swt.graphics.Font;
23 import org.eclipse.swt.graphics.Image;
24 import org.eclipse.swt.widgets.Canvas;
25 import org.eclipse.ui.forms.ManagedForm;
26 import org.eclipse.ui.forms.widgets.TableWrapData;
27 import org.eclipse.ui.views.properties.IPropertySource;
28
29 import eu.etaxonomy.cdm.model.taxon.Taxon;
30 import eu.etaxonomy.taxeditor.actions.images.AddImageAction;
31 import eu.etaxonomy.taxeditor.actions.images.RemoveImageAction;
32 import eu.etaxonomy.taxeditor.editor.CompositeBorderDecorator;
33 import eu.etaxonomy.taxeditor.editor.ContextMenu;
34 import eu.etaxonomy.taxeditor.editor.GroupComposite;
35 import eu.etaxonomy.taxeditor.editor.GroupedComposite;
36 import eu.etaxonomy.taxeditor.editor.name.AcceptedNameComposite;
37 import eu.etaxonomy.taxeditor.propertysheet.images.ImagePropertySource;
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 private URL url;
48 protected Image image;
49
50 private Canvas canvas;
51
52 private FocusAdapter focusListener;
53
54 /**
55 * @param groupComposite
56 * @param form
57 * @param taxon
58 * @param url
59 */
60 public ImageComposite(GroupComposite groupComposite, ManagedForm form,
61 Taxon taxon, URL url) {
62 super(groupComposite, form);
63
64 this.url = url;
65
66 setIsDraggable(false);
67 // setIcon(AcceptedNameComposite.ACCEPTED_ICON);
68 setIndent(AcceptedNameComposite.ACCEPTED_INDENT);
69
70 createImage(url);
71
72 createMenu();
73 createBorderSupport();
74
75 }
76
77 protected void createControl() {
78 super.createControl();
79
80 Color groupBackgroundColor = getDisplay().getSystemColor(SWT.COLOR_WHITE);
81 setBackground(groupBackgroundColor);
82 }
83
84 /**
85 * @param url
86 */
87 private void createImage(URL url) {
88 image = ImagesController.getImage(url);
89
90 // Not optimal - why should getting composite to size to img be so obtuse?!
91 // canvas = new Canvas(this, SWT.NO_REDRAW_RESIZE);
92 canvas = new Canvas(this, SWT.NONE);
93
94 // if (ImageDescriptor. image.getImageData()
95
96 TableWrapData layoutData = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP);
97 layoutData.heightHint = image.getBounds().height;
98 canvas.setLayoutData(layoutData);
99
100 canvas.addPaintListener (new PaintListener () {
101 public void paintControl (PaintEvent e) {
102 if (image != null) {
103 canvas.setBounds(image.getBounds());
104 e.gc.drawImage (image, 0, 0);
105 }
106 }
107 });
108
109 canvas.setBounds(image.getBounds());
110
111 focusListener = new FocusAdapter() {
112 public void focusGained(FocusEvent e) {
113 setFocus();
114 }
115 };
116 canvas.addFocusListener(focusListener);
117 }
118
119 /**
120 *
121 */
122 private void createMenu() {
123 ContextMenu contextMenu = createContextMenu();
124
125 contextMenu.addAction(new RemoveImageAction(taxon, url));
126 contextMenu.addAction(new AddImageAction(taxon));
127 }
128
129 protected ContextMenu createContextMenu() {
130
131 ContextMenu contextMenu = new ContextMenu(this);
132 canvas.setMenu(contextMenu.getMenu());
133 return contextMenu;
134 }
135
136 /* (non-Javadoc)
137 * @see eu.etaxonomy.taxeditor.editor.GroupedComposite#getViewerFont()
138 */
139 @Override
140 protected Font getViewerFont() {
141 // TODO Auto-generated method stub
142 return null;
143 }
144
145 /* (non-Javadoc)
146 * @see eu.etaxonomy.taxeditor.editor.IHasPropertySource#getPropertySource()
147 */
148 public IPropertySource getPropertySource() {
149 return new ImagePropertySource(getTaxon(), url);
150 }
151
152 public void createBorderSupport() {
153
154 // if (textViewer == null) {
155 // logger.warn("Could not create border support - getTextViewer() returned null.");
156 // } else {
157 CompositeBorderDecorator borderDecorator = new CompositeBorderDecorator(
158 canvas, managedForm);
159 setBorderDecorator(borderDecorator);
160 borderDecorator.setLoseFocus(false);
161 this.addFocusListener(borderDecorator);
162 // textViewer.getTextWidget().addFocusListener(borderDecorator);
163 // }
164 }
165
166 public void dispose () {
167 super.dispose();
168
169 if (getBorderDecorator() != null) {
170 this.removeFocusListener(getBorderDecorator());
171 }
172
173 if (image != null) {
174 image.dispose();
175 }
176 }
177 }