]> git.argeo.org Git - lgpl/argeo-commons.git/blob - widgets/EditableImage.java
Prepare next development cycle
[lgpl/argeo-commons.git] / widgets / EditableImage.java
1 package org.argeo.cms.ui.widgets;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.argeo.api.cms.Cms2DSize;
9 import org.argeo.cms.swt.CmsSwtUtils;
10 import org.argeo.cms.ui.util.CmsUiUtils;
11 import org.eclipse.swt.graphics.Point;
12 import org.eclipse.swt.widgets.Composite;
13 import org.eclipse.swt.widgets.Control;
14 import org.eclipse.swt.widgets.Label;
15 import org.eclipse.swt.widgets.Text;
16
17 /** A stylable and editable image. */
18 public abstract class EditableImage extends StyledControl {
19 private static final long serialVersionUID = -5689145523114022890L;
20 private final static Log log = LogFactory.getLog(EditableImage.class);
21
22 private Cms2DSize preferredImageSize;
23 private Boolean loaded = false;
24
25 public EditableImage(Composite parent, int swtStyle) {
26 super(parent, swtStyle);
27 }
28
29 public EditableImage(Composite parent, int swtStyle, Cms2DSize preferredImageSize) {
30 super(parent, swtStyle);
31 this.preferredImageSize = preferredImageSize;
32 }
33
34 public EditableImage(Composite parent, int style, Node node, boolean cacheImmediately, Cms2DSize preferredImageSize)
35 throws RepositoryException {
36 super(parent, style, node, cacheImmediately);
37 this.preferredImageSize = preferredImageSize;
38 }
39
40 @Override
41 protected void setContainerLayoutData(Composite composite) {
42 // composite.setLayoutData(fillWidth());
43 }
44
45 @Override
46 protected void setControlLayoutData(Control control) {
47 // control.setLayoutData(fillWidth());
48 }
49
50 /** To be overriden. */
51 protected String createImgTag() throws RepositoryException {
52 return CmsUiUtils
53 .noImg(preferredImageSize != null ? preferredImageSize : new Cms2DSize(getSize().x, getSize().y));
54 }
55
56 protected Label createLabel(Composite box, String style) {
57 Label lbl = new Label(box, getStyle());
58 // lbl.setLayoutData(CmsUiUtils.fillWidth());
59 CmsSwtUtils.markup(lbl);
60 CmsSwtUtils.style(lbl, style);
61 if (mouseListener != null)
62 lbl.addMouseListener(mouseListener);
63 load(lbl);
64 return lbl;
65 }
66
67 /** To be overriden. */
68 protected synchronized Boolean load(Control control) {
69 String imgTag;
70 try {
71 imgTag = createImgTag();
72 } catch (Exception e) {
73 // throw new CmsException("Cannot retrieve image", e);
74 log.error("Cannot retrieve image", e);
75 imgTag = CmsUiUtils.noImg(preferredImageSize);
76 loaded = false;
77 }
78
79 if (imgTag == null) {
80 loaded = false;
81 imgTag = CmsUiUtils.noImg(preferredImageSize);
82 } else
83 loaded = true;
84 if (control != null) {
85 ((Label) control).setText(imgTag);
86 control.setSize(preferredImageSize != null
87 ? new Point(preferredImageSize.getWidth(), preferredImageSize.getHeight())
88 : getSize());
89 } else {
90 loaded = false;
91 }
92 getParent().layout();
93 return loaded;
94 }
95
96 public void setPreferredSize(Cms2DSize size) {
97 this.preferredImageSize = size;
98 if (!loaded) {
99 load((Label) getControl());
100 }
101 }
102
103 protected Text createText(Composite box, String style) {
104 Text text = new Text(box, getStyle());
105 CmsSwtUtils.style(text, style);
106 return text;
107 }
108
109 public Cms2DSize getPreferredImageSize() {
110 return preferredImageSize;
111 }
112
113 }