[NUI] Sync Xaml code to newest (#795)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / Xaml / XamlLoader.cs
index 502be8b..758a45f 100755 (executable)
 
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Diagnostics;
 using System.IO;
 using System.Reflection;
 using System.Text.RegularExpressions;
 using System.Xml;
+using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Binding;
 using Tizen.NUI.Binding.Internals;
 
@@ -58,60 +60,34 @@ namespace Tizen.NUI.Xaml.Internals
 
 namespace Tizen.NUI.Xaml
 {
-    static class XamlLoader
+    static internal class XamlLoader
     {
         public static void Load(object view, Type callingType)
         {
-            var xaml = GetXamlForType(callingType);
-            if (string.IsNullOrEmpty(xaml))
-                throw new XamlParseException(string.Format("No embeddedresource found for {0}", callingType), new XmlLineInfo());
-            Console.WriteLine("============= Got xaml text is {0} ===========", xaml);
-            Load(view, xaml);
-        }
-
-        public static Transition LoadTransition(string animationXamlPath)
-        {
-            var xaml = GetAnimationXaml(animationXamlPath);
-            if (string.IsNullOrEmpty(xaml))
-                throw new XamlParseException(string.Format("No embeddedresource found for {0}", animationXamlPath), new XmlLineInfo());
-            Transition animation = new Transition();
-            using (var textReader = new StringReader(xaml))
-            using (var reader = XmlReader.Create(textReader))
+            try
             {
-                while (reader.Read())
-                {
-                    //Skip until element
-                    if (reader.NodeType == XmlNodeType.Whitespace)
-                        continue;
-                    if (reader.NodeType == XmlNodeType.XmlDeclaration)
-                        continue;
-                    if (reader.NodeType != XmlNodeType.Element)
-                    {
-                        Debug.WriteLine("Unhandled node {0} {1} {2}", reader.NodeType, reader.Name, reader.Value);
-                        continue;
-                    }
-
-                    var rootnode = new RuntimeRootNode(new XmlType(reader.NamespaceURI, reader.Name, null), animation, (IXmlNamespaceResolver)reader);
-                    XamlParser.ParseXaml(rootnode, reader);
-                    Visit(rootnode, new HydrationContext
-                    {
-                        RootElement = animation,
-#pragma warning disable 0618
-                        ExceptionHandler = ResourceLoader.ExceptionHandler ?? (Internals.XamlLoader.DoNotThrowOnExceptions ? e => { } : (Action<Exception>)null)
-#pragma warning restore 0618
-                    });
-                    break;
-                }
+                var xaml = GetXamlForType(callingType);
+                if (string.IsNullOrEmpty(xaml))
+                    throw new XamlParseException(string.Format("Can't get xaml from type {0}", callingType), new XmlLineInfo());
+                Load(view, xaml);
+            }
+            catch (XamlParseException e)
+            {
+                Tizen.Log.Fatal("NUI", "XamlParseException e.Message: " + e.Message);
+                Console.WriteLine("\n[FATAL] XamlParseException e.Message: {0}\n", e.Message);
             }
-            return animation;
         }
 
-        public static Animation LoadAnimation(string animationXamlPath)
+        public static T LoadObject<T>(string path)
         {
-            var xaml = GetAnimationXaml(animationXamlPath);
+            var xaml = GetAnimationXaml(path);
             if (string.IsNullOrEmpty(xaml))
-                throw new XamlParseException(string.Format("No embeddedresource found for {0}", animationXamlPath), new XmlLineInfo());
-            Animation animation = new Animation();
+                throw new XamlParseException(string.Format("No embeddedresource found for {0}", path), new XmlLineInfo());
+            Type type = typeof(T);
+            T ret = (T)type.Assembly.CreateInstance(type.FullName);
+
+            NameScopeExtensions.PushElement(ret);
+
             using (var textReader = new StringReader(xaml))
             using (var reader = XmlReader.Create(textReader))
             {
@@ -128,11 +104,11 @@ namespace Tizen.NUI.Xaml
                         continue;
                     }
 
-                    var rootnode = new RuntimeRootNode(new XmlType(reader.NamespaceURI, reader.Name, null), animation, (IXmlNamespaceResolver)reader);
+                    var rootnode = new RuntimeRootNode(new XmlType(reader.NamespaceURI, reader.Name, null), ret, (IXmlNamespaceResolver)reader);
                     XamlParser.ParseXaml(rootnode, reader);
                     Visit(rootnode, new HydrationContext
                     {
-                        RootElement = animation,
+                        RootElement = ret,
 #pragma warning disable 0618
                         ExceptionHandler = ResourceLoader.ExceptionHandler ?? (Internals.XamlLoader.DoNotThrowOnExceptions ? e => { } : (Action<Exception>)null)
 #pragma warning restore 0618
@@ -140,7 +116,9 @@ namespace Tizen.NUI.Xaml
                     break;
                 }
             }
-            return animation;
+
+            NameScopeExtensions.PopElement();
+            return ret;
         }
 
         public static void Load(object view, string xaml)