using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Xml;
using ESRI.ArcGIS.Client.Toolkit.DataSources;
using OpenEarth.DataViewer.Helpers;
namespace OpenEarth.DataViewer.Windows
{
///
/// Interaction logic for LayerListBox.xaml
///
public partial class KmlLayerListBox : UserControl
{
private readonly List mapLayers;
public KmlLayerListBox()
{
InitializeComponent();
mapLayers = new List();
if (CreateDataSet())
{
LinkDataSet();
}
}
public static DependencyProperty MessageProperty = DependencyProperty.Register("ItemsSource", typeof(Array), typeof(KmlLayerListBox));
private bool CreateDataSet()
{
var doc = new XmlDocument();
try
{
doc.Load("KMLLayers.xml");
var elements = doc.SelectNodes("//layers/layer");
if (elements != null)
{
foreach (XmlElement element in elements)
{
var mapLayer = new LayerWrapper
{
Layer = new KmlLayer
{
Opacity = 0.5,
Visible = true
}
};
foreach (XmlNode child in element.ChildNodes)
{
if (child.Name.ToLower() == "name")
{
mapLayer.Name = child.ChildNodes[0].Value;
}
if (child.Name.ToLower() == "id")
{
mapLayer.Layer.ID = child.ChildNodes[0].Value;
}
if (child.Name.ToLower() == "url")
{
((KmlLayer)mapLayer.Layer).Url = new Uri(child.ChildNodes[0].Value);
}
if (child.Name.ToLower() == "source")
{
mapLayer.Source = child.ChildNodes[0].Value;
}
if (child.Name.ToLower() == "var")
{
mapLayer.Variable = child.ChildNodes[0].Value;
}
}
mapLayers.Add(mapLayer);
}
}
return true;
}
catch (Exception ex)
{
textBoxError.Visibility = Visibility.Visible;
textBoxError.Text = ex.Message;
return false;
}
}
private void LinkDataSet()
{
SetValue(MessageProperty, mapLayers.Select(layer => layer.Name).ToList().ToArray());
}
private void ListBoxSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selection = ((ListBox)sender).SelectedItems[0];
if (selection != null)
{
LayerWrapper wrapper = null;
foreach (var layer in mapLayers.Where(layer => layer.Name == (string)selection))
{
wrapper = layer;
}
InvokeOverlayChanged(wrapper);
}
}
public event OverlayChange OverlayChanged;
public delegate void OverlayChange(LayerWrapper wrapper);
public void InvokeOverlayChanged(LayerWrapper wrapper)
{
var handler = OverlayChanged;
if (handler != null)
{
handler(wrapper);
}
}
}
}