1 package tim.prune.correlate;
3 import java.text.NumberFormat;
4 import java.util.ArrayList;
5 import javax.swing.table.AbstractTableModel;
6 import tim.prune.I18nManager;
7 import tim.prune.data.Unit;
8 import tim.prune.data.UnitSetLibrary;
11 * Class to act as the table model for the correlation preview table
13 public class MediaPreviewTableModel extends AbstractTableModel
15 /** Text for first column heading */
16 private String _firstColumnHeading = null;
17 /** ArrayList containing TableRow objects */
18 private ArrayList<MediaPreviewTableRow> _list = new ArrayList<MediaPreviewTableRow>();
20 private Unit _distanceUnits = UnitSetLibrary.UNITS_KILOMETRES;
21 /** Number formatter */
22 private static final NumberFormat FORMAT_ONE_DP = NumberFormat.getNumberInstance();
25 /** Static block to initialise the one d.p. formatter */
28 FORMAT_ONE_DP.setMaximumFractionDigits(1);
29 FORMAT_ONE_DP.setMinimumFractionDigits(1);
34 * @param inFirstColumnKey key for first column heading
36 public MediaPreviewTableModel(String inFirstColumnKey) {
37 _firstColumnHeading = I18nManager.getText(inFirstColumnKey);
41 * @return the column count, always 5
43 public int getColumnCount() {
48 * Get the name of the column
49 * @param inColNum column number
52 public String getColumnName(int inColNum)
54 if (inColNum == 0) return _firstColumnHeading;
55 else if (inColNum == 1) return I18nManager.getText("fieldname.timestamp");
56 else if (inColNum == 2) return I18nManager.getText("dialog.correlate.select.timediff");
57 else if (inColNum == 3) return I18nManager.getText("fieldname.distance");
58 return I18nManager.getText("dialog.correlate.options.correlate");
63 * @return the row count
65 public int getRowCount()
72 * Get the selected row from the table
73 * @param inRowIndex row index
74 * @return table row object
76 public MediaPreviewTableRow getRow(int inRowIndex)
78 return _list.get(inRowIndex);
83 * Get the value of the specified cell
84 * @param inRowIndex row index
85 * @param inColumnIndex column index
86 * @return value of specified cell
88 public Object getValueAt(int inRowIndex, int inColumnIndex)
90 MediaPreviewTableRow row = _list.get(inRowIndex);
91 if (inColumnIndex == 0) return row.getMedia().getName();
92 else if (inColumnIndex == 1) {
93 if (row.getMedia().hasTimestamp()) {
94 return row.getMedia().getTimestamp().getText();
96 return ""; // media doesn't have a timestamp
98 else if (inColumnIndex == 2) {
99 if (row.getPointPair().isValid()) {
100 return row.getTimeDiff().getDescription();
104 else if (inColumnIndex == 3) {
105 if (row.getPointPair().isValid()) {
106 return FORMAT_ONE_DP.format(row.getDistance(_distanceUnits));
110 return row.getCorrelateFlag();
115 * @param inUnits the distance units to use
117 public void setDistanceUnits(Unit inUnits)
119 _distanceUnits = inUnits;
133 * Add a row to the list
134 * @param inRow row to add
136 public void addRow(MediaPreviewTableRow inRow)
143 * Get the class of objects in the given column
144 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
146 public Class<?> getColumnClass(int inColumnIndex)
148 if (inColumnIndex == 4) {return Boolean.class;}
149 return super.getColumnClass(inColumnIndex);
154 * Get whether the given cell is editable
155 * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
157 public boolean isCellEditable(int inRowIndex, int inColumnIndex)
159 if (inColumnIndex == 4) {return true;}
160 return super.isCellEditable(inRowIndex, inColumnIndex);
165 * @return true if any of the correlate flags are on
167 public boolean hasAnySelected()
169 for (int i=0; i<getRowCount(); i++)
171 if (getRow(i).getCorrelateFlag().booleanValue()) {
181 * Set the value at the given table cell
182 * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int)
184 public void setValueAt(Object inValue, int inRowIndex, int inColumnIndex)
186 // can only edit the correlate column
187 if (inColumnIndex == 4)
189 MediaPreviewTableRow row = getRow(inRowIndex);
190 // Don't allow setting of items which can't be correlated
191 if (row.getPointPair().isValid()) {
192 row.setCorrelateFlag(((Boolean) inValue).booleanValue());