public void setBlock(int geoX, int geoY, GeoBlock block) { int blockX = GeoEngine.getBlockXY(geoX); int blockY = GeoEngine.getBlockXY(geoY); _geoBlocks[blockX, blockY] = block;; }
public bool dataEqualFor(GeoBlock block) { GeoByteBuffer geoBlockData = _geoBlocksData[block.getBlockX(), block.getBlockY()]; geoBlockData.clear(); return(block.dataEquals(geoBlockData)); }
public void convertBlock(GeoBlock block, byte type) { int blockX = block.getBlockX(); int blockY = block.getBlockY(); GeoBlock convertedBlock; // switch (type) { case GeoEngine.GEO_BLOCK_TYPE_FLAT: convertedBlock = GeoBlockFlat.convertFrom(block).setRegion(this); break; case GeoEngine.GEO_BLOCK_TYPE_COMPLEX: convertedBlock = GeoBlockComplex.convertFrom(block).setRegion(this); break; case GeoEngine.GEO_BLOCK_TYPE_MULTILAYER: convertedBlock = GeoBlockMultiLayer.convertFrom(block).setRegion(this); break; default: throw new ArgumentException("Unkown type: " + type, "type"); } // block.unload(); _geoBlocks[blockX, blockY] = convertedBlock; }
private void selectGeoCellFlat(GeoCell cell, bool append) { GeoBlock block = cell.getBlock(); GeoBlockEntry entry = getEntry(block); FastArrayList <GeoCell> selected = entry.getValue(); // if (append) { if (selected != null) { cell.setSelectionState(SelectionState.NORMAL); entry.remove(); return; } } else { unselectAll(); selected = null; } // cell.setSelectionState(SelectionState.SELECTED); selected = new FastArrayList <GeoCell>(block.getCells()); entry.setKey(block); entry.setValue(selected); entry.addBefore(getTail()); }
public void restoreBlock(GeoBlock block) { int blockX = block.getBlockX(); int blockY = block.getBlockY(); GeoByteBuffer reader = _geoBlocksData[blockX, blockY]; reader.clear(); block.unload(); _geoBlocks[blockX, blockY] = readBlock(blockX, blockY, reader, true); }
public void unselectGeoCell(GeoCell cell) { GeoBlock block = cell.getBlock(); GeoBlockEntry entry = getEntry(block); FastArrayList <GeoCell> selected = entry.getValue(); if (selected != null && selected.remove(cell)) { if (selected.isEmpty()) { setStateOf(block.getCells(), SelectionState.NORMAL); entry.remove(); updateGUI(null); } else { cell.setSelectionState(SelectionState.HIGHLIGHTED); updateGUI(selected.getLastUnsafe()); } } }
//----------------------------- private GeoBlockEntry getEntry(GeoBlock block) { return(_selected[block.getBlockX() * GeoEngine.GEO_REGION_SIZE + block.getBlockY()]); }
private void selectGeoCellMultiLayer(GeoCell cell, bool fullBlock, bool append) { GeoBlock block = cell.getBlock(); GeoBlockEntry entry = getEntry(block); GeoCell[] cells = block.getCells(); GLSelectionBox selectionBox = GLDisplay.getInstance().getSelectionBox(); FastArrayList <GeoCell> selected = entry.getValue(); // if (append) { if (selected != null) { if (fullBlock) { if (selectionBox.isInfHeight()) { if (selected.size() == cells.Length) { setStateOf(cells, SelectionState.NORMAL); entry.remove(); } else { selected.clear(); selected.addAll(cells); setStateOf(cells, SelectionState.SELECTED); } } else { _temp.clear(); selectionBox.getAllCellsInside(cell, cells, _temp); // if (selected.containsAll(_temp)) { if (selected.size() == _temp.size()) { setStateOf(cells, SelectionState.NORMAL); entry.remove(); } else { setStateOf(_temp, SelectionState.NORMAL); selected.removeAll(_temp); } } else { setStateOf(_temp, SelectionState.SELECTED); selected.addAllIfAbsent(_temp); } } } else { if (selected.remove(cell)) { if (selected.isEmpty()) { setStateOf(cells, SelectionState.NORMAL); entry.remove(); } else { cell.setSelectionState(SelectionState.HIGHLIGHTED); } } else { selected.addLast(cell); cell.setSelectionState(SelectionState.SELECTED); } } } else { if (fullBlock) { if (selectionBox.isInfHeight()) { selected = new FastArrayList <GeoCell>(cells); } else { selected = new FastArrayList <GeoCell>(); selectionBox.getAllCellsInside(cell, cells, selected); if (!selected.isEmpty()) { setStateOf(cells, SelectionState.HIGHLIGHTED); } } } else { selected = new FastArrayList <GeoCell>(8); selected.addLastUnsafe(cell); setStateOf(cells, SelectionState.HIGHLIGHTED); } // if (!selected.isEmpty()) { setStateOf(selected, SelectionState.SELECTED); entry.setKey(block); entry.setValue(selected); entry.addBefore(getTail()); } } } else { unselectAll(); // if (fullBlock) { if (selectionBox.isInfHeight()) { selected = new FastArrayList <GeoCell>(cells); } else { selected = new FastArrayList <GeoCell>(); selectionBox.getAllCellsInside(cell, cells, selected); } } else { selected = new FastArrayList <GeoCell>(8); selected.addLastUnsafe(cell); setStateOf(cells, SelectionState.HIGHLIGHTED); } // if (!selected.isEmpty()) { setStateOf(selected, SelectionState.SELECTED); entry.setKey(block); entry.setValue(selected); entry.addBefore(getTail()); } } }
private void selectGeoCellComplex(GeoCell cell, bool fullBlock, bool append) { GeoBlock block = cell.getBlock(); GeoBlockEntry entry = getEntry(block); GeoCell[] cells = block.getCells(); FastArrayList <GeoCell> selected = entry.getValue(); // if (append) { if (selected != null) { if (selected.size() == cells.Length) { if (fullBlock) { setStateOf(cells, SelectionState.NORMAL); entry.remove(); } else { if (selected.remove(cell)) { cell.setSelectionState(SelectionState.HIGHLIGHTED); } } } else { if (fullBlock) { selected.clear(); selected.addAll(cells); setStateOf(cells, SelectionState.SELECTED); } else { if (selected.remove(cell)) { if (selected.isEmpty()) { setStateOf(cells, SelectionState.NORMAL); entry.remove(); } else { cell.setSelectionState(SelectionState.HIGHLIGHTED); } } else { selected.addLast(cell); cell.setSelectionState(SelectionState.SELECTED); } } } } else { if (fullBlock) { selected = new FastArrayList <GeoCell>(cells); } else { selected = new FastArrayList <GeoCell>(8); selected.addLastUnsafe(cell); setStateOf(cells, SelectionState.HIGHLIGHTED); } // setStateOf(selected, SelectionState.SELECTED); entry.setKey(block); entry.setValue(selected); entry.addBefore(getTail()); } } else { unselectAll(); // if (fullBlock) { selected = new FastArrayList <GeoCell>(cells); } else { selected = new FastArrayList <GeoCell>(8); selected.addLastUnsafe(cell); setStateOf(cells, SelectionState.HIGHLIGHTED); } // setStateOf(selected, SelectionState.SELECTED); entry.setKey(block); entry.setValue(selected); entry.addBefore(getTail()); } }
public void unload() { _block = null; }
public GeoCell(GeoBlock block) { _block = block; _selectionState = SelectionState.NORMAL; }