1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.vectomatic.svg.edit.client.utils;
19
20 import java.util.ArrayList;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.vectomatic.svg.edit.client.SvgrealApp;
26
27 import com.google.gwt.event.dom.client.LoadEvent;
28 import com.google.gwt.event.dom.client.LoadHandler;
29 import com.google.gwt.event.logical.shared.HasInitializeHandlers;
30 import com.google.gwt.event.logical.shared.InitializeEvent;
31 import com.google.gwt.event.logical.shared.InitializeHandler;
32 import com.google.gwt.event.shared.GwtEvent;
33 import com.google.gwt.event.shared.HandlerRegistration;
34 import com.google.gwt.resources.client.ImageResource;
35
36
37
38
39
40 public class ImageLoader implements HasInitializeHandlers {
41 protected List<SimpleImage> images;
42 protected ImageResource[] resources;
43
44
45
46
47 public ImageLoader() {
48 images = new ArrayList<SimpleImage>();
49 resources = new ImageResource[0];
50 }
51
52
53
54
55
56
57
58 public void loadImages(ImageResource[] resources) {
59 images.clear();
60 this.resources = resources;
61 readNext();
62 }
63
64 private void readNext() {
65 if (images.size() < resources.length) {
66 final SimpleImage image = new SimpleImage();
67 images.add(image);
68 image.addLoadHandler(new LoadHandler() {
69 @Override
70 public void onLoad(LoadEvent event) {
71 readNext();
72 }
73 });
74 image.setSrc(resources[images.size() - 1].getSafeUri().asString());
75 } else {
76 InitializeEvent.fire(this);
77 }
78 }
79
80
81
82
83
84
85
86
87 public Map<ImageResource, SimpleImage> getImages() {
88 if (resources.length != images.size()) {
89 throw new IllegalStateException();
90 }
91 Map<ImageResource, SimpleImage> resourceToImage = new HashMap<ImageResource, SimpleImage>();
92 for (int i = 0; i < resources.length; i++) {
93 resourceToImage.put(resources[i], images.get(i));
94 }
95 return resourceToImage;
96 }
97
98 @Override
99 public void fireEvent(GwtEvent<?> event) {
100 SvgrealApp.getApp().getEventBus().fireEventFromSource(event, this);
101
102 }
103
104 @Override
105 public HandlerRegistration addInitializeHandler(InitializeHandler handler) {
106 return SvgrealApp.getApp().getEventBus().addHandlerToSource(InitializeEvent.getType(), this, handler);
107 }
108 }