1 package de.desy.acop.video;
2
3 import java.awt.datatransfer.DataFlavor;
4 import java.awt.datatransfer.Transferable;
5 import java.awt.datatransfer.UnsupportedFlavorException;
6 import java.beans.PropertyVetoException;
7 import java.io.IOException;
8
9 import javax.swing.JComponent;
10
11 import com.cosylab.gui.displayers.DisplayerParameters;
12 import com.cosylab.gui.util.AbstractDisplayerParametersTransferHandler;
13 import com.cosylab.gui.util.DisplayerParametersFlavor;
14
15 import de.desy.acop.displayers.tools.AcopDisplayerParameters;
16 import de.desy.acop.displayers.tools.AcopDisplayerParametersFlavor;
17 import de.desy.acop.displayers.tools.ConnectionParametersFlavor;
18 import de.desy.acop.transport.ConnectionParameters;
19
20
21
22
23
24
25
26
27
28 public class AcopVideoTransferHandler extends AbstractDisplayerParametersTransferHandler {
29
30 private static final long serialVersionUID = 1L;
31
32
33
34
35
36
37 public AcopVideoTransferHandler(AcopVideo comp) {
38 super(comp, true, true, new DataFlavor[] { AcopVideoParametersFlavor.FLAVOR, AcopDisplayerParametersFlavor.FLAVOR, DisplayerParametersFlavor.FLAVOR,
39 ConnectionParametersFlavor.FLAVOR, DataFlavor.stringFlavor }, true);
40
41 }
42
43
44
45
46
47
48 @Override
49 protected DisplayerParameters exportDisplayerParameters() {
50 AcopVideo disp = (AcopVideo) displayer;
51 return new AcopVideoParameters(disp.getConnectionParameters(),
52 disp.isAOIZoom(),
53 disp.getImageZoom(),
54 disp.getOverlayState(),
55 disp.isKeepAspectRatio(),
56 disp.isHistogramEqualisation(),
57 disp.getHistogramMin(),
58 disp.getHistogramMax(),
59 disp.getColorMap(),
60 disp.isDisplayClutHeader());
61 }
62
63
64
65
66
67
68 @Override
69 public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
70 if (flavor instanceof AcopDisplayerParametersFlavor) {
71 return new AcopDisplayerParameters[] { (AcopDisplayerParameters) exportDisplayerParameters() };
72 } else if (flavor instanceof ConnectionParametersFlavor) {
73 return new ConnectionParameters[] { ((AcopDisplayerParameters) exportDisplayerParameters()).getConnectionParameters() };
74 } else if (flavor.isFlavorTextType()) {
75 return ((AcopDisplayerParameters) exportDisplayerParameters()).getConnectionParameters().getRemoteName();
76 } else {
77 return super.getTransferData(flavor);
78 }
79 }
80
81
82
83
84
85
86 @Override
87 public boolean importData(JComponent comp, Transferable t) {
88 try {
89 if (t.isDataFlavorSupported(AcopDisplayerParametersFlavor.FLAVOR)) {
90 Object[] drop = (Object[]) t.getTransferData(AcopDisplayerParametersFlavor.FLAVOR);
91 DisplayerParameters[] dp = null;
92 dp = castParameters(drop);
93 if (dp != null) {
94 return importDisplayerParameters(dp);
95 }
96 } else if (t.isDataFlavorSupported(ConnectionParametersFlavor.FLAVOR)) {
97 Object drop = t.getTransferData(ConnectionParametersFlavor.FLAVOR);
98
99 if (drop != null) {
100 ConnectionParameters[] cp = null;
101 if (drop instanceof ConnectionParameters) {
102 cp = new ConnectionParameters[] { (ConnectionParameters) drop };
103 } else if (drop instanceof ConnectionParameters[]) {
104 cp = (ConnectionParameters[]) drop;
105 } else {
106 return super.importData(comp, t);
107 }
108
109 AcopVideoParameters[] param = new AcopVideoParameters[cp.length];
110 for (int i = 0; i < param.length; i++) {
111 param[i] = new AcopVideoParameters(cp[i]);
112 }
113
114 return importDisplayerParameters(param);
115 }
116 }
117 return super.importData(comp, t);
118 } catch (Exception e) {
119 e.printStackTrace();
120 }
121 return false;
122
123 }
124
125
126
127
128
129
130 @Override
131 protected boolean importString(String string) throws PropertyVetoException {
132 if (string.indexOf('\n') > 0) {
133 return false;
134 }
135 try {
136 ConnectionParameters cp = new ConnectionParameters(string);
137 return importDisplayerParameters(new AcopVideoParameters[] { new AcopVideoParameters(cp) });
138 } catch (IllegalArgumentException e) {
139 return false;
140 }
141
142 }
143
144
145
146
147
148
149 @Override
150 protected DisplayerParameters[] castParameters(Object... parameters) {
151 if (parameters instanceof AcopVideoParameters[]) {
152 return (AcopVideoParameters[]) parameters.getClass().cast(parameters);
153 } else if (parameters.length == 1) {
154 if (parameters[0] instanceof AcopVideoParameters[]) {
155 return (AcopVideoParameters[]) parameters[0];
156 } else if (parameters[0] instanceof AcopVideoParameters) {
157 return new AcopVideoParameters[] { (AcopVideoParameters) parameters[0] };
158 }
159 }
160 return super.castParameters(parameters);
161 }
162
163
164
165
166
167
168
169 @Override
170 public boolean setParametersToDisplayer(Object disp, DisplayerParameters parameters) throws PropertyVetoException {
171 ((AcopVideo) disp).stop();
172 boolean result = super.setParametersToDisplayer(disp, parameters);
173 ((AcopVideo) disp).start();
174 return result;
175 }
176
177 }