/*
* Created on 24.08.2006
*
*/
package org.jdesktop.swingx.table;
import java.awt.event.ActionEvent;
import java.util.Collection;
import java.util.List;
import javax.swing.Action;
import javax.swing.table.TableColumn;
import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.action.AbstractActionExt;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
* Test to exposed known issues of <code>TableColumnModelExt</code>
* implementations.
*
* Ideally, there would be at least one failing test method per open
* Issue in the issue tracker. Plus additional failing test methods for
* not fully specified or not yet decided upon features/behaviour.
*
* @author Jeanette Winzenburg
*/
@RunWith(JUnit4.class)
public class TableColumnModelExtIssues extends TableColumnModelTest {
public static void main(String args[]) {
setSystemLF(false);
TableColumnModelExtIssues test = new TableColumnModelExtIssues();
try {
test.runInteractiveTests();
// test.runInteractiveTests("interactive.*Column.*");
// test.runInteractiveTests("interactive.*TableHeader.*");
// test.runInteractiveTests("interactive.*SorterP.*");
// test.runInteractiveTests("interactive.*Column.*");
} catch (Exception e) {
System.err.println("exception when executing interactive tests:");
e.printStackTrace();
}
}
/**
* Issue #624-swingx: support use-case to store/restore column sequence.
*/
public void interactiveRestoreColumnOrder() {
final JXTable source = new JXTable(20, 5);
source.setColumnControlVisible(true);
final JXTable target = new JXTable(source.getModel());
target.setColumnControlVisible(true);
JXFrame frame = wrapWithScrollingInFrame(source, target, "source --> target: copy column sequence");
Action resetOrder = new AbstractActionExt("reset to initial") {
public void actionPerformed(ActionEvent e) {
source.tableChanged(null);
target.tableChanged(null);
}
};
Action copyOrder = new AbstractActionExt("copy source order to target") {
public void actionPerformed(ActionEvent e) {
// source ...
// hidden columns, don't care about sequence
Collection<TableColumn> hiddenSourceColumns = source.getColumns(true);
hiddenSourceColumns.removeAll(source.getColumns());
// temporary set visible so we can get hold of their "virtual"
// view index
for (TableColumn tableColumn : hiddenSourceColumns) {
((TableColumnExt) tableColumn).setVisible(true);
}
// target
Collection<TableColumn> hiddenTargetColumns = target.getColumns(true);
hiddenTargetColumns.removeAll(target.getColumns());
for (TableColumn tableColumn : hiddenTargetColumns) {
((TableColumnExt) tableColumn).setVisible(true);
}
// visible sequence if all were visible
List<TableColumn> sourceColumns = source.getColumns();
for (int i = 0; i < sourceColumns.size(); i++) {
int sourceID = sourceColumns.get(i).getModelIndex();
List<TableColumn> targetColumns = target.getColumns();
for (int j = 0; j < targetColumns.size(); j++) {
if (targetColumns.get(j).getModelIndex() == sourceID) {
target.getColumnModel().moveColumn(j, i);
break;
}
}
}
// cleanup: hide originally hidden columns
for (TableColumn tableColumn : hiddenSourceColumns) {
((TableColumnExt) tableColumn).setVisible(false);
}
for (TableColumn tableColumn : hiddenTargetColumns) {
((TableColumnExt) tableColumn).setVisible(false);
}
}
};
addAction(frame, resetOrder);
addAction(frame, copyOrder);
frame.pack();
frame.setVisible(true);
}
/**
* Do nothing, just to make the runner happy if there are no
* issues.
*
*/
public void testDummy() {
}
}