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.Distance;
10 * Class to act as the table model for the correlation preview table
12 public class MediaPreviewTableModel extends AbstractTableModel
14 /** Text for first column heading */
15 private String _firstColumnHeading = null;
16 /** ArrayList containing TableRow objects */
17 private ArrayList<MediaPreviewTableRow> _list = new ArrayList<MediaPreviewTableRow>();
19 private Distance.Units _distanceUnits = Distance.Units.KILOMETRES;
20 /** Number formatter */
21 private static final NumberFormat FORMAT_ONE_DP = NumberFormat.getNumberInstance();
24 /** Static block to initialise the one d.p. formatter */
27 FORMAT_ONE_DP.setMaximumFractionDigits(1);
28 FORMAT_ONE_DP.setMinimumFractionDigits(1);
33 * @param inFirstColumnKey key for first column heading
35 public MediaPreviewTableModel(String inFirstColumnKey) {
36 _firstColumnHeading = I18nManager.getText(inFirstColumnKey);
40 * @return the column count, always 5
42 public int getColumnCount() {
47 * Get the name of the column
48 * @param inColNum column number
51 public String getColumnName(int inColNum)
53 if (inColNum == 0) return _firstColumnHeading;
54 else if (inColNum == 1) return I18nManager.getText("fieldname.timestamp");
55 else if (inColNum == 2) return I18nManager.getText("dialog.correlate.select.timediff");
56 else if (inColNum == 3) return I18nManager.getText("fieldname.distance");
57 return I18nManager.getText("dialog.correlate.options.correlate");
62 * @return the row count
64 public int getRowCount()
71 * Get the selected row from the table
72 * @param inRowIndex row index
73 * @return table row object
75 public MediaPreviewTableRow getRow(int inRowIndex)
77 return _list.get(inRowIndex);
82 * Get the value of the specified cell
83 * @param inRowIndex row index
84 * @param inColumnIndex column index
85 * @return value of specified cell
87 public Object getValueAt(int inRowIndex, int inColumnIndex)
89 MediaPreviewTableRow row = _list.get(inRowIndex);
90 if (inColumnIndex == 0) return row.getMedia().getFile().getName();
91 else if (inColumnIndex == 1) {
92 return row.getMedia().getTimestamp().getText();
94 else if (inColumnIndex == 2) {
95 if (row.getPointPair().isValid()) {
96 return row.getTimeDiff().getDescription();
100 else if (inColumnIndex == 3) {
101 if (row.getPointPair().isValid()) {
102 return FORMAT_ONE_DP.format(row.getDistance(_distanceUnits));
106 return row.getCorrelateFlag();
111 * @param inUnits the distance units to use
113 public void setDistanceUnits(Distance.Units inUnits)
115 _distanceUnits = inUnits;
129 * Add a row to the list
130 * @param inRow row to add
132 public void addRow(MediaPreviewTableRow inRow)
139 * Get the class of objects in the given column
140 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
142 public Class<?> getColumnClass(int inColumnIndex)
144 if (inColumnIndex == 4) {return Boolean.class;}
145 return super.getColumnClass(inColumnIndex);
150 * Get whether the given cell is editable
151 * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
153 public boolean isCellEditable(int inRowIndex, int inColumnIndex)
155 if (inColumnIndex == 4) {return true;}
156 return super.isCellEditable(inRowIndex, inColumnIndex);
161 * @return true if any of the correlate flags are on
163 public boolean hasAnySelected()
165 for (int i=0; i<getRowCount(); i++)
167 if (getRow(i).getCorrelateFlag().booleanValue()) {
177 * Set the value at the given table cell
178 * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int)
180 public void setValueAt(Object inValue, int inRowIndex, int inColumnIndex)
182 // can only edit the correlate column
183 if (inColumnIndex == 4)
185 MediaPreviewTableRow row = getRow(inRowIndex);
186 // Don't allow setting of items which can't be correlated
187 if (row.getPointPair().isValid()) {
188 row.setCorrelateFlag(((Boolean) inValue).booleanValue());