/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.bearsoft.gui.grid;
import com.bearsoft.gui.grid.BaseTableTest.SampleColumnModel;
import com.bearsoft.gui.grid.BaseTableTest.SampleTableModel;
import com.bearsoft.gui.grid.columns.ConstrainedColumnModel;
import com.bearsoft.gui.grid.columns.InsettedColumnModel;
import com.bearsoft.gui.grid.constraints.LinearConstraint;
import com.bearsoft.gui.grid.data.BoundaredTableModel;
import com.bearsoft.gui.grid.insets.InsetContent;
import com.bearsoft.gui.grid.insets.InsetPart;
import com.bearsoft.gui.grid.insets.LinearInset;
import com.bearsoft.gui.grid.rows.ConstrainedRowSorter;
import com.bearsoft.gui.grid.rows.InsettedRowSorter;
import com.bearsoft.gui.grid.selection.ConstrainedListSelectionModel;
import com.bearsoft.gui.grid.selection.InsettedListSelectionModel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.border.MatteBorder;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
/**
*
* @author Gala
*/
public class GridTest extends BaseTableTest {
protected JFrame frame;
protected SampleTableModel etalonModel;
protected TableColumnModel etalonColumnModel;
protected TableColumnModel insettedColumnModel;
protected ListSelectionModel etalonRowsSelectionModel;
protected ListSelectionModel etalonColumnsSelectionModel;
protected TableModel insettedModel;
protected ListSelectionModel insettedSelectionModel;
protected ListSelectionModel insettedColumnSelectionModel;
protected class SyncTableHeader extends JTableHeader {
public SyncTableHeader(TableColumnModel aColumnModel) {
super(aColumnModel);
}
@Override
protected void paintComponent(Graphics g) {
synchronized (GridTest.this) {
super.paintComponent(g);
}
}
}
protected class SyncTable extends JTable {
@Override
protected void paintComponent(Graphics g) {
synchronized (GridTest.this) {
super.paintComponent(g);
}
}
@Override
protected JTableHeader createDefaultTableHeader() {
return new SyncTableHeader(columnModel);
}
}
protected class ConfResult {
public LinearConstraint leftColsConstraint;
public LinearConstraint rightColsConstraint;
public LinearConstraint topRowsConstraint;
public LinearConstraint bottomRowsConstraint;
public JTable tlTable = new SyncTable();
public JTable trTable = new SyncTable();
public JTable blTable = new SyncTable();
public JTable brTable = new SyncTable();
}
protected ConfResult beginVisual(int aFixedRows, int aFixedCols, LinearInset aRowsInset, LinearInset aColumnsInset) throws Exception {
// base grid
etalonModel = new SampleTableModel();
etalonColumnModel = new SampleColumnModel(new LinearInset(0, 0));
for (int i = 0; i < etalonColumnModel.getColumnCount(); i++) {
etalonColumnModel.getColumn(i).setMinWidth(15);
}
etalonRowsSelectionModel = new DefaultListSelectionModel();
etalonColumnsSelectionModel = new DefaultListSelectionModel();
etalonColumnModel.setSelectionModel(etalonColumnsSelectionModel);
etalonColumnModel.setColumnSelectionAllowed(true);
etalonRowsSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
etalonColumnsSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// constraints setup
LinearConstraint leftColsConstraint = new LinearConstraint(0, aFixedCols - 1);
LinearConstraint rightColsConstraint = new LinearConstraint(aFixedCols, Integer.MAX_VALUE);
LinearConstraint topRowsConstraint = new LinearConstraint(0, aFixedRows - 1);
LinearConstraint bottomRowsConstraint = new LinearConstraint(aFixedRows, Integer.MAX_VALUE);
ConfResult result = new ConfResult();
result.leftColsConstraint = leftColsConstraint;
result.rightColsConstraint = rightColsConstraint;
result.topRowsConstraint = topRowsConstraint;
result.bottomRowsConstraint = bottomRowsConstraint;
// insetted layer models setup
insettedModel = new BoundaredTableModel(etalonModel, InsetPart.AFTER_INSET_BIAS, aRowsInset, aColumnsInset);
insettedSelectionModel = new InsettedListSelectionModel(etalonRowsSelectionModel, aRowsInset, new InsetContent() {
public int getContentSize() {
return insettedModel.getRowCount();
}
});
insettedColumnModel = new InsettedColumnModel(etalonColumnModel, aColumnsInset);
insettedColumnSelectionModel = new InsettedListSelectionModel(etalonColumnsSelectionModel, aColumnsInset, new InsetContent() {
public int getContentSize() {
return insettedModel.getColumnCount();
}
});
insettedColumnModel.setSelectionModel(insettedColumnSelectionModel);
InsettedRowSorter<TableModel> insettedRowSorter = new InsettedRowSorter<>(insettedModel, aRowsInset);
// constrained layer models setup
result.tlTable.setModel(insettedModel);
result.trTable.setModel(insettedModel);
result.blTable.setModel(insettedModel);
result.brTable.setModel(insettedModel);
result.tlTable.setRowSorter(new ConstrainedRowSorter(insettedRowSorter, topRowsConstraint));
result.tlTable.setSelectionModel(new ConstrainedListSelectionModel(insettedSelectionModel, topRowsConstraint));
result.tlTable.setColumnModel(new ConstrainedColumnModel(insettedColumnModel, leftColsConstraint));
result.tlTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(insettedColumnSelectionModel, leftColsConstraint));
result.tlTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.trTable.setRowSorter(new ConstrainedRowSorter(insettedRowSorter, topRowsConstraint));
result.trTable.setSelectionModel(new ConstrainedListSelectionModel(insettedSelectionModel, topRowsConstraint));
result.trTable.setColumnModel(new ConstrainedColumnModel(insettedColumnModel, rightColsConstraint));
result.trTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(insettedColumnSelectionModel, rightColsConstraint));
result.trTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.blTable.setRowSorter(new ConstrainedRowSorter(insettedRowSorter, bottomRowsConstraint));
result.blTable.setSelectionModel(new ConstrainedListSelectionModel(insettedSelectionModel, bottomRowsConstraint));
result.blTable.setColumnModel(new ConstrainedColumnModel(insettedColumnModel, leftColsConstraint));
result.blTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(insettedColumnSelectionModel, leftColsConstraint));
result.blTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.brTable.setRowSorter(new ConstrainedRowSorter(insettedRowSorter, bottomRowsConstraint));
result.brTable.setSelectionModel(new ConstrainedListSelectionModel(insettedSelectionModel, bottomRowsConstraint));
result.brTable.setColumnModel(new ConstrainedColumnModel(insettedColumnModel, rightColsConstraint));
result.brTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(insettedColumnSelectionModel, rightColsConstraint));
result.brTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// grid components setup
JPanel tlPanel = new JPanel(new BorderLayout());
tlPanel.add(result.tlTable.getTableHeader(), BorderLayout.NORTH);
tlPanel.add(result.tlTable, BorderLayout.CENTER);
JPanel trPanel = new JPanel(new BorderLayout());
trPanel.add(result.trTable.getTableHeader(), BorderLayout.NORTH);
trPanel.add(result.trTable, BorderLayout.CENTER);
JPanel blPanel = new JPanel(new BorderLayout());
blPanel.add(result.blTable, BorderLayout.CENTER);
JPanel brPanel = new JPanel(new BorderLayout());
brPanel.add(result.brTable, BorderLayout.CENTER);
trPanel.setBorder(new MatteBorder(0, 0, 1, 0, Color.blue));
tlPanel.setBorder(new MatteBorder(0, 0, 1, 1, Color.blue));
blPanel.setBorder(new MatteBorder(0, 0, 0, 1, Color.blue));
final JScrollPane gridScroll = new JScrollPane();
gridScroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, tlPanel);
gridScroll.setColumnHeaderView(trPanel);
gridScroll.setRowHeaderView(blPanel);
gridScroll.setViewportView(brPanel);
// test components setup
frame = new JFrame();
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(gridScroll, BorderLayout.CENTER);
frame.setSize(800, 700);
//frame.setVisible(true);
frame.setTitle("Configured tests frame with constraints configured over general insets");
return result;
}
protected ConfResult beginConstrainedVisual(int aFixedRows, int aFixedCols) throws Exception {
// base grid
etalonModel = new SampleTableModel();
etalonColumnModel = new SampleColumnModel(new LinearInset(0, 0));
for (int i = 0; i < etalonColumnModel.getColumnCount(); i++) {
etalonColumnModel.getColumn(i).setMinWidth(15);
}
etalonRowsSelectionModel = new DefaultListSelectionModel();
etalonColumnsSelectionModel = new DefaultListSelectionModel();
etalonColumnModel.setSelectionModel(etalonColumnsSelectionModel);
etalonColumnModel.setColumnSelectionAllowed(true);
etalonRowsSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
etalonColumnsSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// constraints setup
LinearConstraint leftColsConstraint = new LinearConstraint(0, aFixedCols - 1);
LinearConstraint rightColsConstraint = new LinearConstraint(aFixedCols, Integer.MAX_VALUE);
LinearConstraint topRowsConstraint = new LinearConstraint(0, aFixedRows - 1);
LinearConstraint bottomRowsConstraint = new LinearConstraint(aFixedRows, Integer.MAX_VALUE);
ConfResult result = new ConfResult();
// constrained layer models setup
result.tlTable.setModel(etalonModel);
result.trTable.setModel(etalonModel);
result.blTable.setModel(etalonModel);
result.brTable.setModel(etalonModel);
result.tlTable.setRowSorter(new ConstrainedRowSorter(etalonModel, topRowsConstraint));
result.tlTable.setSelectionModel(new ConstrainedListSelectionModel(etalonRowsSelectionModel, topRowsConstraint));
result.tlTable.setColumnModel(new ConstrainedColumnModel(etalonColumnModel, leftColsConstraint));
result.tlTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(etalonColumnsSelectionModel, leftColsConstraint));
result.tlTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.trTable.setRowSorter(new ConstrainedRowSorter(etalonModel, topRowsConstraint));
result.trTable.setSelectionModel(new ConstrainedListSelectionModel(etalonRowsSelectionModel, topRowsConstraint));
result.trTable.setColumnModel(new ConstrainedColumnModel(etalonColumnModel, rightColsConstraint));
result.trTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(etalonColumnsSelectionModel, rightColsConstraint));
result.trTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.blTable.setRowSorter(new ConstrainedRowSorter(etalonModel, bottomRowsConstraint));
result.blTable.setSelectionModel(new ConstrainedListSelectionModel(etalonRowsSelectionModel, bottomRowsConstraint));
result.blTable.setColumnModel(new ConstrainedColumnModel(etalonColumnModel, leftColsConstraint));
result.blTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(etalonColumnsSelectionModel, leftColsConstraint));
result.blTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.brTable.setRowSorter(new ConstrainedRowSorter(etalonModel, bottomRowsConstraint));
result.brTable.setSelectionModel(new ConstrainedListSelectionModel(etalonRowsSelectionModel, bottomRowsConstraint));
result.brTable.setColumnModel(new ConstrainedColumnModel(etalonColumnModel, rightColsConstraint));
result.brTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(etalonColumnsSelectionModel, rightColsConstraint));
result.brTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// grid components setup
JPanel tlPanel = new JPanel(new BorderLayout());
tlPanel.add(result.tlTable.getTableHeader(), BorderLayout.NORTH);
tlPanel.add(result.tlTable, BorderLayout.CENTER);
JPanel trPanel = new JPanel(new BorderLayout());
trPanel.add(result.trTable.getTableHeader(), BorderLayout.NORTH);
trPanel.add(result.trTable, BorderLayout.CENTER);
JPanel blPanel = new JPanel(new BorderLayout());
blPanel.add(result.blTable, BorderLayout.CENTER);
JPanel brPanel = new JPanel(new BorderLayout());
brPanel.add(result.brTable, BorderLayout.CENTER);
trPanel.setBorder(new MatteBorder(0, 0, 1, 0, Color.blue));
tlPanel.setBorder(new MatteBorder(0, 0, 1, 1, Color.blue));
blPanel.setBorder(new MatteBorder(0, 0, 0, 1, Color.blue));
final JScrollPane gridScroll = new JScrollPane();
gridScroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, tlPanel);
gridScroll.setColumnHeaderView(trPanel);
gridScroll.setRowHeaderView(blPanel);
gridScroll.setViewportView(brPanel);
// test components setup
frame = new JFrame();
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(gridScroll, BorderLayout.CENTER);
frame.setSize(800, 700);
//frame.setVisible(true);
frame.setTitle("Configured tests frame with only constraints configured");
return result;
}
protected ConfResult beginSortedVisual(int aFixedRows, int aFixedCols, LinearInset aRowsInset, LinearInset aColumnsInset) throws Exception {
// base grid
etalonModel = new SampleTableModel();
etalonColumnModel = new SampleColumnModel(new LinearInset(0, 0));
for (int i = 0; i < etalonColumnModel.getColumnCount(); i++) {
etalonColumnModel.getColumn(i).setMinWidth(15);
}
etalonRowsSelectionModel = new DefaultListSelectionModel();
etalonColumnsSelectionModel = new DefaultListSelectionModel();
etalonColumnModel.setSelectionModel(etalonColumnsSelectionModel);
etalonColumnModel.setColumnSelectionAllowed(true);
etalonRowsSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
etalonColumnsSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// constraints setup
LinearConstraint leftColsConstraint = new LinearConstraint(0, aFixedCols - 1);
LinearConstraint rightColsConstraint = new LinearConstraint(aFixedCols, Integer.MAX_VALUE);
LinearConstraint topRowsConstraint = new LinearConstraint(0, aFixedRows - 1);
LinearConstraint bottomRowsConstraint = new LinearConstraint(aFixedRows, Integer.MAX_VALUE);
// insetted layer models setup
insettedModel = new BoundaredTableModel(etalonModel, InsetPart.AFTER_INSET_BIAS, aRowsInset, aColumnsInset);
insettedSelectionModel = new InsettedListSelectionModel(etalonRowsSelectionModel, aRowsInset, new InsetContent() {
public int getContentSize() {
return insettedModel.getRowCount();
}
});
insettedColumnModel = new InsettedColumnModel(etalonColumnModel, aColumnsInset);
insettedColumnSelectionModel = new InsettedListSelectionModel(etalonColumnsSelectionModel, aColumnsInset, new InsetContent() {
public int getContentSize() {
return insettedModel.getColumnCount();
}
});
insettedColumnModel.setSelectionModel(insettedColumnSelectionModel);
InsettedRowSorter<TableModel> insettedRowSorter = new InsettedRowSorter<>(new TableRowSorter(insettedModel), aRowsInset);
ConfResult result = new ConfResult();
// constrained layer models setup
result.tlTable.setModel(insettedModel);
result.trTable.setModel(insettedModel);
result.blTable.setModel(insettedModel);
result.brTable.setModel(insettedModel);
result.tlTable.setRowSorter(new ConstrainedRowSorter(insettedRowSorter, topRowsConstraint));
result.tlTable.setSelectionModel(new ConstrainedListSelectionModel(insettedSelectionModel, topRowsConstraint));
result.tlTable.setColumnModel(new ConstrainedColumnModel(insettedColumnModel, leftColsConstraint));
result.tlTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(insettedColumnSelectionModel, leftColsConstraint));
result.tlTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.trTable.setRowSorter(new ConstrainedRowSorter(insettedRowSorter, topRowsConstraint));
result.trTable.setSelectionModel(new ConstrainedListSelectionModel(insettedSelectionModel, topRowsConstraint));
result.trTable.setColumnModel(new ConstrainedColumnModel(insettedColumnModel, rightColsConstraint));
result.trTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(insettedColumnSelectionModel, rightColsConstraint));
result.trTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.blTable.setRowSorter(new ConstrainedRowSorter(insettedRowSorter, bottomRowsConstraint));
result.blTable.setSelectionModel(new ConstrainedListSelectionModel(insettedSelectionModel, bottomRowsConstraint));
result.blTable.setColumnModel(new ConstrainedColumnModel(insettedColumnModel, leftColsConstraint));
result.blTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(insettedColumnSelectionModel, leftColsConstraint));
result.blTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
result.brTable.setRowSorter(new ConstrainedRowSorter(insettedRowSorter, bottomRowsConstraint));
result.brTable.setSelectionModel(new ConstrainedListSelectionModel(insettedSelectionModel, bottomRowsConstraint));
result.brTable.setColumnModel(new ConstrainedColumnModel(insettedColumnModel, rightColsConstraint));
result.brTable.getColumnModel().setSelectionModel(new ConstrainedListSelectionModel(insettedColumnSelectionModel, rightColsConstraint));
result.brTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// grid components setup
JPanel tlPanel = new JPanel(new BorderLayout());
tlPanel.add(result.tlTable.getTableHeader(), BorderLayout.NORTH);
tlPanel.add(result.tlTable, BorderLayout.CENTER);
JPanel trPanel = new JPanel(new BorderLayout());
trPanel.add(result.trTable.getTableHeader(), BorderLayout.NORTH);
trPanel.add(result.trTable, BorderLayout.CENTER);
JPanel blPanel = new JPanel(new BorderLayout());
blPanel.add(result.blTable, BorderLayout.CENTER);
JPanel brPanel = new JPanel(new BorderLayout());
brPanel.add(result.brTable, BorderLayout.CENTER);
trPanel.setBorder(new MatteBorder(0, 0, 1, 0, Color.blue));
tlPanel.setBorder(new MatteBorder(0, 0, 1, 1, Color.blue));
blPanel.setBorder(new MatteBorder(0, 0, 0, 1, Color.blue));
final JScrollPane gridScroll = new JScrollPane();
gridScroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, tlPanel);
gridScroll.setColumnHeaderView(trPanel);
gridScroll.setRowHeaderView(blPanel);
gridScroll.setViewportView(brPanel);
// test components setup
frame = new JFrame();
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(gridScroll, BorderLayout.CENTER);
frame.setSize(800, 700);
//frame.setVisible(true);
frame.setTitle("Configured tests frame with full grid configured over insets, constraints and sorting");
return result;
}
protected void endVisual() {
//frame.setVisible(false);
frame.dispose();
}
}