/* SleepComparisonTable.java created 2008-03-03
*
*/
package org.signalml.plugin.newstager.ui;
import java.awt.BorderLayout;
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.JPopupMenu;
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.apache.log4j.Logger;
import org.signalml.app.model.components.TableToTextExporter;
import org.signalml.app.view.common.components.cellrenderers.CenteringTableCellRenderer;
import org.signalml.plugin.export.view.FileChooser;
/**
* SleepComparisonTable
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe
* Sp. z o.o.
*/
public class NewStagerSleepComparisonTable extends JTable {
protected static final Logger logger = Logger
.getLogger(NewStagerSleepComparisonTable.class);
private static final long serialVersionUID = 1L;
public static final Color DISABLED_COLOR = new Color(220, 220, 220);
private static final int CELL_SIZE = 62;
private TableToTextExporter tableToTextExporter;
private FileChooser fileChooser;
private CornerPanel cornerPanel;
public NewStagerSleepComparisonTable(
NewStagerSleepComparisonTableModel model) {
super(model);
setTableHeader(null);
setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
setDefaultRenderer(String.class, new CenteringTableCellRenderer());
setDefaultRenderer(Integer.class, new CenteringTableCellRenderer());
setCellSelectionEnabled(true);
setAutoResizeMode(AUTO_RESIZE_OFF);
setRowHeight(CELL_SIZE);
setToolTipText("");
}
public TableToTextExporter getTableToTextExporter() {
return tableToTextExporter;
}
public void setTableToTextExporter(TableToTextExporter tableToTextExporter) {
this.tableToTextExporter = tableToTextExporter;
}
public FileChooser getFileChooser() {
return fileChooser;
}
public void setFileChooser(FileChooser fileChooser) {
this.fileChooser = fileChooser;
}
@Override
public NewStagerSleepComparisonTableModel getModel() {
return (NewStagerSleepComparisonTableModel) super.getModel();
}
@Override
protected void configureEnclosingScrollPane() {
super.configureEnclosingScrollPane();
TableModel model = getModel();
if (!(model instanceof NewStagerSleepComparisonTableModel)) {
return;
}
NewStagerSleepComparisonTableModel tableModel = (NewStagerSleepComparisonTableModel) 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 HeaderTable(tableModel
.getColumnTableModel()));
scrollPane.setRowHeaderView(new HeaderTable(tableModel
.getRowTableModel()));
scrollPane.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER,
getCornerPanel());
}
}
}
private CornerPanel getCornerPanel() {
if (cornerPanel == null) {
cornerPanel = new CornerPanel();
}
return 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);
}
@Override
public String getToolTipText(MouseEvent event) {
Point p = event.getPoint();
int row = rowAtPoint(p);
int col = columnAtPoint(p);
if (row >= 0 && col >= 0) {
return ((Integer) getValueAt(row, col)).toString();
} else {
return null;
}
}
/*
* @Override public JPopupMenu getComponentPopupMenu() { if( popupMenu ==
* null ) { popupMenu = new JPopupMenu(); popupMenu.add( new
* ExportComparisonToClipboardAction(messageSource, tableToTextExporter) );
* popupMenu.add( new ExportComparisonToFileAction(messageSource,
* tableToTextExporter) ); } return popupMenu; }
*
* protected class ExportComparisonToClipboardAction extends
* ExportToClipboardAction {
*
* private static final long serialVersionUID = 1L;
*
* public ExportComparisonToClipboardAction(MessageSourceAccessor
* messageSource, TableToTextExporter tableToTextExporter) {
* super(messageSource, tableToTextExporter); }
*
* @Override protected Object getUserObject() { TagComparisonTableModel
* model = getModel(); if( model != null ) { return model.isShowPercent(); }
* return null; }
*
* @Override protected WriterExportableTable getExportableTable() {
* TagComparisonTableModel model = getModel(); if( model != null ) { return
* model.getResult(); } return null; }
*
* }
*
* protected class ExportComparisonToFileAction extends ExportToFileAction {
*
* private static final long serialVersionUID = 1L;
*
* private ExportComparisonToFileAction(MessageSourceAccessor messageSource,
* TableToTextExporter tableToTextExporter) { super(messageSource,
* tableToTextExporter); setFileChooser(fileChooser);
* setOptionPaneParent(SleepComparisonTable.this); }
*
* @Override protected Object getUserObject() { TagComparisonTableModel
* model = getModel(); if( model != null ) { return model.isShowPercent(); }
* return null; }
*
* @Override protected WriterExportableTable getExportableTable() {
* TagComparisonTableModel model = getModel(); if( model != null ) { return
* model.getResult(); } return null; }
*
* }
*/
private class CornerPanel extends JPanel {
private static final long serialVersionUID = 1L;
// private JLabel label;
public CornerPanel() {
super(new BorderLayout());
setBackground(DISABLED_COLOR);
setPreferredSize(new Dimension(CELL_SIZE, CELL_SIZE));
/*
* label = new JLabel();
* label.setHorizontalAlignment(JLabel.CENTER);
* label.setVerticalAlignment(JLabel.CENTER);
*
* add( label, BorderLayout.CENTER );
*/
}
@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);
}
/*
* public JLabel getLabel() { return label; }
*
* @Override public JPopupMenu getComponentPopupMenu() { return
* SleepComparisonTable.this.getComponentPopupMenu(); }
*/
}
private class HeaderTable extends JTable {
private static final long serialVersionUID = 1L;
public HeaderTable(TableModel dm) {
super(dm);
setTableHeader(null);
setBackground(DISABLED_COLOR);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setDefaultRenderer(String.class, new CenteringTableCellRenderer());
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) {
Object value = getValueAt(row, col);
if (value == null) {
return null;
}
if (value instanceof String) {
return (String) value;
}
}
return null;
}
@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();
}
@Override
public JPopupMenu getComponentPopupMenu() {
return NewStagerSleepComparisonTable.this.getComponentPopupMenu();
}
}
}