/* MontageFiltersTable.java created 2008-02-03
*
*/
package org.signalml.app.view.montage;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import org.apache.log4j.Logger;
import org.signalml.app.model.montage.MontageFiltersTableModel;
import org.signalml.app.view.TablePopupMenuProvider;
import org.signalml.domain.montage.Montage;
import org.signalml.domain.montage.filter.SampleFilterDefinition;
/**
* Table with the list of {@link SampleFilterDefinition sample filters}
* associated with a {@link Montage}.
* Contains three columns:
* <ul>
* <li>the index of the filter in the montage,</li>
* <li>the custom name of the filter (description),</li>
* <li>the description of the effect of the filter.</li></ul>
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class MontageFiltersTable extends JTable {
/** the default serialization constant. */
private static final long serialVersionUID = 1L;
/** the logger. */
protected static final Logger logger = Logger.getLogger(MontageFiltersTable.class);
/** the popup menu provider for this table. */
private TablePopupMenuProvider popupMenuProvider;
/**
* Creates the table with three columns:
* <ul>
* <li>the index of the filter in the montage (20 pixel),</li>
* <li>the custom name of the filter (200 pixel),</li>
* <li>the description of the effect of the filter (200 pixel).</li></ul>
* Adds the mouse listener which changes the selected row, when it is
* clicked with a right mouse button.
* @param model the model for this table
*/
public MontageFiltersTable(MontageFiltersTableModel model) {
super(model, (TableColumnModel) null);
DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
columnModel.setColumnSelectionAllowed(false);
TableColumn tc;
tc = new TableColumn(MontageFiltersTableModel.INDEX_COLUMN, 40);
tc.setHeaderValue(model.getColumnName(tc.getModelIndex()));
columnModel.addColumn(tc);
tc = new TableColumn(MontageFiltersTableModel.DESCRIPTION_COLUMN, 200);
tc.setHeaderValue(model.getColumnName(tc.getModelIndex()));
columnModel.addColumn(tc);
tc = new TableColumn(MontageFiltersTableModel.EFFECT_COLUMN, 200);
tc.setHeaderValue(model.getColumnName(tc.getModelIndex()));
columnModel.addColumn(tc);
setColumnModel(columnModel);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e) && (e.getClickCount() == 1)) {
int index = rowAtPoint(e.getPoint());
ListSelectionModel selectionModel = getSelectionModel();
if (!selectionModel.isSelectedIndex(index)) {
selectionModel.setSelectionInterval(index, index);
}
}
}
});
getTableHeader().setReorderingAllowed(false);
}
/* (non-Javadoc)
* @see javax.swing.JTable#getModel()
*/
@Override
public MontageFiltersTableModel getModel() {
return (MontageFiltersTableModel) super.getModel();
}
/* (non-Javadoc)
* @see javax.swing.JComponent#getComponentPopupMenu()
*/
@Override
public JPopupMenu getComponentPopupMenu() {
if (popupMenuProvider == null) {
return null;
}
return popupMenuProvider.getPopupMenu(-1, getSelectedRow());
}
/**
* Gets the popup menu provider for this table.
*
* @return the popup menu provider for this table
*/
public TablePopupMenuProvider getPopupMenuProvider() {
return popupMenuProvider;
}
/**
* Sets the popup menu provider for this table.
*
* @param popupMenuProvider the new popup menu provider for this table
*/
public void setPopupMenuProvider(TablePopupMenuProvider popupMenuProvider) {
this.popupMenuProvider = popupMenuProvider;
}
}