|
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Runtime.InteropServices;
using Microsoft.Maui.Devices.Sensors;
using Microsoft.Maui.Graphics;
using Microsoft.Maui.Maps;
namespace Microsoft.Maui.Controls.Maps
{
public partial class Polyline : IGeoPathMapElement
{
/// <summary>
/// Gets or sets the location object at the specified index.
/// </summary>
/// <param name="index">The index of the location object to return or set.</param>
/// <returns>The location object at the specified index.</returns>
public Location this[int index]
{
get { return Geopath[index]; }
set
{
RemoveAt(index);
Insert(index, value);
}
}
/// <summary>
/// Gets the location object count in this polyline.
/// </summary>
public int Count => Geopath.Count;
/// <summary>
/// Gets whether this polyline is read-only.
/// </summary>
/// <remarks>Always returns <see langword="false"/>.</remarks>
public bool IsReadOnly => false;
/// <summary>
/// Adds a location to this polyline.
/// </summary>
/// <param name="item">The location to add.</param>
public void Add(Location item)
{
var index = Geopath.Count;
Geopath.Add(item);
NotifyHandler(nameof(Add), index, item);
}
/// <summary>
/// Clears all locations that make up this polyline.
/// </summary>
public void Clear()
{
for (int i = Geopath.Count - 1; i >= 0; i--)
{
RemoveAt(i);
}
}
/// <summary>
/// Returns whether the specified location is contained in this polyline.
/// </summary>
/// <param name="item">The location object of which to determine if it is contained in the location collection of this polyline.</param>
/// <returns><see langword="true"/> if <paramref name="item"/> is contained in the location collection of this polyline, otherwise <see langword="false"/>.</returns>
public bool Contains(Location item)
{
return Geopath.Contains(item);
}
/// <summary>
/// Copies the child locations to the specified array.
/// </summary>
/// <param name="array">The target array to copy the child views to.</param>
/// <param name="arrayIndex">The index at which the copying needs to start.</param>
public void CopyTo(Location[] array, int arrayIndex)
{
Geopath.CopyTo(array, arrayIndex);
}
/// <summary>
/// Returns an enumerator that lists all of the location object in this polyline.
/// </summary>
/// <returns>A <see cref="IEnumerator{T}"/> of type <see cref="Location"/> with all the locations in this polyline.</returns>
public IEnumerator<Location> GetEnumerator()
{
return Geopath.GetEnumerator();
}
/// <summary>
/// Gets the index of a specified location object.
/// </summary>
/// <param name="item">The location object of which to determine the index.</param>
/// <returns>The index of the specified location, if the location was not found this will return <c>-1</c>.</returns>
public int IndexOf(Location item)
{
return Geopath.IndexOf(item);
}
/// <summary>
/// Inserts a location object at the specified index.
/// </summary>
/// <param name="index">The index at which to specify the location object.</param>
/// <param name="item">The location object to insert.</param>
public void Insert(int index, Location item)
{
Geopath.Insert(index, item);
NotifyHandler(nameof(Insert), index, item);
}
/// <summary>
/// Removes a location object from this polyline.
/// </summary>
/// <param name="item">The location object to remove.</param>
/// <returns><see langword="true"/> if the location was removed successfully, otherwise <see langword="false"/>.</returns>
public bool Remove(Location item)
{
var index = Geopath.IndexOf(item);
var result = Geopath.Remove(item);
NotifyHandler(nameof(Remove), index, item);
return result;
}
/// <summary>
/// Removes a location object at the specified index.
/// </summary>
/// <param name="index">The index at which to remove the location.</param>
public void RemoveAt(int index)
{
var item = Geopath[index];
Geopath.RemoveAt(index);
NotifyHandler(nameof(Remove), index, item);
}
IEnumerator IEnumerable.GetEnumerator()
{
return Geopath.GetEnumerator();
}
void NotifyHandler(string action, int index, Location item)
{
Handler?.UpdateValue(nameof(Geopath));
}
}
}
|