package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale; import net.sourceforge.squirrel_sql.fw.datasetviewer.TableState; import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition; import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTablePanel; import net.sourceforge.squirrel_sql.fw.gui.SortableTable; import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel; import javax.swing.*; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableModel; import java.awt.*; import java.util.List; public class DataScaleTable extends SortableTable { private List<Object[]> _allRows; private ColumnDisplayDefinition[] _columnDefinitions; private DataScaleTable _parent; private DataScaleTable _kid; private DataSetViewerTablePanel _kidSimpleTable; public DataScaleTable(DataScaleTableModel dataScaleTableModel, List<Object[]> allRows, ColumnDisplayDefinition[] columnDefinitions) { super(dataScaleTableModel); _allRows = allRows; _columnDefinitions = columnDefinitions; setAutoResizeMode(JTable.AUTO_RESIZE_OFF); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); new DataScaleTablePopupHandler(this); new DataScaleTableColumnWidthsPersister(getTableHeader()); } @Override public TableCellRenderer getCellRenderer(int row, int column) { String headerValue = (String) getColumnModel().getColumn(column).getHeaderValue(); if(DataScaleTableModel.COL_NAME_COLUMN.equals(headerValue)) { return super.getCellRenderer(row, column); } else { DataScaleTableModel model = getDataScaleTableModel(); return createScaleDataCellRenderer(model); } } @Override public TableCellEditor getCellEditor(int row, int column) { String headerValue = (String) getColumnModel().getColumn(column).getHeaderValue(); if(DataScaleTableModel.COL_NAME_COLUMN.equals(headerValue)) { return super.getCellEditor(row, column); } else { DataScaleTableModel model = getDataScaleTableModel(); SortableTableModel sortableTableModel = (SortableTableModel) getModel(); return new DataScaleTableCellEditor(model.getDataScaleAt(sortableTableModel.transfromToModelRow(row))); } } public DataScaleTableModel getDataScaleTableModel() { TableModel ret = ((SortableTableModel) getModel()).getActualModel(); while(ret instanceof SortableTableModel) { ret = ((SortableTableModel)ret).getActualModel(); } return (DataScaleTableModel) ret; } private TableCellRenderer createScaleDataCellRenderer(final DataScaleTableModel dataScaleTableModel) { return new TableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { SortableTableModel sortableTableModel = (SortableTableModel) getModel(); return dataScaleTableModel.getDataScaleAt(sortableTableModel.transfromToModelRow(row)).getPanel(); } }; } public List<Object[]> getAllRows() { return _allRows; } public ColumnDisplayDefinition[] getColumnDisplayDefinitions() { return _columnDefinitions; } public void setParentScaleTable(DataScaleTable parent) { TableState st = new TableState(parent); st.apply(this); _parent = parent; _parent.setKidScaleTable(this); } public void setKidScaleTable(DataScaleTable kid) { _kid = kid; _kidSimpleTable = null; } public DataScaleTable getKidScaleTable() { return _kid; } public DataScaleTable getParentScaleTable() { return _parent; } public void setKidSimpleTable(DataSetViewerTablePanel simpleTable) { _kidSimpleTable = simpleTable; _kid = null; } public DataSetViewerTablePanel getKidSimpleTable() { return _kidSimpleTable; } }