Esempio n. 1
0
        private void PerformSelection(D2DShape shape)
        {
            MapShapeModel model = shape.Model as MapShapeModel;

            if (model == null)
            {
                Debug.Assert(false, "Must have a model associated with each UI shape");
                return;
            }

            var context = new SelectionChangeContext()
            {
                Layer = this.map.Layers.FindLayerById(shape.LayerId),
                Shape = shape,
                Model = model
            };

            if (this.selectionModeCache == MapShapeSelectionMode.Single)
            {
                this.SingleSelect(context, true);
            }
            else if (this.selectionModeCache == MapShapeSelectionMode.MultiSimple)
            {
                this.SingleSelect(context, false);
            }
            else if (this.selectionModeCache == MapShapeSelectionMode.MultiExtended)
            {
                this.MultiExtendedSelect(context);
            }

            this.NotifySelectionChanged(context);
        }
Esempio n. 2
0
        private void ClearSelectedModelsAndUpdateUIState()
        {
            var context = new SelectionChangeContext();

            this.ClearSelectedModels(context, false);
            this.UpdateShapeUIState(context.RemovedItems, context.AddedItems);
        }
Esempio n. 3
0
        /// <summary>
        /// Called when the respective <see cref="MapShapeLayer" /> is invalidated and its contents are cleared.
        /// </summary>
        /// <param name="layer">The shape layer.</param>
        protected internal override void OnShapeLayerCleared(MapShapeLayer layer)
        {
            if (layer == null)
            {
                return;
            }

            base.OnShapeLayerCleared(layer);

            var context = new SelectionChangeContext()
            {
                Layer = layer
            };

            for (int i = this.selectedModels.Count - 1; i >= 0; i--)
            {
                var shape = this.map == null ? null : this.map.FindShapeForModel(this.selectedModels[i]);
                if (shape == null || shape.LayerId != layer.Id)
                {
                    continue;
                }

                context.Shape = shape;
                context.Model = this.selectedModels[i];
                this.DeselectShape(context);
            }

            this.NotifySelectionChanged(context);
        }
Esempio n. 4
0
        private void NotifySelectionChanged(SelectionChangeContext context)
        {
            if (context.AddedItems == null && context.RemovedItems == null)
            {
                // no actual change
                return;
            }

            this.OnSelectionChanged(context.RemovedItems, context.AddedItems);
        }
Esempio n. 5
0
        private void DeselectShape(SelectionChangeContext context)
        {
            this.selectedModels.Remove(context.Model);

            if (context.RemovedItems == null)
            {
                context.RemovedItems = new List <object>();
            }
            context.RemovedItems.Add(context.Model);
        }
Esempio n. 6
0
        private void SelectModel(MapShapeModel model)
        {
            var context = new SelectionChangeContext()
            {
                Model = model
            };

            this.ClearSelectedModels(context, false);

            this.selectedModels.Add(context.Model);

            context.AddedItems = new List <object>();
            context.AddedItems.Add(context.Model);

            this.NotifySelectionChanged(context);
        }
Esempio n. 7
0
        private void SingleSelect(SelectionChangeContext context, bool clearSelection)
        {
            if (context.Shape.UIState == ShapeUIState.Selected)
            {
                this.DeselectShape(context);
            }
            else
            {
                if (clearSelection)
                {
                    this.ClearSelectedModels(context, false);
                }

                this.SelectShape(context);
            }
        }
Esempio n. 8
0
        private void MultiExtendedSelect(SelectionChangeContext context)
        {
            bool isControlDown          = this.IsControlModifierKeyDown;
            bool isContextShapeSelected = context.Shape.UIState == ShapeUIState.Selected;

            if (!isControlDown)
            {
                this.ClearSelectedModels(context, isContextShapeSelected);
            }

            if (!isContextShapeSelected)
            {
                this.SelectShape(context);
            }
            else if (isControlDown)
            {
                this.DeselectShape(context);
            }
        }
Esempio n. 9
0
        private void ClearSelectedModels(SelectionChangeContext context, bool skipContextShape)
        {
            if (this.selectedModels.Count == 0)
            {
                return;
            }

            List <object> removedItems = new List <object>();

            removedItems.AddRange(this.selectedModels);
            context.RemovedItems = removedItems;

            if (skipContextShape)
            {
                context.RemovedItems.Remove(context.Model);
            }

            this.selectedModels.Clear();

            if (skipContextShape)
            {
                this.selectedModels.Add(context.Model);
            }
        }