X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fcorrelate%2FMediaPreviewTableModel.java;fp=src%2Ftim%2Fprune%2Fcorrelate%2FMediaPreviewTableModel.java;h=26d25f1ca07d359aed0889910b2e4687e910625b;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/correlate/MediaPreviewTableModel.java b/src/tim/prune/correlate/MediaPreviewTableModel.java new file mode 100644 index 0000000..26d25f1 --- /dev/null +++ b/src/tim/prune/correlate/MediaPreviewTableModel.java @@ -0,0 +1,195 @@ +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