1 package tim.prune.correlate;
3 import java.util.ArrayList;
4 import java.util.TimeZone;
6 import javax.swing.table.AbstractTableModel;
8 import tim.prune.I18nManager;
9 import tim.prune.config.TimezoneHelper;
10 import tim.prune.data.Unit;
11 import tim.prune.data.UnitSetLibrary;
12 import tim.prune.gui.DisplayUtils;
15 * Class to act as the table model for the correlation preview table
17 public class MediaPreviewTableModel extends AbstractTableModel
19 /** Text for first column heading */
20 private String _firstColumnHeading = null;
21 /** ArrayList containing TableRow objects */
22 private ArrayList<MediaPreviewTableRow> _list = new ArrayList<MediaPreviewTableRow>();
24 private Unit _distanceUnits = UnitSetLibrary.UNITS_KILOMETRES;
25 /** Current timezone */
26 private TimeZone _timezone = null;
31 * @param inFirstColumnKey key for first column heading
33 public MediaPreviewTableModel(String inFirstColumnKey)
35 _firstColumnHeading = I18nManager.getText(inFirstColumnKey);
36 _timezone = TimezoneHelper.getSelectedTimezone();
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().getName();
91 else if (inColumnIndex == 1) {
92 if (row.getMedia().hasTimestamp()) {
93 return row.getMedia().getTimestamp().getText(_timezone);
95 return ""; // media doesn't have a timestamp
97 else if (inColumnIndex == 2) {
98 if (row.getPointPair().isValid()) {
99 return row.getTimeDiff().getDescription();
103 else if (inColumnIndex == 3) {
104 if (row.getPointPair().isValid()) {
105 return DisplayUtils.formatOneDp(row.getDistance(_distanceUnits));
109 return row.getCorrelateFlag();
114 * @param inUnits the distance units to use
116 public void setDistanceUnits(Unit inUnits)
118 _distanceUnits = inUnits;
132 * Add a row to the list
133 * @param inRow row to add
135 public void addRow(MediaPreviewTableRow inRow)
142 * Get the class of objects in the given column
143 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
145 public Class<?> getColumnClass(int inColumnIndex)
147 if (inColumnIndex == 4) {return Boolean.class;}
148 return super.getColumnClass(inColumnIndex);
153 * Get whether the given cell is editable
154 * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
156 public boolean isCellEditable(int inRowIndex, int inColumnIndex)
158 if (inColumnIndex == 4) {return true;}
159 return super.isCellEditable(inRowIndex, inColumnIndex);
164 * @return true if any of the correlate flags are on
166 public boolean hasAnySelected()
168 for (int i=0; i<getRowCount(); i++)
170 if (getRow(i).getCorrelateFlag().booleanValue()) {
180 * Set the value at the given table cell
181 * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int)
183 public void setValueAt(Object inValue, int inRowIndex, int inColumnIndex)
185 // can only edit the correlate column
186 if (inColumnIndex == 4)
188 MediaPreviewTableRow row = getRow(inRowIndex);
189 // Don't allow setting of items which can't be correlated
190 if (row.getPointPair().isValid()) {
191 row.setCorrelateFlag(((Boolean) inValue).booleanValue());