[NUI] Add Tizen.NUI.XamlBuild module
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.XamlBuild / src / internal / Xaml / XamlNodeVisitor.cs
1 using System;
2
3 namespace Tizen.NUI.Xaml
4 {
5     internal interface IXamlNodeVisitor
6     {
7         TreeVisitingMode VisitingMode { get; }
8         bool StopOnDataTemplate { get; }
9         bool VisitNodeOnDataTemplate { get; }
10         bool StopOnResourceDictionary { get; }
11
12         void Visit(ValueNode node, INode parentNode);
13         void Visit(MarkupNode node, INode parentNode);
14         void Visit(ElementNode node, INode parentNode);
15         void Visit(RootNode node, INode parentNode);
16         void Visit(ListNode node, INode parentNode);
17         bool SkipChildren(INode node, INode parentNode);
18         bool IsResourceDictionary(ElementNode node);
19     }
20
21     internal enum TreeVisitingMode {
22         TopDown,
23         BottomUp
24     }
25
26     internal class XamlNodeVisitor : IXamlNodeVisitor
27     {
28         readonly Action<INode, INode> action;
29
30         public XamlNodeVisitor(Action<INode, INode> action, TreeVisitingMode visitingMode = TreeVisitingMode.TopDown, bool stopOnDataTemplate = false, bool visitNodeOnDataTemplate = true)
31         {
32             this.action = action;
33             VisitingMode = visitingMode;
34             StopOnDataTemplate = stopOnDataTemplate;
35             VisitNodeOnDataTemplate = visitNodeOnDataTemplate;
36         }
37
38         public TreeVisitingMode VisitingMode { get; }
39         public bool StopOnDataTemplate { get; }
40         public bool StopOnResourceDictionary { get; }
41         public bool VisitNodeOnDataTemplate { get; }
42
43         public void Visit(ValueNode node, INode parentNode) => action(node, parentNode);
44         public void Visit(MarkupNode node, INode parentNode) => action(node, parentNode);
45         public void Visit(ElementNode node, INode parentNode) => action(node, parentNode);
46         public void Visit(RootNode node, INode parentNode) => action(node, parentNode);
47         public void Visit(ListNode node, INode parentNode) => action(node, parentNode);
48         public bool SkipChildren(INode node, INode parentNode) => false;
49         public bool IsResourceDictionary(ElementNode node) => false;
50     }
51 }