Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDirk Fauth2018-05-08 20:31:49 +0000
committerDirk Fauth2018-05-08 20:31:49 +0000
commit67b8408511faccd5fb50ed2483e3f8038d66176f (patch)
tree3e6b84770730e311b29135648ddafd3dc19bfa01
parent8e8f70a1a505eb4895bc09046f3231a3cb9e790c (diff)
downloadorg.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>
-rw-r--r--org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java34
-rw-r--r--org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayer.java22
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

Back to the top