1
|
1 package de.mpg.mpiwg.itgroup.digilib.digiImage;
|
|
2
|
|
3 import java.util.ArrayList;
|
20
|
4 import java.util.HashMap;
|
1
|
5 import java.util.List;
|
20
|
6 import java.util.Map;
|
1
|
7
|
|
8 import org.apache.commons.lang.StringUtils;
|
20
|
9 import org.eclipse.jface.viewers.ISelection;
|
|
10 import org.eclipse.jface.viewers.ISelectionChangedListener;
|
|
11 import org.eclipse.jface.viewers.ISelectionProvider;
|
|
12 import org.eclipse.jface.viewers.SelectionChangedEvent;
|
|
13 import org.eclipse.jface.viewers.StructuredSelection;
|
1
|
14 import org.eclipse.swt.graphics.Point;
|
|
15
|
20
|
16
|
9
|
17 /** Contains methods to manipulate an digilib image @see {#link de.mpiwg.itgroup.digilib.digiImage.Digimage}.
|
|
18 * The parameters are documented at the digilib pages @see {@link http://developer.berlios.de/docman/display_doc.php?docid=106&group_id=251}.
|
|
19 *
|
|
20 */
|
1
|
21
|
20
|
22 public class DigiImageController{
|
1
|
23
|
9
|
24 public static String VMIR="vmir"; // vertical mirroring
|
|
25 public static String HMIR="hmir"; // horizontal mirroring
|
|
26
|
|
27 public DigiImage digiImage; // the image to be controlled.
|
|
28 //private DigiImageParameter parameter;
|
1
|
29
|
20
|
30
|
1
|
31 protected DigiImageController(){}
|
|
32
|
9
|
33 /** Create a new controller on the image object.
|
|
34 *
|
|
35 * @param di
|
|
36 */
|
1
|
37 public DigiImageController(DigiImage di){
|
|
38 this.digiImage=di;
|
|
39 }
|
|
40
|
|
41
|
|
42
|
9
|
43 /** Mirrors the image
|
|
44 * @param modes can be @see {@value #VMIR} or {@link #HMIR}.
|
|
45 */
|
1
|
46 public void mir(String mode) {
|
|
47
|
|
48 DigiImageParameter dp = digiImage.getParameter();
|
|
49
|
|
50 String parameter = dp.getMo();
|
|
51
|
|
52
|
|
53 // mo kann mehrere durch komma getrennte parameter haben
|
|
54 String[] splittmo= parameter.split(",");
|
9
|
55 Boolean hasMir = false;
|
1
|
56 List<String> newmo = new ArrayList<String>();
|
|
57 for(String m: splittmo){
|
|
58 if (m.equals(mode)){
|
9
|
59 hasMir=true;
|
1
|
60 } else {
|
|
61 newmo.add(m);
|
|
62 }
|
|
63 }
|
9
|
64 if(!hasMir){ // kein hmir dann dazufuegen
|
1
|
65 newmo.add(mode);
|
|
66 }
|
|
67 String newmoString = StringUtils.join(newmo,",");
|
|
68
|
|
69 dp.setMo(newmoString);
|
|
70
|
|
71
|
|
72 digiImage.setParameter(dp);
|
|
73 digiImage.redraw();
|
|
74 }
|
9
|
75
|
1
|
76
|
|
77 public void vmir() {
|
9
|
78 mir(VMIR);
|
1
|
79
|
|
80 }
|
|
81
|
|
82 public void hmir() {
|
9
|
83 mir(HMIR);
|
1
|
84
|
|
85 }
|
|
86
|
|
87 public void rotate(float rotateValue) {
|
|
88 digiImage.getParameter().setRot(rotateValue);
|
|
89 digiImage.redraw();
|
|
90 }
|
|
91
|
|
92
|
|
93
|
|
94
|
9
|
95 /** Zoom the area given by the rectangle (x,y), (x2,y2). Alle point are given in absolute coordinates.
|
|
96 * @param x
|
|
97 * @param y
|
|
98 * @param x2
|
|
99 * @param y2
|
|
100 */
|
1
|
101 public void zoomArea(int x, int y, int x2, int y2) {
|
|
102
|
|
103 Point size = digiImage.getLabel().getSize();
|
|
104
|
|
105 float relx = new Float(x)/new Float(size.x);
|
|
106 float rely = new Float(y)/new Float(size.y);
|
|
107
|
|
108 float relx2 = new Float(x2)/new Float(size.x);
|
|
109 float rely2 = new Float(y2)/new Float(size.y);
|
|
110
|
|
111 DigiImageParameter dp = digiImage.getParameter();
|
|
112
|
|
113 float Ww = dp.getWw();
|
|
114 float Wh = dp.getWh();
|
|
115
|
|
116 float Wx = dp.getWx();
|
|
117 float Wy = dp.getWy();
|
|
118
|
|
119
|
|
120 float nWx = relx*Ww+Wx;
|
|
121 float nWy = rely*Wh+Wy;
|
|
122
|
|
123 float nWw = (relx2-relx)*Ww;
|
|
124 float nWh = (rely2-rely)*Wh;
|
|
125
|
|
126
|
|
127
|
|
128 dp.setWx(nWx);
|
|
129 dp.setWy(nWy);
|
|
130 dp.setWw(nWw);
|
|
131 dp.setWh(nWh);
|
|
132 digiImage.setParameter(dp);
|
|
133 digiImage.redraw();
|
|
134
|
|
135
|
|
136 // setRot(rotateValue);
|
|
137 }
|
|
138
|
9
|
139 /**
|
|
140 * Show the whole image.
|
|
141 *
|
|
142 */
|
1
|
143 public void zoomFull(){
|
|
144 DigiImageParameter dp = digiImage.getParameter();
|
|
145 dp.setWw(1);
|
|
146 dp.setWh(1);
|
|
147
|
|
148 dp.setWx(0);
|
|
149 dp.setWy(0);
|
|
150
|
|
151 digiImage.setParameter(dp);
|
|
152 digiImage.redraw();
|
|
153 }
|
|
154
|
9
|
155 /**
|
|
156 * scales the image down (ws --> ws-1)
|
|
157 *
|
|
158 */
|
1
|
159 public void scaleDown() {
|
|
160 DigiImageParameter dp = digiImage.getParameter();
|
|
161 float ws = dp.getWs();
|
|
162 if (ws>1){
|
|
163 dp.setWs(ws-1);
|
|
164 digiImage.setParameter(dp);
|
|
165 digiImage.redraw();
|
|
166
|
|
167 }
|
|
168
|
|
169 }
|
|
170
|
9
|
171 /**
|
|
172 * scales the image up (ws --> ws+1)
|
|
173 *
|
|
174 */
|
1
|
175 public void scaleUp() {
|
|
176 DigiImageParameter dp = digiImage.getParameter();
|
|
177 float ws = dp.getWs();
|
|
178
|
|
179 dp.setWs(ws+1);
|
|
180 digiImage.setParameter(dp);
|
|
181 digiImage.redraw();
|
|
182
|
|
183
|
|
184
|
|
185
|
|
186 }
|
|
187
|
9
|
188 /**
|
|
189 * If the image object points to a folder the previous image in the folder is displayed.
|
|
190 *
|
|
191 */
|
1
|
192 public void prevPage() {
|
|
193 DigiImageParameter dp = digiImage.getParameter();
|
|
194 int pn = dp.getPn();
|
|
195 if (pn>1)
|
|
196 pn=pn-1;
|
|
197 dp.setPn(pn);
|
|
198 digiImage.setParameter(dp);
|
|
199 digiImage.redraw();
|
|
200
|
|
201 }
|
|
202
|
9
|
203 /**
|
|
204 * If the image object points to a folder the next image in the folder is displayed.
|
|
205 * TODO currently no check is made if we are already on the last image in the folder.
|
|
206 */
|
1
|
207 public void nextPage() {
|
|
208 DigiImageParameter dp = digiImage.getParameter();
|
|
209 int pn = dp.getPn();
|
|
210
|
|
211 pn=pn+1;
|
|
212 dp.setPn(pn);
|
|
213 digiImage.setParameter(dp);
|
|
214 digiImage.redraw();
|
|
215
|
|
216
|
|
217 }
|
|
218
|
|
219
|
20
|
220
|
|
221
|
1
|
222 }
|