/* * Copyright (C) 2014 GG-Net GmbH - Oliver Günther * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package eu.ggnet.dwoss.receipt; import java.util.*; import javax.swing.JTable; import javax.swing.RowFilter; import javax.swing.table.TableRowSorter; import eu.ggnet.dwoss.util.INoteModel; import eu.ggnet.dwoss.util.table.Column; import eu.ggnet.dwoss.util.table.IColumnGetAction; import eu.ggnet.dwoss.util.table.IColumnGetSetAction; import eu.ggnet.dwoss.util.table.SimpleTableModel; /** * * @author pascal.perau */ public class CheckBoxTableNoteModel<T extends INoteModel> extends SimpleTableModel<T>{ private Set<T> marked; private JTable table; private TableRowSorter<CheckBoxTableNoteModel<T>> rowSorter; public CheckBoxTableNoteModel(final List<T> lines, String columnTitle) { super(lines); marked = new HashSet<T>(); addColumn(new Column<T>("", true, 0, Boolean.class, new IColumnGetSetAction() { @Override public void setValue(int row, Object selected) { if ( (Boolean)selected ) marked.add(lines.get(row)); else marked.remove(lines.get(row)); } @Override public Object getValue(int row) { return marked.contains(lines.get(row)); } })); addColumn(new Column<T>(columnTitle, false, 1000, String.class, new IColumnGetAction() { @Override public String getValue(int row) { return lines.get(row).getNote(); } })); } public void setFiltered(final Collection<T> filtered) { if ( filtered == null ) rowSorter.setRowFilter(null); else rowSorter.setRowFilter(new RowFilter<CheckBoxTableNoteModel<T>, Integer>() { @Override public boolean include(RowFilter.Entry<? extends CheckBoxTableNoteModel<T>, ? extends Integer> entry) { return filtered.contains(entry.getModel().getDataModel().get(entry.getIdentifier())); } }); fireTableDataChanged(); } public void setMarked(Collection<T> marks) { marked.clear(); marked.addAll(marks); fireTableDataChanged(); } public Set<T> getMarked() { return Collections.unmodifiableSet(marked); } public void setTable(JTable table) { if ( table == null ) return; this.table = table; for (int i = 0; i < getColumnCount(); i++) { table.getColumnModel().getColumn(i).setPreferredWidth(getPreferredWidth(i)); } rowSorter = new TableRowSorter<>(this); table.setRowSorter(rowSorter); } }