Setting since_tizen 3/4 on Tizen.NET API
[platform/core/csapi/tizenfx.git] / src / Tizen.Maps / Tizen.Maps / Overlay.cs
index 1540e0c..d1551c3 100755 (executable)
@@ -19,108 +19,177 @@ using EvasObject = ElmSharp.EvasObject;
 
 namespace Tizen.Maps
 {
-    public class Overlay : MapObject
+    /// <summary>
+    /// Overlay map object.
+    /// </summary>
+    /// <since_tizen> 3 </since_tizen>
+    public class Overlay : MapObject, IDisposable
     {
-        private EvasObject _containedObject;
-
-        public Overlay(Geocoordinates coordinates, EvasObject objectToContain) : this(coordinates, objectToContain, Interop.ViewOverlayType.Normal)
+        internal Interop.OverlayHandle handle;
+
+        /// <summary>
+        /// Creates a normal overlay map object.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <param name="coordinates"></param>
+        /// <param name="objectToContain"></param>
+        /// <exception cref="ArgumentException">Thrown when the input coordinates or objectToContain are invalid.</exception>
+        public Overlay(Geocoordinates coordinates, EvasObject objectToContain)
+            : this(coordinates, objectToContain, Interop.ViewOverlayType.Normal)
         {
         }
 
-        internal Overlay(Interop.ViewObjectHandle nativeHandle) : base(nativeHandle)
-        {
-        }
-
-        internal Overlay(Geocoordinates coordinates, EvasObject objectToContain, Interop.ViewOverlayType type) : base(CreateNativeHandle(coordinates, objectToContain, type))
+        internal Overlay(Geocoordinates coordinates, EvasObject objectToContain, Interop.ViewOverlayType type)
         {
             var err = Interop.ErrorCode.InvalidParameter;
             if (coordinates == null || objectToContain == null)
             {
                 err.ThrowIfFailed("given coordinates or parent evas object is null");
             }
+            handle = new Interop.OverlayHandle(coordinates.handle, objectToContain, type);
+        }
 
-            _containedObject = objectToContain;
+        /// <summary>
+        /// Gets or sets the visibility of an overlay map object.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        public override bool IsVisible
+        {
+            get { return handle.IsVisible; }
+            set { handle.IsVisible = value; }
         }
 
+        /// <summary>
+        /// Gets or sets geographical coordinates for an overlay map object.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
         public Geocoordinates Coordinates
         {
             get
             {
-                IntPtr nativeHandle;
-                Interop.ViewObject.OverlayGetCoordinates(handle, out nativeHandle);
-                return new Geocoordinates(nativeHandle);
+                return new Geocoordinates(handle.Coordinates);
             }
             set
             {
                 // Overlay takes ownership of the native handle.
-                IntPtr nativeHandle;
-                var err = Interop.Coordinates.Clone(value.handle, out nativeHandle);
-                err.WarnIfFailed("Failed to clone native handle for coordinates");
-
-                Interop.CoordinatesHandle clonedHandle = new Interop.CoordinatesHandle(nativeHandle);
-                err = Interop.ViewObject.OverlaySetCoordinates(handle, clonedHandle);
-                if (err.WarnIfFailed("Failed to set coordinates to overlay"))
-                {
-                    clonedHandle.ReleaseOwnership();
-                }
+                handle.Coordinates = value.handle;
+                value.handle.HasOwnership = false;
             }
         }
 
+        /// <summary>
+        /// Gets or sets minimum zoom level for an overlay map object.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
         public int MinimumZoomLevel
         {
             get
             {
-                int value;
-                Interop.ViewObject.OverlayGetMinZoomLevel(handle, out value);
-                return value;
+                return handle.MinZoomLevel;
             }
             set
             {
-                Interop.ViewObject.OverlaySetMinZoomLevel(handle, value);
+                handle.MinZoomLevel = value;
             }
         }
 
+        /// <summary>
+        /// Gets or sets maximum zoom lever for an overlay map object.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
         public int MaximumZoomLevel
         {
             get
             {
-                int value;
-                Interop.ViewObject.OverlayGetMaxZoomLevel(handle, out value);
-                return value;
+                return handle.MaxZoomLevel;
             }
             set
             {
-                Interop.ViewObject.OverlaySetMaxZoomLevel(handle, value);
+                handle.MaxZoomLevel = value;
             }
         }
 
-        private static Interop.ViewObjectHandle CreateNativeHandle(Geocoordinates coordinates, EvasObject objectToContain, Interop.ViewOverlayType type)
+        // Overlay object does not support click events
+        internal override void HandleClickedEvent()
+        {
+            throw new NotSupportedException("Overlay object does not support click events");
+        }
+
+        internal override void InvalidateMapObject()
         {
-            if (coordinates == null || objectToContain == null) return new Interop.ViewObjectHandle(IntPtr.Zero);
+            handle = null;
+        }
 
-            IntPtr nativeHandle;
-            var err = Interop.Coordinates.Clone(coordinates.handle, out nativeHandle);
-            err.ThrowIfFailed("Failed to clone native handle for coordinates");
+        internal override Interop.ViewObjectHandle GetHandle()
+        {
+            return handle;
+        }
 
-            Interop.CoordinatesHandle clonedHandle = new Interop.CoordinatesHandle(nativeHandle);
-            err = Interop.ViewObject.CreateOverlay(clonedHandle, objectToContain, type, out nativeHandle);
-            err.ThrowIfFailed("Failed to create native handle for Overlay");
+        #region IDisposable Support
+        private bool _disposedValue = false;
 
-            clonedHandle.ReleaseOwnership();
-            return new Interop.ViewObjectHandle(nativeHandle);
+        /// <summary>
+        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+        /// </summary>
+        /// <param name="disposing">If true, managed and unmanaged resources can be disposed, otherwise only unmanaged resources can be disposed.</param>
+        /// <since_tizen> 3 </since_tizen>
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!_disposedValue)
+            {
+                handle.Dispose();
+                _disposedValue = true;
+            }
+        }
+
+        /// <summary>
+        /// Releases all the resources used by this object.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
         }
+        #endregion
     }
 
+    /// <summary>
+    /// The bubble overlay map object.
+    /// </summary>
+    /// <since_tizen> 3 </since_tizen>
     public class BubbleOverlay : Overlay
     {
-        public BubbleOverlay(Geocoordinates coordinates, EvasObject objectToContain) : base(coordinates, objectToContain, Interop.ViewOverlayType.Bubble)
+        /// <summary>
+        /// Creates a bubble overlay.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <param name="coordinates">The geographical coordinates to be pointed.</param>
+        /// <param name="objectToContain">The EvasObject to be shown.</param>
+        /// <exception cref="System.NotSupportedException">Thrown when the required feature is not supported.</exception>
+        /// <exception cref="ArgumentException">Thrown when the input coordinates or objectToContain are invalid.</exception>
+        public BubbleOverlay(Geocoordinates coordinates, EvasObject objectToContain)
+            : base(coordinates, objectToContain, Interop.ViewOverlayType.Bubble)
         {
         }
     }
 
+    /// <summary>
+    /// The box overlay map object.
+    /// </summary>
+    /// <since_tizen> 3 </since_tizen>
     public class BoxOverlay : Overlay
     {
-        public BoxOverlay(Geocoordinates coordinates, EvasObject objectToContain) : base(coordinates, objectToContain, Interop.ViewOverlayType.Box)
+        /// <summary>
+        /// Creates a box overlay.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <param name="coordinates">The geographical coordinates to be pointed.</param>
+        /// <param name="objectToContain">The EvasObject to be shown.</param>
+        /// <exception cref="System.NotSupportedException">Thrown when the required feature is not supported.</exception>
+        /// <exception cref="ArgumentException">Thrown when the input coordinates or objectToContain are invalid</exception>
+        public BoxOverlay(Geocoordinates coordinates, EvasObject objectToContain)
+            : base(coordinates, objectToContain, Interop.ViewOverlayType.Box)
         {
         }
     }