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); }
private void ClearSelectedModelsAndUpdateUIState() { var context = new SelectionChangeContext(); this.ClearSelectedModels(context, false); this.UpdateShapeUIState(context.RemovedItems, context.AddedItems); }
/// <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); }
private void NotifySelectionChanged(SelectionChangeContext context) { if (context.AddedItems == null && context.RemovedItems == null) { // no actual change return; } this.OnSelectionChanged(context.RemovedItems, context.AddedItems); }
private void DeselectShape(SelectionChangeContext context) { this.selectedModels.Remove(context.Model); if (context.RemovedItems == null) { context.RemovedItems = new List <object>(); } context.RemovedItems.Add(context.Model); }
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); }
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); } }
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); } }
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); } }