]> git.argeo.org Git - lgpl/argeo-commons.git/blob - swt/org.argeo.cms.swt/src/org/argeo/cms/swt/AbstractSwtImageManager.java
Work on CMS file system implementation
[lgpl/argeo-commons.git] / swt / org.argeo.cms.swt / src / org / argeo / cms / swt / AbstractSwtImageManager.java
1 package org.argeo.cms.swt;
2
3 import java.net.URI;
4 import java.net.URLEncoder;
5 import java.nio.charset.StandardCharsets;
6
7 import org.argeo.api.cms.ux.Cms2DSize;
8 import org.argeo.cms.ux.AbstractImageManager;
9 import org.eclipse.swt.graphics.ImageData;
10 import org.eclipse.swt.widgets.Control;
11 import org.eclipse.swt.widgets.Label;
12
13 /** Manages only public images so far. */
14 public abstract class AbstractSwtImageManager<M> extends AbstractImageManager<Control, M> {
15 protected abstract ImageData getSwtImageData(M node);
16
17 protected abstract String noImg(Cms2DSize size);
18
19 @Override
20 public Boolean load(M node, Control control, Cms2DSize preferredSize, URI link) {
21 Cms2DSize imageSize = getImageSize(node);
22 Cms2DSize size;
23 String imgTag = null;
24 if (preferredSize == null || imageSize.width() == 0 || imageSize.height() == 0
25 || (preferredSize.width() == 0 && preferredSize.height() == 0)) {
26 if (imageSize.width() != 0 && imageSize.height() != 0) {
27 // actual image size if completely known
28 size = imageSize;
29 } else {
30 // no image if not completely known
31 size = resizeTo(NO_IMAGE_SIZE, preferredSize != null ? preferredSize : imageSize);
32 imgTag = noImg(size);
33 }
34
35 } else if (preferredSize.width() != 0 && preferredSize.height() != 0) {
36 // given size if completely provided
37 size = preferredSize;
38 } else {
39 // at this stage :
40 // image is completely known
41 assert imageSize.width() != 0 && imageSize.height() != 0;
42 // one and only one of the dimension as been specified
43 assert preferredSize.width() == 0 || preferredSize.height() == 0;
44 size = resizeTo(imageSize, preferredSize);
45 }
46
47 boolean loaded = false;
48 if (control == null)
49 return loaded;
50
51 if (control instanceof Label) {
52 if (imgTag == null) {
53 // IMAGE RETRIEVED HERE
54 imgTag = getImageTag(node, size);
55 //
56 if (imgTag == null)
57 imgTag = noImg(size);
58 else
59 loaded = true;
60 }
61
62 Label lbl = (Label) control;
63 StringBuilder sb = new StringBuilder();
64 if (link != null)
65 sb.append("<a href='").append(URLEncoder.encode(link.toString(), StandardCharsets.UTF_8)).append("'>");
66 sb.append(imgTag);
67 if (link != null)
68 sb.append("</a>");
69
70 lbl.setText(imgTag);
71 // lbl.setSize(size);
72 // } else if (control instanceof FileUpload) {
73 // FileUpload lbl = (FileUpload) control;
74 // lbl.setImage(CmsUiUtils.noImage(size));
75 // lbl.setSize(new Point(size.getWidth(), size.getHeight()));
76 // return loaded;
77 } else
78 loaded = false;
79
80 return loaded;
81 }
82
83 public Cms2DSize getImageSize(M node) {
84 // TODO optimise
85 ImageData imageData = getSwtImageData(node);
86 return new Cms2DSize(imageData.width, imageData.height);
87 }
88
89 }