Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019, 2024 Dirk Fauth.
* Copyright (c) 2019, 2025 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
Expand Down Expand Up @@ -14731,4 +14731,49 @@ public void shouldLoadStateWithCollapsedNonConsecutive() {

verifyCleanState();
}

@Test
public void shouldUpdateHeightOnHidingGroupedColumns() {
Group nameGroup = this.columnGroupHeaderLayer.getGroupByName("Person");
Group addressGroup = this.columnGroupHeaderLayer.getGroupByName("Address");

// remove facts and personal group
this.gridLayer.doCommand(new RemoveColumnGroupCommand(8));
this.gridLayer.doCommand(new RemoveColumnGroupCommand(11));

this.columnGroupHeaderLayer.setCalculateHeight(true);

assertTrue(this.columnGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(40, this.columnGroupHeaderLayer.getHeight());
assertEquals(2, this.columnGroupHeaderLayer.getRowCount());

// hide columns in Person group
this.gridLayer.doCommand(new MultiColumnHideCommand(this.gridLayer, 1, 2, 3, 4));

assertTrue(this.columnGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(0, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(40, this.columnGroupHeaderLayer.getHeight());
assertEquals(2, this.columnGroupHeaderLayer.getRowCount());

// hide columns in Address group
this.gridLayer.doCommand(new MultiColumnHideCommand(this.gridLayer, 1, 2, 3, 4));

assertFalse(this.columnGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(0, nameGroup.getVisibleSpan());
assertEquals(0, addressGroup.getVisibleSpan());
assertEquals(20, this.columnGroupHeaderLayer.getHeight());
assertEquals(2, this.columnGroupHeaderLayer.getRowCount());

// show all columns again
this.gridLayer.doCommand(new ShowAllColumnsCommand());

assertTrue(this.columnGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(40, this.columnGroupHeaderLayer.getHeight());
assertEquals(2, this.columnGroupHeaderLayer.getRowCount());
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019, 2023 Dirk Fauth.
* Copyright (c) 2019, 2025 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
Expand Down Expand Up @@ -1359,4 +1359,24 @@ public void shouldLoadStateWithSpecialCharactersInGroupName() {
assertTrue(group3.hasMember(13));
assertTrue(group3.hasMember(14));
}

@Test
public void shouldProvideVisibleState() {
assertTrue(this.model.isVisible());

// remove all indexes from group 1
this.model.removePositionsFromGroup(0, 1, 2, 3);
// still visible because other groups are not empty
assertTrue(this.model.isVisible());

// remove all indexes from group 2
this.model.removePositionsFromGroup(5, 6, 7);
// still visible because other groups are not empty
assertTrue(this.model.isVisible());

// remove all indexes from group 3
this.model.removePositionsFromGroup(12, 13);
// all groups are empty, so group model is not visible anymore
assertFalse(this.model.isVisible());
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019, 2024 Dirk Fauth.
* Copyright (c) 2019, 2025 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
Expand Down Expand Up @@ -14708,4 +14708,49 @@ public void shouldLoadStateWithCollapsedNonConsecutive() {
verifyCleanState();
}

@Test
public void shouldUpdateWidthOnHidingGroupedColumns() {
Group nameGroup = this.rowGroupHeaderLayer.getGroupByName("Person");
Group addressGroup = this.rowGroupHeaderLayer.getGroupByName("Address");

// remove facts and personal group
this.gridLayer.doCommand(new RemoveRowGroupCommand(8));
this.gridLayer.doCommand(new RemoveRowGroupCommand(11));

this.rowGroupHeaderLayer.setCalculateWidth(true);

assertTrue(this.rowGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(60, this.rowGroupHeaderLayer.getWidth());
assertEquals(2, this.rowGroupHeaderLayer.getColumnCount());

// hide columns in Person group
this.gridLayer.doCommand(new MultiRowHideCommand(this.gridLayer, 1, 2, 3, 4));

assertTrue(this.rowGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(0, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(60, this.rowGroupHeaderLayer.getWidth());
assertEquals(2, this.rowGroupHeaderLayer.getColumnCount());

// hide columns in Address group
this.gridLayer.doCommand(new MultiRowHideCommand(this.gridLayer, 1, 2, 3, 4));

assertFalse(this.rowGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(0, nameGroup.getVisibleSpan());
assertEquals(0, addressGroup.getVisibleSpan());
assertEquals(40, this.rowGroupHeaderLayer.getWidth());
assertEquals(2, this.rowGroupHeaderLayer.getColumnCount());

// show all columns again
this.gridLayer.doCommand(new ShowAllRowsCommand());

assertTrue(this.rowGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(60, this.rowGroupHeaderLayer.getWidth());
assertEquals(2, this.rowGroupHeaderLayer.getColumnCount());
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019, 2020 Dirk Fauth.
* Copyright (c) 2019, 2025 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
Expand Down Expand Up @@ -40,6 +40,7 @@
import org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer;
import org.eclipse.nebula.widgets.nattable.group.command.ColumnGroupExpandCollapseCommand;
import org.eclipse.nebula.widgets.nattable.group.command.RemoveColumnGroupCommand;
import org.eclipse.nebula.widgets.nattable.group.performance.GroupModel.Group;
import org.eclipse.nebula.widgets.nattable.group.performance.command.ColumnGroupReorderCommand;
import org.eclipse.nebula.widgets.nattable.group.performance.command.ColumnGroupReorderEndCommand;
Expand Down Expand Up @@ -2497,4 +2498,58 @@ public void shouldNotBreakUnbreakableGroupOnReorderUngroupedToEndWithHiddenLastS

assertNull(this.columnGroupHeaderLayer.getGroupByPosition(1, 7));
}

@Test
public void shouldUpdateHeightOnHidingGroupedColumns() {
Group nameGroup = this.columnGroupHeaderLayer.getGroupByName("Person");
Group addressGroup = this.columnGroupHeaderLayer.getGroupByName("Address");

// remove facts and personal group
this.gridLayer.doCommand(new RemoveColumnGroupCommand(8));
this.gridLayer.doCommand(new RemoveColumnGroupCommand(11));

// change second level group to only include Address group
Group testGroup = this.columnGroupHeaderLayer.getGroupModel(1).getGroupByName("Test");
this.columnGroupHeaderLayer.removePositionsFromGroup(1, 8, 9, 10);

this.columnGroupHeaderLayer.setCalculateHeight(true);

assertTrue(this.columnGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(4, testGroup.getVisibleSpan());
assertEquals(60, this.columnGroupHeaderLayer.getHeight());
assertEquals(3, this.columnGroupHeaderLayer.getRowCount());

// hide columns in Address group
this.gridLayer.doCommand(new MultiColumnHideCommand(this.gridLayer, 5, 6, 7, 8));

// this hides Test group in level 1, so height is reduced by one line
assertTrue(this.columnGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(0, addressGroup.getVisibleSpan());
assertEquals(0, testGroup.getVisibleSpan());
assertEquals(40, this.columnGroupHeaderLayer.getHeight());
assertEquals(3, this.columnGroupHeaderLayer.getRowCount());

// hide columns in Person group
this.gridLayer.doCommand(new MultiColumnHideCommand(this.gridLayer, 1, 2, 3, 4));

assertFalse(this.columnGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(0, nameGroup.getVisibleSpan());
assertEquals(0, addressGroup.getVisibleSpan());
assertEquals(0, testGroup.getVisibleSpan());
assertEquals(20, this.columnGroupHeaderLayer.getHeight());
assertEquals(3, this.columnGroupHeaderLayer.getRowCount());

// show all columns again
this.gridLayer.doCommand(new ShowAllColumnsCommand());

assertTrue(this.columnGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(4, testGroup.getVisibleSpan());
assertEquals(60, this.columnGroupHeaderLayer.getHeight());
assertEquals(3, this.columnGroupHeaderLayer.getRowCount());
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019, 2020 Dirk Fauth.
* Copyright (c) 2019, 2025 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
Expand Down Expand Up @@ -39,6 +39,7 @@
import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultRowHeaderDataLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer;
import org.eclipse.nebula.widgets.nattable.group.command.RemoveRowGroupCommand;
import org.eclipse.nebula.widgets.nattable.group.command.RowGroupExpandCollapseCommand;
import org.eclipse.nebula.widgets.nattable.group.performance.GroupModel.Group;
import org.eclipse.nebula.widgets.nattable.group.performance.command.RowGroupReorderCommand;
Expand Down Expand Up @@ -2491,4 +2492,58 @@ public void shouldNotBreakUnbreakableGroupOnReorderUngroupedToEndWithHiddenLastS
assertNull(this.rowGroupHeaderLayer.getGroupByPosition(1, 7));
}

@Test
public void shouldUpdateWidthOnHidingGroupedRows() {
Group nameGroup = this.rowGroupHeaderLayer.getGroupByName("Person");
Group addressGroup = this.rowGroupHeaderLayer.getGroupByName("Address");

// remove facts and personal group
this.gridLayer.doCommand(new RemoveRowGroupCommand(8));
this.gridLayer.doCommand(new RemoveRowGroupCommand(11));

// change second level group to only include Address group
Group testGroup = this.rowGroupHeaderLayer.getGroupModel(1).getGroupByName("Test");
this.rowGroupHeaderLayer.removePositionsFromGroup(1, 8, 9, 10);

this.rowGroupHeaderLayer.setCalculateWidth(true);

assertTrue(this.rowGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(4, testGroup.getVisibleSpan());
assertEquals(80, this.rowGroupHeaderLayer.getWidth());
assertEquals(3, this.rowGroupHeaderLayer.getColumnCount());

// hide columns in Address group
this.gridLayer.doCommand(new MultiRowHideCommand(this.gridLayer, 5, 6, 7, 8));

// this hides Test group in level 1, so height is reduced by one line
assertTrue(this.rowGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(0, addressGroup.getVisibleSpan());
assertEquals(0, testGroup.getVisibleSpan());
assertEquals(60, this.rowGroupHeaderLayer.getWidth());
assertEquals(3, this.rowGroupHeaderLayer.getColumnCount());

// hide columns in Person group
this.gridLayer.doCommand(new MultiRowHideCommand(this.gridLayer, 1, 2, 3, 4));

assertFalse(this.rowGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(0, nameGroup.getVisibleSpan());
assertEquals(0, addressGroup.getVisibleSpan());
assertEquals(0, testGroup.getVisibleSpan());
assertEquals(40, this.rowGroupHeaderLayer.getWidth());
assertEquals(3, this.rowGroupHeaderLayer.getColumnCount());

// show all columns again
this.gridLayer.doCommand(new ShowAllRowsCommand());

assertTrue(this.rowGroupHeaderLayer.getGroupModel().isVisible());
assertEquals(4, nameGroup.getVisibleSpan());
assertEquals(4, addressGroup.getVisibleSpan());
assertEquals(4, testGroup.getVisibleSpan());
assertEquals(80, this.rowGroupHeaderLayer.getWidth());
assertEquals(3, this.rowGroupHeaderLayer.getColumnCount());
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019, 2024 Dirk Fauth.
* Copyright (c) 2019, 2025 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
Expand Down Expand Up @@ -730,7 +730,7 @@ private int getGroupingHeight() {
int height = 0;
for (int i = 0; i < this.model.size(); i++) {
GroupModel groupModel = this.model.get(i);
if (!groupModel.isEmpty()) {
if (groupModel.isVisible()) {
height += this.rowHeightConfig.getSize(getRowPositionForLevel(i));
}
}
Expand All @@ -755,7 +755,7 @@ public int getRowHeightByPosition(int rowPosition) {
return this.rowHeightConfig.getSize(rowPosition);
} else {
int level = getLevelForRowPosition(rowPosition);
return getGroupModel(level).isEmpty() ? 0 : this.rowHeightConfig.getSize(rowPosition);
return !getGroupModel(level).isVisible() ? 0 : this.rowHeightConfig.getSize(rowPosition);
}
} else {
return this.underlyingLayer.getRowHeightByPosition(rowPosition - rowCount);
Expand Down Expand Up @@ -855,7 +855,7 @@ public int getStartYOfRowPosition(int rowPosition) {
int startY = 0;
for (int i = 0; i < rowPosition; i++) {
GroupModel groupModel = this.model.get(i);
if (!groupModel.isEmpty()) {
if (groupModel.isVisible()) {
startY += this.rowHeightConfig.getSize(getRowPositionForLevel(i));
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019, 2024 Dirk Fauth.
* Copyright (c) 2019, 2025 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
Expand Down Expand Up @@ -756,6 +756,24 @@ public boolean isEmpty() {
return this.groups.isEmpty();
}

/**
*
* @return <code>true</code> if there is at least one group with a visible
* span > 0, <code>false</code> if there are no groups configured or
* all groups have a visible span == 0.
* @since 2.6
*/
public boolean isVisible() {
if (!isEmpty()) {
for (Group group : this.groups) {
if (group.getVisibleSpan() > 0) {
return true;
}
}
}
return false;
}

/**
* Checks if the given position is configured to be static in one of the
* groups.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019, 2024 Dirk Fauth.
* Copyright (c) 2019, 2025 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
Expand Down Expand Up @@ -723,7 +723,7 @@ private int getGroupingWidth() {
int width = 0;
for (int i = 0; i < this.model.size(); i++) {
GroupModel groupModel = this.model.get(i);
if (!groupModel.isEmpty()) {
if (groupModel.isVisible()) {
width += this.columnWidthConfig.getSize(getColumnPositionForLevel(i));
}
}
Expand All @@ -748,7 +748,7 @@ public int getColumnWidthByPosition(int columnPosition) {
return this.columnWidthConfig.getSize(columnPosition);
} else {
int level = getLevelForColumnPosition(columnPosition);
return getGroupModel(level).isEmpty() ? 0 : this.columnWidthConfig.getSize(columnPosition);
return !getGroupModel(level).isVisible() ? 0 : this.columnWidthConfig.getSize(columnPosition);
}
} else {
return this.underlyingLayer.getColumnWidthByPosition(columnPosition - columnCount);
Expand Down Expand Up @@ -848,7 +848,7 @@ public int getStartXOfColumnPosition(int columnPosition) {
int startX = 0;
for (int i = 0; i < columnPosition; i++) {
GroupModel groupModel = this.model.get(i);
if (!groupModel.isEmpty()) {
if (groupModel.isVisible()) {
startX += this.columnWidthConfig.getSize(getColumnPositionForLevel(i));
}
}
Expand Down