[Xaml] Provide method so that user can dispose all xaml objects
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / EXaml / Action / AddExistInstanceAction.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.Text;
20 using Tizen.NUI.Binding;
21 using Tizen.NUI.Binding.Internals;
22
23 namespace Tizen.NUI.EXaml
24 {
25     internal class AddExistInstanceAction : Action
26     {
27         internal AddExistInstanceAction(GlobalDataList globalDataList, Action parent)
28         {
29             this.parent = parent;
30             this.globalDataList = globalDataList;
31         }
32
33         private Action parent;
34         private GlobalDataList globalDataList;
35
36         public Action DealChar(char c)
37         {
38             switch (c)
39             {
40                 case ' ':
41                 case '\n':
42                 case '\r':
43                     break;
44
45                 case '@':
46                     parent?.OnActive();
47                     return parent;
48
49                 case '(':
50                     getValueListOp = new GetValueListAction(')', this);
51                     return getValueListOp;
52
53                 case 'o':
54                 case 'q':
55                     sign = c;
56                     break;
57             }
58
59             return this;
60         }
61
62         public void Init()
63         {
64             getValueListOp = null;
65         }
66
67         public void OnActive()
68         {
69             if (null != getValueListOp)
70             {
71                 object value0 = getValueListOp.ValueList[0];
72                 int index = (value0 is Instance) ? (value0 as Instance).Index : (int)value0;
73                 string value = getValueListOp.ValueList[1] as string;
74
75                 if ('q' == sign)
76                 {
77                     globalDataList.Operations.Add(new GatherConvertedValue(globalDataList, index, value));
78                 }
79                 else if ('o' == sign)
80                 {
81                     globalDataList.Operations.Add(new GatherEnumValue(globalDataList, index, value));
82                 }
83
84                 getValueListOp = null;
85             }
86         }
87
88         private char sign;
89         private GetValueListAction getValueListOp;
90     }
91 }