1 package tim.prune.correlate;
3 import java.util.ArrayList;
4 import javax.swing.table.AbstractTableModel;
6 import tim.prune.I18nManager;
7 import tim.prune.data.Unit;
8 import tim.prune.data.UnitSetLibrary;
9 import tim.prune.gui.DisplayUtils;
12 * Class to act as the table model for the correlation preview table
14 public class MediaPreviewTableModel extends AbstractTableModel
16 /** Text for first column heading */
17 private String _firstColumnHeading = null;
18 /** ArrayList containing TableRow objects */
19 private ArrayList<MediaPreviewTableRow> _list = new ArrayList<MediaPreviewTableRow>();
21 private Unit _distanceUnits = UnitSetLibrary.UNITS_KILOMETRES;
26 * @param inFirstColumnKey key for first column heading
28 public MediaPreviewTableModel(String inFirstColumnKey) {
29 _firstColumnHeading = I18nManager.getText(inFirstColumnKey);
33 * @return the column count, always 5
35 public int getColumnCount() {
40 * Get the name of the column
41 * @param inColNum column number
44 public String getColumnName(int inColNum)
46 if (inColNum == 0) return _firstColumnHeading;
47 else if (inColNum == 1) return I18nManager.getText("fieldname.timestamp");
48 else if (inColNum == 2) return I18nManager.getText("dialog.correlate.select.timediff");
49 else if (inColNum == 3) return I18nManager.getText("fieldname.distance");
50 return I18nManager.getText("dialog.correlate.options.correlate");
55 * @return the row count
57 public int getRowCount()
64 * Get the selected row from the table
65 * @param inRowIndex row index
66 * @return table row object
68 public MediaPreviewTableRow getRow(int inRowIndex)
70 return _list.get(inRowIndex);
75 * Get the value of the specified cell
76 * @param inRowIndex row index
77 * @param inColumnIndex column index
78 * @return value of specified cell
80 public Object getValueAt(int inRowIndex, int inColumnIndex)
82 MediaPreviewTableRow row = _list.get(inRowIndex);
83 if (inColumnIndex == 0) return row.getMedia().getName();
84 else if (inColumnIndex == 1) {
85 if (row.getMedia().hasTimestamp()) {
86 return row.getMedia().getTimestamp().getText();
88 return ""; // media doesn't have a timestamp
90 else if (inColumnIndex == 2) {
91 if (row.getPointPair().isValid()) {
92 return row.getTimeDiff().getDescription();
96 else if (inColumnIndex == 3) {
97 if (row.getPointPair().isValid()) {
98 return DisplayUtils.formatOneDp(row.getDistance(_distanceUnits));
102 return row.getCorrelateFlag();
107 * @param inUnits the distance units to use
109 public void setDistanceUnits(Unit inUnits)
111 _distanceUnits = inUnits;
125 * Add a row to the list
126 * @param inRow row to add
128 public void addRow(MediaPreviewTableRow inRow)
135 * Get the class of objects in the given column
136 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
138 public Class<?> getColumnClass(int inColumnIndex)
140 if (inColumnIndex == 4) {return Boolean.class;}
141 return super.getColumnClass(inColumnIndex);
146 * Get whether the given cell is editable
147 * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
149 public boolean isCellEditable(int inRowIndex, int inColumnIndex)
151 if (inColumnIndex == 4) {return true;}
152 return super.isCellEditable(inRowIndex, inColumnIndex);
157 * @return true if any of the correlate flags are on
159 public boolean hasAnySelected()
161 for (int i=0; i<getRowCount(); i++)
163 if (getRow(i).getCorrelateFlag().booleanValue()) {
173 * Set the value at the given table cell
174 * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int)
176 public void setValueAt(Object inValue, int inRowIndex, int inColumnIndex)
178 // can only edit the correlate column
179 if (inColumnIndex == 4)
181 MediaPreviewTableRow row = getRow(inRowIndex);
182 // Don't allow setting of items which can't be correlated
183 if (row.getPointPair().isValid()) {
184 row.setCorrelateFlag(((Boolean) inValue).booleanValue());