[NUI][EXaml] Support DP and PX in EXaml
authorFang Xiaohui <xiaohui.fang@samsung.com>
Wed, 29 Sep 2021 05:12:59 +0000 (13:12 +0800)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Tue, 9 Nov 2021 05:57:53 +0000 (14:57 +0900)
src/Tizen.NUI/src/internal/EXaml/Action/RootAction.cs
src/Tizen.NUI/src/internal/EXaml/Operation/CreateDPObject.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/EXaml/Operation/GatherAssembly.cs
src/Tizen.NUI/src/internal/EXaml/Operation/GatherMethod.cs
src/Tizen.NUI/src/internal/EXaml/Operation/SetProperty.cs
src/Tizen.NUI/src/internal/EXaml/Utility/EXamlOperationType.cs

index 32192f3..f177359 100755 (executable)
@@ -126,6 +126,12 @@ namespace Tizen.NUI.EXaml
                 globalDataList.Operations.Add(operation);
             };
 
+            createOperations[(int)EXamlOperationType.CreateDPObject] = (GlobalDataList globalDataList, List<object> opInfo) =>
+            {
+                var operation = new CreateDPObject(globalDataList, opInfo);
+                globalDataList.Operations.Add(operation);
+            };
+
             createOperations[(int)EXamlOperationType.CreateArrayObject] = (GlobalDataList globalDataList, List<object> opInfo) =>
             {
                 var operation = new CreateArrayObject(globalDataList, opInfo);
diff --git a/src/Tizen.NUI/src/internal/EXaml/Operation/CreateDPObject.cs b/src/Tizen.NUI/src/internal/EXaml/Operation/CreateDPObject.cs
new file mode 100755 (executable)
index 0000000..3a08193
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * 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 System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Text;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Binding;
+using Tizen.NUI.Binding.Internals;
+using Tizen.NUI.Xaml;
+
+namespace Tizen.NUI.EXaml
+{
+    internal class CreateDPObject : Operation
+    {
+        public CreateDPObject(GlobalDataList globalDataList, List<object> operationInfos)
+        {
+            this.valueStr = operationInfos[0] as string;
+            this.typeIndex = (int)operationInfos[1];
+            this.globalDataList = globalDataList;
+        }
+
+        private GlobalDataList globalDataList;
+
+        public void Do()
+        {
+            if (0 > typeIndex)
+            {
+                object dpValue = null;
+
+                switch (typeIndex)
+                {
+                    case -3:
+                        dpValue = Convert.ToInt16(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+                        break;
+
+                    case -4:
+                        dpValue = Convert.ToInt32(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+                        break;
+
+                    case -5:
+                        dpValue = Convert.ToInt64(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+                        break;
+
+                    case -7:
+                        dpValue = Convert.ToUInt16(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+                        break;
+
+                    case -8:
+                        dpValue = Convert.ToUInt32(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+                        break;
+
+                    case -9:
+                        dpValue = Convert.ToInt64(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+                        break;
+
+                    case -15:
+                        dpValue = Convert.ToSingle(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+                        break;
+
+                    case -16:
+                        dpValue = Convert.ToDouble(GraphicsTypeManager.Instance.ConvertScriptToPixel(valueStr));
+                        break;
+                }
+
+                if (null == dpValue)
+                {
+                    throw new Exception($"Can't convert {valueStr} to DP value of typeIndex {typeIndex}");
+                }
+
+                globalDataList.GatheredInstances.Add(dpValue);
+            }
+            else
+            {
+                var type = globalDataList.GatheredTypes[typeIndex];
+                throw new Exception($"Can't convert DP value of type {type.FullName}");
+            }
+        }
+
+        private int typeIndex;
+        private string valueStr;
+    }
+}
index bdf9a46..fdd5a22 100755 (executable)
@@ -47,6 +47,11 @@ namespace Tizen.NUI.EXaml
                     break;
                 }
             }
+
+            if (null == assembly)
+            {
+                throw new Exception($"Can't find assembly {assemblyName}");
+            }
         }
 
         private string assemblyName;
index 418f2ef..22eb60f 100755 (executable)
@@ -82,6 +82,11 @@ namespace Tizen.NUI.EXaml
 
             var type = globalDataList.GatheredTypes[typeIndex];
             var method = type.GetRuntimeMethods().FirstOrDefault(isMatch);
+
+            if (null == method)
+            {
+                throw new Exception($"Can't get method {methodName} with {paramTypeList.Count} params");
+            }
             globalDataList.GatheredMethods.Add(method);
         }
 
index d741073..cf020ff 100755 (executable)
@@ -49,7 +49,7 @@ namespace Tizen.NUI.EXaml
 
             if (null == property)
             {
-                throw new Exception(String.Format("Can't find property in type {0}", instance.GetType().FullName));
+                throw new Exception(String.Format("Can't find property {0} in type {1}", property.Name, instance.GetType().FullName));
             }
 
             if (null == property.SetMethod)
index 0165666..20b21b6 100755 (executable)
@@ -30,6 +30,7 @@ namespace Tizen.NUI.EXaml
         GatherBindableProperty,
         CreateObject,
         CreateArrayObject,
+        CreateDPObject,
         CreateDataTemplate,
         GetStaticObject,
         GetTypeObject,