Package org.eclipse.nebula.widgets.nattable.group

Source Code of org.eclipse.nebula.widgets.nattable.group.RowGroupExpandCollapseLayer

/*******************************************************************************
* Copyright (c) 2012 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.group;

import java.util.Collection;
import java.util.HashSet;

import org.eclipse.nebula.widgets.nattable.group.command.RowGroupExpandCollapseCommandHandler;
import org.eclipse.nebula.widgets.nattable.group.model.IRowGroup;
import org.eclipse.nebula.widgets.nattable.group.model.IRowGroupModel;
import org.eclipse.nebula.widgets.nattable.group.model.IRowGroupModelListener;
import org.eclipse.nebula.widgets.nattable.hideshow.AbstractRowHideShowLayer;
import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer;

public class RowGroupExpandCollapseLayer<T> extends AbstractRowHideShowLayer
        implements IRowGroupModelListener {

    private final IRowGroupModel<T> model;

    public RowGroupExpandCollapseLayer(IUniqueIndexLayer underlyingLayer,
            IRowGroupModel<T> model) {
        super(underlyingLayer);
        this.model = model;

        model.registerRowGroupModelListener(this);

        registerCommandHandler(new RowGroupExpandCollapseCommandHandler<T>(this));
    }

    public IRowGroupModel<T> getModel() {
        return model;
    }

    // Expand/collapse

    @Override
    public boolean isRowIndexHidden(int rowIndex) {

        // This can happen if a row has just been removed.
        if (rowIndex >= model.getDataProvider().getRowCount()) {
            return true;
        }

        IUniqueIndexLayer underlyingLayer = (IUniqueIndexLayer) getUnderlyingLayer();

        boolean isHiddeninUnderlyingLayer = RowGroupUtils
                .isRowIndexHiddenInUnderLyingLayer(rowIndex, this,
                        underlyingLayer);

        // Get the row and the group from our cache and model.
        final T row = model.getRowFromIndexCache(rowIndex);
        IRowGroup<T> rowGroup = model.getRowGroupForRow(row);

        if (rowGroup == null) {
            return false;
        }

        boolean isCollapsedAndNotStaticRow = RowGroupUtils.isCollapsed(model,
                rowGroup) && !rowGroup.getOwnStaticMemberRows().contains(row);

        return isHiddeninUnderlyingLayer || isCollapsedAndNotStaticRow;
    }

    @Override
    public Collection<Integer> getHiddenRowIndexes() {
        Collection<Integer> hiddenRowIndexes = new HashSet<Integer>();

        IUniqueIndexLayer underlyingLayer = (IUniqueIndexLayer) getUnderlyingLayer();
        int underlyingColumnCount = underlyingLayer.getRowCount();
        for (int i = 0; i < underlyingColumnCount; i++) {
            int rowIndex = underlyingLayer.getRowIndexByPosition(i);
            if (isRowIndexHidden(rowIndex)) {
                hiddenRowIndexes.add(Integer.valueOf(rowIndex));
            }
        }

        return hiddenRowIndexes;
    }

    @Override
    public void rowGroupModelChanged() {
        invalidateCache();
    }

    @Override
    protected void invalidateCache() {
        super.invalidateCache();
        model.invalidateIndexCache();
    }

}
TOP

Related Classes of org.eclipse.nebula.widgets.nattable.group.RowGroupExpandCollapseLayer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.