[EXaml] 1.Support List property 2.Support load multi EXaml
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / EXaml / Action / SetBindingAction.cs
1 /*
2  * Copyright(c) 2021 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 using System;
18 using System.Collections.Generic;
19 using System.Reflection;
20 using System.Text;
21 using Tizen.NUI.Binding;
22 using Tizen.NUI.Binding.Internals;
23
24 namespace Tizen.NUI.EXaml
25 {
26     internal class SetBindingAction : Action
27     {
28         public SetBindingAction(GlobalDataList globalDataList, Action parent)
29         {
30             this.parent = parent;
31             this.globalDataList = globalDataList;
32         }
33
34         private Action parent;
35         private GlobalDataList globalDataList;
36
37         public Action DealChar(char c)
38         {
39             switch (c)
40             {
41                 case ' ':
42                 case '\n':
43                 case '\r':
44                     break;
45
46                 case '(':
47                     childOp = new GetValueListAction(')', this);
48                     return childOp;
49
50                 case '%':
51                     parent?.OnActive();
52                     return parent;
53             }
54
55             return this;
56         }
57
58         private GetValueListAction childOp;
59
60         public void Init()
61         {
62             childOp = null;
63         }
64
65         public void OnActive()
66         {
67             if (null != childOp)
68             {
69                 int instanceIndex = (childOp.ValueList[0] as Instance).Index;
70                 var propertyIndex = (int)childOp.ValueList[1];
71                 int valueIndex = (childOp.ValueList[2] as Instance).Index;
72
73                 globalDataList.Operations.Add(new SetBinding(globalDataList, instanceIndex, propertyIndex, valueIndex));
74             }
75         }
76     }
77 }