using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
#pragma warning disable 1591
namespace OSGeo.MapGuide.Viewer
{
///
/// Defines a method for handling viewer selections
///
///
public delegate void MgLayerSelectionEventHandler(MgSelectionSet selectedFeatures);
[DefaultEvent("SelectionMade")] //NOXLATE
[ToolboxItem(true)]
public class MgLayerSelectionHandler : Component
{
[Category("MapGuide Viewer")] //NOXLATE
[Description("The map layers that this component will listen for selections")] //NOXLATE
public string[] Layers { get; set; }
private IMapViewer _viewer;
[Category("MapGuide Viewer")] //NOXLATE
[Description("The map viewer instance")] //NOXLATE
public IMapViewer Viewer
{
get { return _viewer; }
set
{
if (_viewer != null)
_viewer.SelectionChanged -= OnViewerSelectionChanged;
_viewer = value;
if (_viewer != null)
_viewer.SelectionChanged += OnViewerSelectionChanged;
}
}
void OnViewerSelectionChanged(object sender, EventArgs e)
{
if (this.Layers == null || this.Layers.Length == 0)
return;
var sel = _viewer.GetSelection();
var selLayers = sel.GetLayers();
if (selLayers != null)
{
var selectionSet = new MgSelectionSet(sel, _viewer.GetProvider());
var layers = new Dictionary();
for (int i = 0; i < selLayers.Count; i++)
{
var layerItem = selLayers.GetItem(i);
layers.Add(layerItem.Name, layerItem);
}
foreach (var layerName in this.Layers)
{
if (layers.ContainsKey(layerName))
{
var h = this.SelectionMade;
if (h != null)
{
h(selectionSet);
}
}
}
}
}
[Category("MapGuide Viewer")] //NOXLATE
[Description("Raised when a selection on any of the specified layers has been made")] //NOXLATE
public event MgLayerSelectionEventHandler SelectionMade;
}
}