1 package tim.prune.function.deletebydate;
3 import java.text.DateFormat;
4 import javax.swing.table.AbstractTableModel;
5 import tim.prune.I18nManager;
8 * Table model for selecting which dates to delete
10 public class DeletionTableModel extends AbstractTableModel
12 /** info list, one for each row of table */
13 private DateInfoList _infoList = null;
15 /** Formatter, determining how dates appear in the table */
16 private static final DateFormat DEFAULT_DATE_FORMAT = DateFormat.getDateInstance();
17 /** Column heading for date */
18 private static final String COLUMN_HEADING_DATE = I18nManager.getText("fieldname.date");
19 /** Column heading for number of points */
20 private static final String COLUMN_HEADING_NUMPOINTS = I18nManager.getText("details.track.points");
21 /** Column heading for keep */
22 private static final String COLUMN_HEADING_KEEP = I18nManager.getText("dialog.deletebydate.column.keep");
23 /** Column heading for delete */
24 private static final String COLUMN_HEADING_DELETE = I18nManager.getText("dialog.deletebydate.column.delete");
29 * @param inList date info list from function
31 public DeletionTableModel(DateInfoList inList)
37 * @return column count
39 public int getColumnCount()
41 return 4; // always fixed (date, numpoints, keep, delete)
47 public int getRowCount()
49 if (_infoList == null) {return 0;} // shouldn't happen
50 return _infoList.getNumEntries();
54 * Get the name of the column
55 * @param inColNum column number
58 public String getColumnName(int inColNum)
60 if (inColNum == 0) return COLUMN_HEADING_DATE;
61 else if (inColNum == 1) return COLUMN_HEADING_NUMPOINTS;
62 else if (inColNum == 2) return COLUMN_HEADING_KEEP;
63 else if (inColNum == 3) return COLUMN_HEADING_DELETE;
64 return "unknown column!";
68 * Get the class of objects in the given column
69 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
71 public Class<?> getColumnClass(int inColumnIndex)
73 if (inColumnIndex == 1) {return Integer.class;}
74 if (inColumnIndex > 1) {return Boolean.class;}
75 return super.getColumnClass(inColumnIndex);
79 * Get whether the given cell is editable
80 * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
82 public boolean isCellEditable(int inRowIndex, int inColumnIndex)
84 return (inColumnIndex > 1);
88 * Set the value at the given table cell
89 * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int)
91 public void setValueAt(Object inValue, int inRowIndex, int inColumnIndex)
93 // can only edit the keep and delete columns
94 final boolean isKeep = (inColumnIndex == 2);
95 final boolean isDelete = (inColumnIndex == 3);
96 // ignore all events for other columns
97 if (isKeep || isDelete)
100 boolean setFlag = ((Boolean) inValue).booleanValue();
103 _infoList.getDateInfo(inRowIndex).setDeleteFlag(isDelete);
104 // make sure the other cell (keep or delete) on the same row is updated too
105 fireTableCellUpdated(inRowIndex, 5 - inColumnIndex);
108 catch (ClassCastException cce) {}
113 * @return cell contents at the given row, column inded
115 public Object getValueAt(int inRowIndex, int inColIndex)
118 DateInfo info = _infoList.getDateInfo(inRowIndex);
124 if (info.isDateless()) {
125 return I18nManager.getText("dialog.deletebydate.nodate");
127 return DEFAULT_DATE_FORMAT.format(info.getDate());
128 case 1: // number of points
129 return info.getPointCount();
131 return !info.getDeleteFlag();
133 return info.getDeleteFlag();
137 catch (IndexOutOfBoundsException obe) {} // ignore, fallthrough