[ElmSharp] Merge bug fix commit from master to API4 (#224)
authorSeungkeun Lee <sngn.lee@samsung.com>
Thu, 19 Apr 2018 23:10:02 +0000 (08:10 +0900)
committerGitHub <noreply@github.com>
Thu, 19 Apr 2018 23:10:02 +0000 (08:10 +0900)
* [ElmSharp] Fix TrackObject issue (#162)

* [ElmSharp] Modified to call Deleted event when EvasObject Unrealized (#170)

* Modified to call Deleted event when EvasObject unrealized

* Update EvasObject.cs

* [ElmSharp] Added remark for Popup and Layout (#209)

src/ElmSharp/ElmSharp/EvasObject.cs
src/ElmSharp/ElmSharp/ItemObject.cs
src/ElmSharp/ElmSharp/Layout.cs
src/ElmSharp/ElmSharp/Popup.cs
src/ElmSharp/Interop/Interop.Elementary.Item.cs
test/ElmSharp.Test/TC/ItemEvasObjectTest.cs [new file with mode: 0644]

index 7769a9a..f3ceb30 100644 (file)
@@ -1099,6 +1099,7 @@ namespace ElmSharp
                 (Parent as Window)?.RemoveChild(this);
 
                 Interop.Evas.evas_object_del(toBeDeleted);
+                Deleted?.Invoke(this, EventArgs.Empty);
                 Parent = null;
             }
         }
@@ -1139,4 +1140,4 @@ namespace ElmSharp
             _eventStore.Add(item);
         }
     }
-}
\ No newline at end of file
+}
index 6a6342c..ea16c8d 100644 (file)
@@ -81,8 +81,10 @@ namespace ElmSharp
         {
             get
             {
-                if (_trackObject == null)
+                if (_trackObject == null || Interop.Elementary.elm_object_item_track_get(Handle) == 0)
+                {
                     _trackObject = new ItemEvasObject(Handle);
+                }
                 return _trackObject;
             }
         }
@@ -392,7 +394,7 @@ namespace ElmSharp
 
         class ItemEvasObject : EvasObject
         {
-            IntPtr _parent = IntPtr.Zero;
+            IntPtr _trackHandle = IntPtr.Zero;
 
             /// <summary>
             /// Creates and initializes a new instance of the ItemEvasObject class.
@@ -400,8 +402,11 @@ namespace ElmSharp
             /// <param name="parent">IntPtr</param>
             public ItemEvasObject(IntPtr parent) : base()
             {
-                _parent = parent;
-                Realize(null);
+                _trackHandle = Interop.Elementary.elm_object_item_track(parent);
+                if (_trackHandle != IntPtr.Zero)
+                {
+                    Realize(null);
+                }
             }
 
             /// <summary>
@@ -411,7 +416,7 @@ namespace ElmSharp
             /// <returns>Handle IntPtr.</returns>
             protected override IntPtr CreateHandle(EvasObject parent)
             {
-                return Interop.Elementary.elm_object_item_track(_parent);
+                return _trackHandle;
             }
         }
     }
index b2c6f8e..7b129ab 100644 (file)
@@ -179,6 +179,9 @@ namespace ElmSharp
         /// Once the object is appended, it will become a child of the layout.
         /// Its lifetime will be bound to the layout. Whenever the layout dies, the child will be deleted automatically.
         /// </summary>
+        /// <remarks>
+        /// This will only work if the layout edc have box part.
+        /// </remarks>
         /// <param name="part">The part.</param>
         /// <param name="child">The object to append.</param>
         /// <returns>Success is true.</returns>
@@ -194,6 +197,9 @@ namespace ElmSharp
         /// Once the object is prepended, it will become a child of the layout.
         /// Its lifetime will be bound to the layout. Whenever the layout dies, the child will be deleted automatically.
         /// </summary>
+        /// <remarks>
+        /// This will only work if the layout edc have box part.
+        /// </remarks>
         /// <param name="part">The part.</param>
         /// <param name="child">The object to prepend.</param>
         /// <returns>Success is true.</returns>
@@ -208,6 +214,9 @@ namespace ElmSharp
         /// Removes a child from the given part box.
         /// The object will be removed from the box part and its lifetime will not be handled by the layout anymore.
         /// </summary>
+        /// <remarks>
+        /// This will only work if the layout edc have box part.
+        /// </remarks>
         /// <param name="part">The part.</param>
         /// <param name="child">The object to remove.</param>
         /// <returns>Success if true</returns>
@@ -215,13 +224,16 @@ namespace ElmSharp
         public bool BoxRemove(string part, EvasObject child)
         {
             RemoveChild(child);
-            return Interop.Elementary.elm_layout_box_remove(RealHandle, part, child.Handle) != null;
+            return Interop.Elementary.elm_layout_box_remove(RealHandle, part, child.Handle) != IntPtr.Zero;
         }
 
         /// <summary>
         /// Removes all the children from the given part box.
         /// The objects will be removed from the box part and their lifetime will not be handled by the layout anymore.
         /// </summary>
+        /// <remarks>
+        /// This will only work if the layout edc have box part.
+        /// </remarks>
         /// <param name="part">The part.</param>
         /// <param name="clear">If true, then all the objects will be deleted as well, otherwise they will just be removed and will be dangling on the canvas.</param>
         /// <returns>Success if true.</returns>
@@ -237,6 +249,9 @@ namespace ElmSharp
         /// Once the object is inserted, it will become a child of the layout.
         /// Its lifetime will be bound to the layout. Whenever the layout dies, the child will be deleted automatically.
         /// </summary>
+        /// <remarks>
+        /// This will only work if the layout edc have box part.
+        /// </remarks>
         /// <param name="part">The part.</param>
         /// <param name="child">The child object to insert into the box.</param>
         /// <param name="position">The numeric position >=0 to insert the child.</param>
@@ -253,6 +268,9 @@ namespace ElmSharp
         /// Once the object is inserted, it will become child of the layout.
         /// Its lifetime will be bound to the layout. Whenever the layout dies, the child will be deleted automatically.
         /// </summary>
+        /// <remarks>
+        /// This will only work if the layout edc have box part.
+        /// </remarks>
         /// <param name="part">The part.</param>
         /// <param name="child">The child object to insert into the box.</param>
         /// <param name="reference">Another reference object to insert before the box.</param>
@@ -393,4 +411,4 @@ namespace ElmSharp
             return Interop.Elementary.elm_layout_add(parent.Handle);
         }
     }
-}
\ No newline at end of file
+}
index 5372526..0defeed 100755 (executable)
@@ -151,6 +151,9 @@ namespace ElmSharp
         /// <summary>
         /// Sets or gets the wrapping type of content text packed in the content area of Popup widget.
         /// </summary>
+        /// <remarks>
+        /// Popup need to wrap the content text, so not allowing WrapType.None.
+        /// </remarks>
         /// <since_tizen> preview </since_tizen>
         public WrapType ContentTextWrapType
         {
@@ -311,4 +314,4 @@ namespace ElmSharp
             _children.Remove((PopupItem)sender);
         }
     }
-}
\ No newline at end of file
+}
index c0e4f3f..88ae655 100644 (file)
@@ -85,6 +85,9 @@ internal static partial class Interop
         internal static extern IntPtr elm_object_item_track(IntPtr obj);
 
         [DllImport(Libraries.Elementary)]
+        internal static extern int elm_object_item_track_get(IntPtr obj);
+
+        [DllImport(Libraries.Elementary)]
         internal static extern void elm_object_item_untrack(IntPtr obj);
 
         [DllImport(Libraries.Elementary)]
diff --git a/test/ElmSharp.Test/TC/ItemEvasObjectTest.cs b/test/ElmSharp.Test/TC/ItemEvasObjectTest.cs
new file mode 100644 (file)
index 0000000..e485ddc
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using ElmSharp;
+
+namespace ElmSharp.Test
+{
+    class ItemEvasObjectTest : TestCaseBase
+    {
+        public override string TestName => "ItemEvasObjectTest";
+        public override string TestDescription => "To test basic operation of ItemEvasObject";
+
+        public override void Run(Window window)
+        {
+            Conformant conformant = new Conformant(window);
+            conformant.Show();
+
+            Box box = new Box(window)
+            {
+                AlignmentX = -1,
+                AlignmentY = -1,
+                WeightX = 1,
+                WeightY = 1
+            };
+            conformant.SetContent(box);
+            box.Show();
+
+            Label label = new Label(window)
+            {
+                AlignmentX = -1,
+                WeightX = 1,
+                BackgroundColor = Color.White,
+                Text = "Selected"
+            };
+
+            GenList list = new GenList(window)
+            {
+                Homogeneous = true,
+                AlignmentX = -1,
+                AlignmentY = -1,
+                WeightX = 1,
+                WeightY = 1
+            };
+
+            GenItemClass defaultClass = new GenItemClass("default")
+            {
+                GetTextHandler = (obj, part) =>
+                {
+                    return string.Format("{0} - {1}", (string)obj, part);
+                }
+            };
+
+            for (int i = 0; i < 100; i++)
+            {
+                list.Append(defaultClass, string.Format("{0} Item", i));
+            }
+            list.SelectionMode = GenItemSelectionMode.Always;
+            list.ItemSelected += (s, e) =>
+            {
+                Log.Debug((string)(e.Item.Data) + "item selected");
+                Log.Debug("Item Geometry: " + e.Item.TrackObject.Geometry.ToString());
+
+                label.Text = "selected Item Geometry: " + e.Item.TrackObject.Geometry.ToString();
+            };
+
+            label.Show();
+            list.Show();
+
+            box.PackEnd(label);
+            box.PackEnd(list);
+        }
+    }
+}