コード例 #1
0
        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());
                }
            }
        }
コード例 #2
0
 public GLDisplay()
 {
     _selectionBox = new GLSelectionBox();
 }