package tim.prune.function.deletebydate; import javax.swing.table.AbstractTableModel; import tim.prune.I18nManager; /** * Table model for selecting which dates to delete */ public class DeletionTableModel extends AbstractTableModel { /** info list, one for each row of table */ private DateInfoList _infoList = null; /** Column heading for date */ private static final String COLUMN_HEADING_DATE = I18nManager.getText("fieldname.date"); /** Column heading for number of points */ private static final String COLUMN_HEADING_NUMPOINTS = I18nManager.getText("details.track.points"); /** Column heading for keep */ private static final String COLUMN_HEADING_KEEP = I18nManager.getText("dialog.deletebydate.column.keep"); /** Column heading for delete */ private static final String COLUMN_HEADING_DELETE = I18nManager.getText("dialog.deletebydate.column.delete"); /** * Constructor * @param inList date info list from function */ public DeletionTableModel(DateInfoList inList) { _infoList = inList; } /** * @return column count */ public int getColumnCount() { return 4; // always fixed (date, numpoints, keep, delete) } /** * @return row count */ public int getRowCount() { if (_infoList == null) {return 0;} // shouldn't happen return _infoList.getNumEntries(); } /** * Get the name of the column * @param inColNum column number * @return column name */ public String getColumnName(int inColNum) { if (inColNum == 0) return COLUMN_HEADING_DATE; else if (inColNum == 1) return COLUMN_HEADING_NUMPOINTS; else if (inColNum == 2) return COLUMN_HEADING_KEEP; else if (inColNum == 3) return COLUMN_HEADING_DELETE; return "unknown column!"; } /** * Get the class of objects in the given column * @see javax.swing.table.AbstractTableModel#getColumnClass(int) */ public Class getColumnClass(int inColumnIndex) { if (inColumnIndex == 1) {return Integer.class;} if (inColumnIndex > 1) {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) { return (inColumnIndex > 1); } /** * Set the value at the given table cell * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int) */ public void setValueAt(Object inValue, int inRowIndex, int inColumnIndex) { // can only edit the keep and delete columns final boolean isKeep = (inColumnIndex == 2); final boolean isDelete = (inColumnIndex == 3); // ignore all events for other columns if (isKeep || isDelete) { try { boolean setFlag = ((Boolean) inValue).booleanValue(); if (setFlag) { _infoList.getDateInfo(inRowIndex).setDeleteFlag(isDelete); // make sure the other cell (keep or delete) on the same row is updated too fireTableCellUpdated(inRowIndex, 5 - inColumnIndex); } } catch (ClassCastException cce) {} } } /** * @return cell contents at the given row, column index */ public Object getValueAt(int inRowIndex, int inColIndex) { try { DateInfo info = _infoList.getDateInfo(inRowIndex); if (info != null) { switch (inColIndex) { case 0: // date if (info.isDateless()) { return I18nManager.getText("dialog.deletebydate.nodate"); } return info.getString(); case 1: // number of points return info.getPointCount(); case 2: // keep return !info.getDeleteFlag(); case 3: // delete return info.getDeleteFlag(); } } } catch (IndexOutOfBoundsException obe) {} // ignore, fallthrough return null; } }