diff options
author | Dirk Fauth | 2018-05-08 20:31:49 +0000 |
---|---|---|
committer | Dirk Fauth | 2018-05-08 20:31:49 +0000 |
commit | 67b8408511faccd5fb50ed2483e3f8038d66176f (patch) | |
tree | 3e6b84770730e311b29135648ddafd3dc19bfa01 | |
parent | 8e8f70a1a505eb4895bc09046f3231a3cb9e790c (diff) | |
download | org.eclipse.nebula.widgets.nattable-67b8408511faccd5fb50ed2483e3f8038d66176f.tar.gz org.eclipse.nebula.widgets.nattable-67b8408511faccd5fb50ed2483e3f8038d66176f.tar.xz org.eclipse.nebula.widgets.nattable-67b8408511faccd5fb50ed2483e3f8038d66176f.zip |
Bug 379898 - Hierarchical tree table
Fixed rendering of level header columns on hiding columns
Change-Id: I15feac475037adf856210c146c6289981c4cc421
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
2 files changed, 52 insertions, 4 deletions
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java index 8ef9ba81..e4a3950d 100644 --- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java +++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java @@ -33,6 +33,9 @@ import org.eclipse.nebula.widgets.nattable.data.ListDataProvider; import org.eclipse.nebula.widgets.nattable.data.convert.DefaultDisplayConverter; import org.eclipse.nebula.widgets.nattable.dataset.car.CarService; import org.eclipse.nebula.widgets.nattable.dataset.car.Classification; +import org.eclipse.nebula.widgets.nattable.hideshow.ColumnHideShowLayer; +import org.eclipse.nebula.widgets.nattable.hideshow.command.ColumnHideCommand; +import org.eclipse.nebula.widgets.nattable.hideshow.command.ShowAllColumnsCommand; import org.eclipse.nebula.widgets.nattable.hideshow.event.HideRowPositionsEvent; import org.eclipse.nebula.widgets.nattable.hideshow.event.ShowRowPositionsEvent; import org.eclipse.nebula.widgets.nattable.hierarchical.HierarchicalTreeLayer.HierarchicalTreeNode; @@ -72,6 +75,7 @@ public class HierarchicalTreeLayerTest { private IRowDataProvider<HierarchicalWrapper> bodyDataProvider; private DataLayer bodyDataLayer; private ColumnReorderLayer columnReorderLayer; + private ColumnHideShowLayer columnHideShowLayer; private SelectionLayer selectionLayer; private HierarchicalTreeLayer treeLayer; @@ -92,7 +96,8 @@ public class HierarchicalTreeLayerTest { // simply apply labels for every column by index this.bodyDataLayer.setConfigLabelAccumulator(new ColumnLabelAccumulator()); this.columnReorderLayer = new ColumnReorderLayer(this.bodyDataLayer); - this.selectionLayer = new SelectionLayer(this.columnReorderLayer); + this.columnHideShowLayer = new ColumnHideShowLayer(this.columnReorderLayer); + this.selectionLayer = new SelectionLayer(this.columnHideShowLayer); this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.data, CarService.PROPERTY_NAMES_COMPACT); this.layerListener = new LayerListenerFixture(); @@ -125,6 +130,33 @@ public class HierarchicalTreeLayerTest { } @Test + public void testIsLevelHeaderColumnOnHideShow() { + assertTrue(this.treeLayer.isLevelHeaderColumn(0)); + assertTrue(this.treeLayer.isLevelHeaderColumn(3)); + assertTrue(this.treeLayer.isLevelHeaderColumn(6)); + + this.treeLayer.doCommand(new ColumnHideCommand(this.treeLayer, 1)); + + assertTrue(this.treeLayer.isLevelHeaderColumn(0)); + assertTrue(this.treeLayer.isLevelHeaderColumn(2)); + assertTrue(this.treeLayer.isLevelHeaderColumn(5)); + + this.treeLayer.doCommand(new ShowAllColumnsCommand()); + + this.treeLayer.doCommand(new ColumnHideCommand(this.treeLayer, 4)); + + assertTrue(this.treeLayer.isLevelHeaderColumn(0)); + assertTrue(this.treeLayer.isLevelHeaderColumn(3)); + assertTrue(this.treeLayer.isLevelHeaderColumn(5)); + + this.treeLayer.doCommand(new ShowAllColumnsCommand()); + + assertTrue(this.treeLayer.isLevelHeaderColumn(0)); + assertTrue(this.treeLayer.isLevelHeaderColumn(3)); + assertTrue(this.treeLayer.isLevelHeaderColumn(6)); + } + + @Test public void testIsTreeColumn() { // with level header column 1 and 4 are node columns assertFalse(this.treeLayer.isTreeColumn(0)); diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayer.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayer.java index 38c93398..9b778859 100644 --- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayer.java +++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayer.java @@ -431,6 +431,10 @@ public class HierarchicalTreeLayer extends AbstractRowHideShowLayer { } getHiddenRowIndexes().clear(); getHiddenRowIndexes().addAll(updatedHiddenRows); + } else if (structuralChangeEvent.isHorizontalStructureChanged()) { + // if the column structure was changed we need to recalculate + // the header positions, e.g. on column hide or show + calculateLevelColumnHeaderPositions(); } } else if (event instanceof SearchEvent) { PositionCoordinate coord = ((SearchEvent) event).getCellCoordinate(); @@ -688,7 +692,7 @@ public class HierarchicalTreeLayer extends AbstractRowHideShowLayer { List<Integer> levelColumns = getColumnIndexesForLevel(level); for (int columnIndex : levelColumns) { int column = this.selectionLayer.getColumnPositionByIndex(columnIndex); - if (this.selectionLayer.isCellPositionSelected(column, selectionLayerRowPosition)) { + if (column >= 0 && this.selectionLayer.isCellPositionSelected(column, selectionLayerRowPosition)) { return true; } } @@ -788,7 +792,7 @@ public class HierarchicalTreeLayer extends AbstractRowHideShowLayer { * underlying layer <code>false</code> if not. */ private boolean isHiddenInUnderlyingLayer(int rowIndex) { - IUniqueIndexLayer underlyingLayer = (IUniqueIndexLayer) getUnderlyingLayer(); + IUniqueIndexLayer underlyingLayer = getUnderlyingLayer(); return (underlyingLayer.getRowPositionByIndex(rowIndex) == -1); } @@ -1222,13 +1226,25 @@ public class HierarchicalTreeLayer extends AbstractRowHideShowLayer { this.levelHeaderPositions = new int[this.nodeColumnMapping.size()]; int pos = 0; for (Map.Entry<Integer, Integer> entry : this.nodeColumnMapping.entrySet()) { - this.levelHeaderPositions[pos++] = entry.getValue() + entry.getKey(); + int hiddenColumns = 0; + for (int i = (entry.getValue() - 1); i >= 0; i--) { + if (getUnderlyingLayer().getColumnPositionByIndex(i) < 0) { + hiddenColumns++; + } + } + + this.levelHeaderPositions[pos++] = entry.getValue() + entry.getKey() - hiddenColumns; } } else { this.levelHeaderPositions = new int[0]; } } + @Override + protected IUniqueIndexLayer getUnderlyingLayer() { + return (IUniqueIndexLayer) this.underlyingLayer; + } + // Columns @Override |