2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Collections.Generic;
21 using Color = ElmSharp.Color;
26 /// The polyline map object.
28 /// <since_tizen> 3 </since_tizen>
29 public class Polyline : MapObject, IDisposable
31 internal Interop.PolylineHandle handle;
32 private List<Geocoordinates> _coordinateList;
35 /// Creates polyline visual object.
37 /// <since_tizen> 3 </since_tizen>
38 /// <param name="coordinates">List of geographical coordinates.</param>
39 /// <param name="color">Line color.</param>
40 /// <param name="width">The width of line [1 ~ 100] (pixels).</param>
41 /// <exception cref="ArgumentException">Thrown when input values are invalid.</exception>
42 public Polyline(List<Geocoordinates> coordinates, Color color, int width) : base()
44 var err = Interop.ErrorCode.InvalidParameter;
45 if (coordinates == null || coordinates.Count() < 2)
47 err.ThrowIfFailed("given coordinates list should contain at least 2 coordinates");
49 _coordinateList = coordinates.ToList();
50 var geocoordinateList = new GeocoordinatesList(_coordinateList);
51 handle = new Interop.PolylineHandle(geocoordinateList.handle, color, width);
55 /// Adds or removes the clicked event handlers.
57 /// <since_tizen> 3 </since_tizen>
58 public event EventHandler Clicked;
61 /// Gets or sets the visibility for polyline.
63 /// <since_tizen> 3 </since_tizen>
64 public override bool IsVisible
66 get { return handle.IsVisible; }
67 set { handle.IsVisible = value; }
71 /// Gets or sets a list of geographical coordinates for polyline vertices.
73 /// <since_tizen> 3 </since_tizen>
74 public IEnumerable<Geocoordinates> Coordinates
78 return _coordinateList;
82 var coordinates = value.ToList();
83 var err = Interop.ErrorCode.InvalidParameter;
84 if (coordinates == null || coordinates.Count() < 2)
86 err.ThrowIfFailed("given coordinates list should contain at least 2 coordinates");
89 var geocoordinateList = new GeocoordinatesList(coordinates, false);
90 if (handle.SetPolyline(geocoordinateList.handle).IsSuccess())
92 _coordinateList = coordinates;
98 /// Gets or sets the line color.
100 /// <since_tizen> 3 </since_tizen>
101 public Color LineColor
105 return handle.LineColor;
109 handle.LineColor = value;
114 /// Gets or sets the line width from 1 to 100 pixels.
116 /// <since_tizen> 3 </since_tizen>
121 return handle.LineWidth;
125 handle.LineWidth = value;
129 internal override void HandleClickedEvent()
131 Clicked?.Invoke(this, EventArgs.Empty);
134 internal override void InvalidateMapObject()
139 internal override Interop.ViewObjectHandle GetHandle()
144 #region IDisposable Support
145 private bool _disposedValue = false;
147 protected virtual void Dispose(bool disposing)
153 _coordinateList.Clear();
156 _disposedValue = true;
161 /// Releases all the resources used by this object.
163 /// <since_tizen> 3 </since_tizen>
164 public void Dispose()
167 GC.SuppressFinalize(this);