Package org.eclipse.nebula.widgets.nattable.freeze

Source Code of org.eclipse.nebula.widgets.nattable.freeze.FreezeHelper

/*******************************************************************************
* Copyright (c) 2012, 2013 Dirk Fauth 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:
*    Dirk Fauth <dirk.fauth@gmail.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.nattable.freeze;

import org.eclipse.nebula.widgets.nattable.coordinate.PositionCoordinate;
import org.eclipse.nebula.widgets.nattable.freeze.command.FreezeColumnCommand;
import org.eclipse.nebula.widgets.nattable.freeze.command.FreezePositionCommand;
import org.eclipse.nebula.widgets.nattable.freeze.command.FreezeRowCommand;
import org.eclipse.nebula.widgets.nattable.freeze.command.FreezeSelectionCommand;
import org.eclipse.nebula.widgets.nattable.freeze.command.UnFreezeGridCommand;
import org.eclipse.nebula.widgets.nattable.freeze.event.FreezeEvent;
import org.eclipse.nebula.widgets.nattable.freeze.event.UnfreezeEvent;
import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer;
import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;

/**
* Helper class to deal with freeze and unfreeze of a NatTable.
*
* <p>
* This class is intended for internal use only. Consider using the appropriate
* commands instead of using this helper directly.
*
* @see FreezeColumnCommand
* @see FreezeRowCommand
* @see FreezePositionCommand
* @see FreezeSelectionCommand
* @see UnFreezeGridCommand
*
* @author Dirk Fauth
*
*/
public class FreezeHelper {

    /**
     * Freezes the grid at the specified position. This method is for internal
     * use. Consider using the appropriate commands on the NatTable instead to
     * freeze the grid programmatically.
     *
     * @param freezeLayer
     *            The FreezeLayer of the grid to perform the freeze action.
     * @param viewportLayer
     *            The ViewportLayer of the grid to perform the freeze action.
     * @param topLeftPosition
     *            The top left position of the freeze area
     * @param bottomRightPosition
     *            The bottom right position of the freeze area
     *
     * @see FreezeColumnCommand
     * @see FreezeRowCommand
     * @see FreezePositionCommand
     * @see FreezeSelectionCommand
     */
    public static void freeze(FreezeLayer freezeLayer,
            ViewportLayer viewportLayer, PositionCoordinate topLeftPosition,
            PositionCoordinate bottomRightPosition) {

        if (freezeLayer == null || viewportLayer == null) {
            throw new IllegalArgumentException(
                    "freezeLayer and viewportLayer can not be null!"); //$NON-NLS-1$
        }

        if (topLeftPosition != null && bottomRightPosition != null) {
            freezeLayer.setTopLeftPosition(topLeftPosition.columnPosition,
                    topLeftPosition.rowPosition);
            freezeLayer.setBottomRightPosition(
                    bottomRightPosition.columnPosition,
                    bottomRightPosition.rowPosition);

            IUniqueIndexLayer scrollableLayer = viewportLayer
                    .getScrollableLayer();
            int originX = bottomRightPosition.columnPosition == scrollableLayer
                    .getColumnCount() - 1 ? scrollableLayer.getWidth()
                    : scrollableLayer
                            .getStartXOfColumnPosition(bottomRightPosition.columnPosition + 1);
            int originY = bottomRightPosition.rowPosition == scrollableLayer
                    .getRowCount() - 1 ? scrollableLayer.getHeight()
                    : scrollableLayer
                            .getStartYOfRowPosition(bottomRightPosition.rowPosition + 1);
            viewportLayer.setMinimumOrigin(originX, originY);
            viewportLayer.fireLayerEvent(new FreezeEvent(viewportLayer));
        }
    }

    /**
     * Unfreezes the grid at the specified position. This method is for internal
     * use. Consider using the appropriate command on the NatTable instead to
     * unfreeze the grid programmatically.
     *
     * @param freezeLayer
     *            The FreezeLayer of the grid to perform the freeze action.
     * @param viewportLayer
     *            The ViewportLayer of the grid to perform the freeze action.
     *
     * @see UnFreezeGridCommand
     */
    public static void unfreeze(FreezeLayer freezeLayer,
            ViewportLayer viewportLayer) {
        if (freezeLayer == null || viewportLayer == null) {
            throw new IllegalArgumentException(
                    "freezeLayer and viewportLayer can not be null!"); //$NON-NLS-1$
        }

        resetViewport(freezeLayer, viewportLayer);

        freezeLayer.setTopLeftPosition(-1, -1);
        freezeLayer.setBottomRightPosition(-1, -1);

        viewportLayer.fireLayerEvent(new UnfreezeEvent(viewportLayer));
    }

    /**
     * Helper method to reset the origin coordinates of the viewport. Is needed
     * to perform an unfreeze or to override a current frozen state.
     *
     * @param freezeLayer
     *            The FreezeLayer of the grid to perform the freeze action.
     * @param viewportLayer
     *            The ViewportLayer of the grid to perform the freeze action.
     */
    public static void resetViewport(FreezeLayer freezeLayer,
            ViewportLayer viewportLayer) {
        PositionCoordinate topLeftPosition = freezeLayer.getTopLeftPosition();
        viewportLayer.resetOrigin(
                viewportLayer.getScrollableLayer().getStartXOfColumnPosition(
                        Math.max(0, topLeftPosition.columnPosition)),
                viewportLayer.getScrollableLayer().getStartYOfRowPosition(
                        Math.max(0, topLeftPosition.rowPosition)));
    }
}
TOP

Related Classes of org.eclipse.nebula.widgets.nattable.freeze.FreezeHelper

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.