package tim.prune.correlate; import java.util.ArrayList; import java.util.TimeZone; import javax.swing.table.AbstractTableModel; import tim.prune.I18nManager; import tim.prune.config.TimezoneHelper; import tim.prune.data.Unit; import tim.prune.data.UnitSetLibrary; import tim.prune.gui.DisplayUtils; /** * Class to act as the table model for the correlation preview table */ public class MediaPreviewTableModel extends AbstractTableModel { /** Text for first column heading */ private String _firstColumnHeading = null; /** ArrayList containing TableRow objects */ private ArrayList _list = new ArrayList(); /** Distance units */ private Unit _distanceUnits = UnitSetLibrary.UNITS_KILOMETRES; /** Current timezone */ private TimeZone _timezone = null; /** * Constructor * @param inFirstColumnKey key for first column heading */ public MediaPreviewTableModel(String inFirstColumnKey) { _firstColumnHeading = I18nManager.getText(inFirstColumnKey); _timezone = TimezoneHelper.getSelectedTimezone(); } /** * @return the column count, always 5 */ public int getColumnCount() { return 5; } /** * Get the name of the column * @param inColNum column number * @return column name */ public String getColumnName(int inColNum) { if (inColNum == 0) return _firstColumnHeading; else if (inColNum == 1) return I18nManager.getText("fieldname.timestamp"); else if (inColNum == 2) return I18nManager.getText("dialog.correlate.select.timediff"); else if (inColNum == 3) return I18nManager.getText("fieldname.distance"); return I18nManager.getText("dialog.correlate.options.correlate"); } /** * @return the row count */ public int getRowCount() { return _list.size(); } /** * Get the selected row from the table * @param inRowIndex row index * @return table row object */ public MediaPreviewTableRow getRow(int inRowIndex) { return _list.get(inRowIndex); } /** * Get the value of the specified cell * @param inRowIndex row index * @param inColumnIndex column index * @return value of specified cell */ public Object getValueAt(int inRowIndex, int inColumnIndex) { MediaPreviewTableRow row = _list.get(inRowIndex); if (inColumnIndex == 0) return row.getMedia().getName(); else if (inColumnIndex == 1) { if (row.getMedia().hasTimestamp()) { return row.getMedia().getTimestamp().getText(_timezone); } return ""; // media doesn't have a timestamp } else if (inColumnIndex == 2) { if (row.getPointPair().isValid()) { return row.getTimeDiff().getDescription(); } return ""; } else if (inColumnIndex == 3) { if (row.getPointPair().isValid()) { return DisplayUtils.formatOneDp(row.getDistance(_distanceUnits)); } return ""; } return row.getCorrelateFlag(); } /** * @param inUnits the distance units to use */ public void setDistanceUnits(Unit inUnits) { _distanceUnits = inUnits; } /** * Clear the list */ public void reset() { _list.clear(); } /** * Add a row to the list * @param inRow row to add */ public void addRow(MediaPreviewTableRow inRow) { _list.add(inRow); } /** * Get the class of objects in the given column * @see javax.swing.table.AbstractTableModel#getColumnClass(int) */ public Class getColumnClass(int inColumnIndex) { if (inColumnIndex == 4) {return Boolean.class;} return super.getColumnClass(inColumnIndex); } /** * Get whether the given cell is editable * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int) */ public boolean isCellEditable(int inRowIndex, int inColumnIndex) { if (inColumnIndex == 4) {return true;} return super.isCellEditable(inRowIndex, inColumnIndex); } /** * @return true if any of the correlate flags are on */ public boolean hasAnySelected() { for (int i=0; i