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