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