/* * Licensed Materials - Property of Perforce Software, Inc. * © Copyright Perforce Software, Inc. 2014, 2021 * © Copyright IBM Corp. 2009, 2014 * © Copyright ILOG 1996, 2009 * All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * The Software and Documentation were developed at private expense and * are "Commercial Items" as that term is defined at 48 CFR 2.101, * consisting of "Commercial Computer Software" and * "Commercial Computer Software Documentation", as such terms are * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4, * as applicable. */ import java.awt.Dimension; import ilog.views.IlvManagerView; import ilog.views.IlvRect; import ilog.views.IlvTransformer; import ilog.views.tiling.IlvTileController; import ilog.views.tiling.IlvTileLockFilter; /** * A tile lock filter that does not allow more than N tiles to be loaded */ class TileFilter extends IlvTileLockFilter { /** * Internally stores the maximum number of tiles that can be locked */ private int maxTileNum; /** * Constructs a new TileFilter to not lock more than specified number of tiles * * @param maxTile * maximum number of tiles that can be locked */ public TileFilter(int maxTile) { super(); maxTileNum = maxTile; } Override public boolean isLockAllowed(IlvTileController tileController, IlvManagerView view) { // get the size of the view Dimension size = view.getSize(); // compute the corners of the view in the manager coordinate system IlvTransformer t = view.getTransformer(); if (t == null) return true; IlvRect rect = new IlvRect(0, 0, size.width, size.height); t.inverse(rect); // compute the number of visible tiles int indexes[] = tileController.getTileIndexes(rect); int horizontalTiles = indexes[IlvTileController.RIGHT_COLUMN_INDEX] - indexes[IlvTileController.LEFT_COLUMN_INDEX] + 1; int verticalTiles = indexes[IlvTileController.LOWER_ROW_INDEX] - indexes[IlvTileController.UPPER_ROW_INDEX] + 1; if ((horizontalTiles * verticalTiles) > maxTileNum) return false; else return true; } Override public boolean isPersistent() { return false; } }