Merge remote-tracking branch 'nsd/tizen'
[platform/core/csapi/tizenfx.git] / src / Tizen.Maps / Tizen.Maps / Overlay.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 using System;
18 using EvasObject = ElmSharp.EvasObject;
19
20 namespace Tizen.Maps
21 {
22     /// <summary>
23     /// Overlay map object
24     /// </summary>
25     /// <since_tizen>3</since_tizen>
26     public class Overlay : MapObject, IDisposable
27     {
28         internal Interop.OverlayHandle handle;
29
30         /// <summary>
31         /// Creates a normal overlay map object.
32         /// </summary>
33         /// <since_tizen>3</since_tizen>
34         /// <param name="coordinates"></param>
35         /// <param name="objectToContain"></param>
36         /// <exception cref="ArgumentException">Thrown when input coordinates or objectToContain are invalid</exception>
37         public Overlay(Geocoordinates coordinates, EvasObject objectToContain)
38             : this(coordinates, objectToContain, Interop.ViewOverlayType.Normal)
39         {
40         }
41
42         internal Overlay(Geocoordinates coordinates, EvasObject objectToContain, Interop.ViewOverlayType type)
43         {
44             var err = Interop.ErrorCode.InvalidParameter;
45             if (coordinates == null || objectToContain == null)
46             {
47                 err.ThrowIfFailed("given coordinates or parent evas object is null");
48             }
49             handle = new Interop.OverlayHandle(coordinates.handle, objectToContain, type);
50         }
51
52         /// <summary>
53         /// Gets or sets visibility of overlay map object.
54         /// </summary>
55         /// <since_tizen>3</since_tizen>
56         public override bool IsVisible
57         {
58             get { return handle.IsVisible; }
59             set { handle.IsVisible = value; }
60         }
61
62         /// <summary>
63         /// Gets or sets geographical coordinates for overlay map object.
64         /// </summary>
65         /// <since_tizen>3</since_tizen>
66         public Geocoordinates Coordinates
67         {
68             get
69             {
70                 return new Geocoordinates(handle.Coordinates);
71             }
72             set
73             {
74                 // Overlay takes ownership of the native handle.
75                 handle.Coordinates = value.handle;
76                 value.handle.HasOwnership = false;
77             }
78         }
79
80         /// <summary>
81         /// Gets or sets minimum zoom level for overlay map object.
82         /// </summary>
83         /// <since_tizen>3</since_tizen>
84         public int MinimumZoomLevel
85         {
86             get
87             {
88                 return handle.MinZoomLevel;
89             }
90             set
91             {
92                 handle.MinZoomLevel = value;
93             }
94         }
95
96         /// <summary>
97         /// Gets or sets maximum zoom lever for overlay map object.
98         /// </summary>
99         /// <since_tizen>3</since_tizen>
100         public int MaximumZoomLevel
101         {
102             get
103             {
104                 return handle.MaxZoomLevel;
105             }
106             set
107             {
108                 handle.MaxZoomLevel = value;
109             }
110         }
111
112         // Overlay object does not support click events
113         internal override void HandleClickedEvent()
114         {
115             throw new NotSupportedException("Overlay object does not support click events");
116         }
117
118         internal override void InvalidateMapObject()
119         {
120             handle = null;
121         }
122
123         internal override Interop.ViewObjectHandle GetHandle()
124         {
125             return handle;
126         }
127
128         #region IDisposable Support
129         private bool _disposedValue = false;
130
131         protected virtual void Dispose(bool disposing)
132         {
133             if (!_disposedValue)
134             {
135                 handle.Dispose();
136                 _disposedValue = true;
137             }
138         }
139
140         /// <summary>
141         /// Releases all resources used by this object.
142         /// </summary>
143         /// <since_tizen>3</since_tizen>
144         public void Dispose()
145         {
146             Dispose(true);
147             GC.SuppressFinalize(this);
148         }
149         #endregion
150     }
151
152     /// <summary>
153     /// Bubble overlay map object
154     /// </summary>
155     /// <since_tizen>3</since_tizen>
156     public class BubbleOverlay : Overlay
157     {
158         /// <summary>
159         /// Creates a Bubble overlay.
160         /// </summary>
161         /// <since_tizen>3</since_tizen>
162         /// <param name="coordinates">The geographical coordinates to be pointed</param>
163         /// <param name="objectToContain">The EvasObject to be shown</param>
164         /// <exception cref="System.NotSupportedException">Thrown when the required feature is not supported.</exception>
165         /// <exception cref="ArgumentException">Thrown when input coordinates or objectToContain are invalid</exception>
166         public BubbleOverlay(Geocoordinates coordinates, EvasObject objectToContain)
167             : base(coordinates, objectToContain, Interop.ViewOverlayType.Bubble)
168         {
169         }
170     }
171
172     /// <summary>
173     /// Box Overlay map object
174     /// </summary>
175     /// <since_tizen>3</since_tizen>
176     public class BoxOverlay : Overlay
177     {
178         /// <summary>
179         /// Creates a Box overlay.
180         /// </summary>
181         /// <since_tizen>3</since_tizen>
182         /// <param name="coordinates">The geographical coordinates to be pointed</param>
183         /// <param name="objectToContain">The EvasObject to be shown</param>
184         /// <exception cref="System.NotSupportedException">Thrown when the required feature is not supported.</exception>
185         /// <exception cref="ArgumentException">Thrown when input coordinates or objectToContain are invalid</exception>
186         public BoxOverlay(Geocoordinates coordinates, EvasObject objectToContain)
187             : base(coordinates, objectToContain, Interop.ViewOverlayType.Box)
188         {
189         }
190     }
191 }