1 /*
2 * Copyright (c) 2006 Stiftung Deutsches Elektronen-Synchroton,
3 * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
4 *
5 * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
6 * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
7 * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
8 * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
9 * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
11 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
12 * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
13 * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
14 * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
15 * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
16 * OR MODIFICATIONS.
17 * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
18 * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
19 * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
20 * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
21 */
22
23 package de.desy.acop.displayers.table;
24
25 import com.cosylab.gui.components.table.cells.DoubleCell;
26 import com.cosylab.gui.displayers.DataConsumer;
27 import com.cosylab.gui.displayers.DisplayerUtilities;
28 import com.cosylab.gui.displayers.DoubleSeqConsumer;
29 import com.cosylab.util.CommonException;
30
31 import de.desy.acop.displayers.AcopTable;
32
33 /**
34 * Table column for presenting numerical values.
35 *
36 * @author Jaka Bobnar, Cosylab
37 *
38 */
39 public class AcopNumericTableColumn extends AcopTableColumn implements DoubleSeqConsumer {
40
41 @SuppressWarnings("unchecked")
42 public static final Class[] SUPPORTED_CONSUMER_TYPES = {
43 DoubleSeqConsumer.class
44 };
45 public static final String[] SUPPORTED_CHARACTERISTICS = {};
46
47 protected double[] rows;
48
49 /**
50 * Constructs new AcopNumericTableColumn.
51 *
52 */
53 public AcopNumericTableColumn() {
54 super();
55 }
56
57 /**
58 * Constructs new AcopNumericTableColumn object.
59 *
60 * @param table parent table
61 * @param uniqueName unique name of the column
62 * @param shortName short name of the column
63 */
64 public AcopNumericTableColumn(AcopTable table, String uniqueName, String shortName) {
65 super(table, uniqueName, shortName);
66 rows = new double[0];
67 cells = new DoubleCell[0];
68 }
69
70 /*
71 * (non-Javadoc)
72 * @see de.desy.acop.displayers.tools.table.AcopTableColumn#getColumnClass()
73 */
74 @Override
75 public Class<?> getColumnClass() {
76 return DoubleCell.class; //Double.class;
77 }
78
79 /* (non-Javadoc)
80 * @see com.cosylab.gui.displayers.DataConsumer#getSupportedCharacteristics()
81 */
82 public String[] getSupportedCharacteristics() {
83 return DisplayerUtilities.combineCharacteristics(DisplayerUtilities.COMMON_NUMERIC_DISPLAYER_CHARACTERISTICS,
84 SUPPORTED_CHARACTERISTICS);
85 }
86
87 /* (non-Javadoc)
88 * @see com.cosylab.gui.displayers.DataConsumer#getSupportedConsumerTypes()
89 */
90 @SuppressWarnings("unchecked")
91 public Class<DataConsumer>[] getSupportedConsumerTypes() {
92 return SUPPORTED_CONSUMER_TYPES;
93 }
94
95 /*
96 * (non-Javadoc)
97 * @see com.cosylab.gui.displayers.DoubleSeqConsumer#updateValue(long, double[])
98 */
99 public void updateValue(long timestamp, double[] value) throws CommonException {
100 rows = value;
101 if (cells.length != value.length) {
102 cells = new DoubleCell[value.length];
103 }
104 fireColumnChanged();
105 }
106
107 /*
108 * (non-Javadoc)
109 * @see de.desy.acop.displayers.table.AcopTableColumn#getValue(int)
110 */
111 public Object getValue(int rowIndex) {
112 if (rows == null || rowIndex >= rows.length || rowIndex < 0) return null;
113 if (cells[rowIndex] == null) {
114 cells[rowIndex] = new DoubleCell(displayerParameters.getName()+"[" + rowIndex+"]", this, rows[rowIndex], null);
115 cells[rowIndex].putAllCharacteristics(characteristics);
116 } else {
117 cells[rowIndex].setValue(rows[rowIndex]);
118 }
119 setCharacteristicsOnCell(cells[rowIndex]);
120 return cells[rowIndex];
121 }
122
123
124 }