/* ArtifactExclusionTable.java created 2007-11-02
*
*/
package org.signalml.plugin.newartifact.ui;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.table.TableModel;
import org.signalml.app.view.common.components.cellrenderers.CenteringTableCellRenderer;
/** ArtifactExclusionTable
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class NewArtifactExclusionTable extends JTable {
private static final long serialVersionUID = 1L;
public static final Color DISABLED_COLOR = new Color(220,220,220);
private static final int CELL_SIZE = 35;
public NewArtifactExclusionTable(NewArtifactExclusionTableModel model) {
super(model);
setTableHeader(null);
//setDefaultRenderer(String.class, new CenteringCellRenderer());
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setCellSelectionEnabled(true);
setAutoResizeMode(AUTO_RESIZE_OFF);
setRowHeight(CELL_SIZE);
//setToolTipText("");
}
@Override
public NewArtifactExclusionTableModel getModel() {
return (NewArtifactExclusionTableModel) super.getModel();
}
@Override
protected void configureEnclosingScrollPane() {
super.configureEnclosingScrollPane();
TableModel model = getModel();
if (!(model instanceof NewArtifactExclusionTableModel)) {
return;
}
NewArtifactExclusionTableModel artifactExclusionTableModel = (NewArtifactExclusionTableModel) model;
Container p = getParent();
if (p instanceof JViewport) {
Container gp = p.getParent();
if (gp instanceof JScrollPane) {
JScrollPane scrollPane = (JScrollPane)gp;
JViewport viewport = scrollPane.getViewport();
if (viewport == null || viewport.getView() != this) {
return;
}
scrollPane.setColumnHeaderView(new ColumnHeaderTable(artifactExclusionTableModel.getColumnTableModel()));
scrollPane.setRowHeaderView(new RowHeaderTable(artifactExclusionTableModel.getRowTableModel()));
scrollPane.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, new CornerPanel());
}
}
}
@Override
protected void unconfigureEnclosingScrollPane() {
super.unconfigureEnclosingScrollPane();
Container p = getParent();
if (p instanceof JViewport) {
Container gp = p.getParent();
if (gp instanceof JScrollPane) {
JScrollPane scrollPane = (JScrollPane)gp;
JViewport viewport = scrollPane.getViewport();
if (viewport == null || viewport.getView() != this) {
return;
}
scrollPane.setColumnHeaderView(null);
scrollPane.setRowHeaderView(null);
scrollPane.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, null);
}
}
}
@Override
public void columnAdded(TableColumnModelEvent e) {
super.columnAdded(e);
int index = e.getToIndex();
getColumnModel().getColumn(index).setPreferredWidth(CELL_SIZE);
}
private class CornerPanel extends JPanel {
private static final long serialVersionUID = 1L;
public CornerPanel() {
super();
setBackground(DISABLED_COLOR);
setPreferredSize(new Dimension(CELL_SIZE,CELL_SIZE));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Dimension size = getSize();
g.setColor(getGridColor());
g.drawLine(0, size.height-1, size.width-1, size.height-1);
g.drawLine(size.width-1, 0, size.width-1, size.height-1);
}
}
private class ColumnHeaderTable extends JTable {
private static final long serialVersionUID = 1L;
public ColumnHeaderTable(TableModel dm) {
super(dm);
setTableHeader(null);
setDefaultRenderer(String.class, new CenteringTableCellRenderer());
setBackground(DISABLED_COLOR);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setEnabled(false);
setAutoResizeMode(AUTO_RESIZE_OFF);
setRowHeight(CELL_SIZE);
setToolTipText("");
}
@Override
public void columnAdded(TableColumnModelEvent e) {
super.columnAdded(e);
int index = e.getToIndex();
getColumnModel().getColumn(index).setPreferredWidth(CELL_SIZE);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(getColumnCount()*CELL_SIZE, getRowCount()*CELL_SIZE);
}
@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
}
private class RowHeaderTable extends JTable {
private static final long serialVersionUID = 1L;
public RowHeaderTable(TableModel dm) {
super(dm);
setTableHeader(null);
setDefaultRenderer(String.class, new CenteringTableCellRenderer());
setBackground(DISABLED_COLOR);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setEnabled(false);
setAutoResizeMode(AUTO_RESIZE_OFF);
setRowHeight(CELL_SIZE);
setToolTipText("");
}
@Override
public String getToolTipText(MouseEvent event) {
Point p = event.getPoint();
int row = rowAtPoint(p);
int col = columnAtPoint(p);
if (row >= 0 && col >= 0) {
return (String) getValueAt(row, col);
} else {
return "";
}
}
@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
}
}