blob: 5c3960932d6e5de62053a547494a0f31364195ac [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.columnChooser;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.nebula.widgets.nattable.columnChooser.gui.ColumnChooserDialog;
import org.eclipse.nebula.widgets.nattable.group.performance.GroupModel.Group;
import org.eclipse.swt.widgets.TreeItem;
/**
* Object representation of a column group in the SWT tree.
* <p>
* <b>Note:</b> This is set as the SWT data on the {@link TreeItem}.
* </p>
*
* @see ColumnChooserDialog
*/
public class ColumnGroupEntry {
private String label;
private Integer firstElementPosition;
private Integer firstElementIndex;
private boolean collapsed;
private Group group;
/**
* Creates a {@link ColumnGroupEntry} for the old column grouping mechanism.
*
* @param label
* The label to be shown in the tree.
* @param firstElementPosition
* The position of the first item in the group.
* @param firstElementIndex
* The index of the first item in the group.
* @param collapsed
* <code>true</code> if the group should be shown collapsed,
* <code>false</code> if not.
*/
public ColumnGroupEntry(String label, Integer firstElementPosition, Integer firstElementIndex, boolean collapsed) {
this.label = label;
this.firstElementPosition = firstElementPosition;
this.firstElementIndex = firstElementIndex;
this.collapsed = collapsed;
}
/**
* Creates a ColumnGroupEntry for the new performance column grouping, using
* the Group object as underlying data reference.
*
* @param group
* The {@link Group} that should be wrapped.
* @since 1.6
*/
public ColumnGroupEntry(Group group) {
this.group = group;
}
public String getLabel() {
if (this.group != null) {
return this.group.getName();
}
return this.label;
}
public Integer getFirstElementPosition() {
if (this.group != null) {
return this.group.getVisibleStartPosition();
}
return this.firstElementPosition;
}
public Integer getFirstElementIndex() {
if (this.group != null) {
return this.group.getVisibleStartIndex();
}
return this.firstElementIndex;
}
public boolean isCollapsed() {
if (this.group != null) {
return this.group.isCollapsed();
}
return this.collapsed;
}
/**
* @return The {@link Group} carried by this {@link ColumnGroupEntry} or
* <code>null</code> if it is configured for the old column grouping
* mechanism.
* @since 1.6
*/
public Group getGroup() {
return this.group;
}
public static List<Integer> getColumnGroupEntryPositions(List<ColumnGroupEntry> columnEntries) {
List<Integer> columnGroupEntryPositions = new ArrayList<>();
for (ColumnGroupEntry columnGroupEntry : columnEntries) {
columnGroupEntryPositions.add(columnGroupEntry.getFirstElementPosition());
}
return columnGroupEntryPositions;
}
@Override
public String toString() {
return "ColumnGroupEntry (" + //$NON-NLS-1$
"Label: " + getLabel() + //$NON-NLS-1$
", firstElementPosition: " + getFirstElementPosition() + //$NON-NLS-1$
", firstElementIndex: " + getFirstElementIndex() + //$NON-NLS-1$
", collapsed: " + isCollapsed() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ColumnGroupEntry other = (ColumnGroupEntry) obj;
if (this.group == null) {
if (this.firstElementIndex == null) {
if (other.firstElementIndex != null)
return false;
} else if (!this.firstElementIndex.equals(other.firstElementIndex))
return false;
if (this.firstElementPosition == null) {
if (other.firstElementPosition != null)
return false;
} else if (!this.firstElementPosition.equals(other.firstElementPosition))
return false;
if (this.collapsed != other.collapsed)
return false;
if (this.label == null) {
if (other.label != null)
return false;
} else if (!this.label.equals(other.label))
return false;
} else {
return this.group.equals(other.group);
}
return true;
}
@Override
public int hashCode() {
if (this.group == null) {
final int prime = 31;
int result = 1;
result = prime * result + ((this.firstElementIndex == null) ? 0 : this.firstElementIndex.hashCode());
result = prime * result + ((this.firstElementPosition == null) ? 0 : this.firstElementPosition.hashCode());
result = prime * result + (this.collapsed ? 1231 : 1237);
result = prime * result + ((this.label == null) ? 0 : this.label.hashCode());
return result;
} else {
return this.group.hashCode();
}
}
}