59d89a0d607a3d6df44e816737a9ab1757e42434
[platform/core/uifw/dali-toolkit.git] / plugins / dali-swig / SWIG / events / textfield-event.i
1 /*
2  * Copyright (c) 2016 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
18 %define TEXTFIELD_EVENTHANDLER_TYPEMAP_EVENTARG(NameSpace, ClassName)
19 %typemap(csimports) NameSpace::ClassName %{
20 using System;
21 using System.Runtime.InteropServices;
22
23 %}
24
25 %enddef
26
27 %define TEXTFIELD_EVENTHANDLER_TYPEMAP_HELPER(NameSpace, ClassName)
28 %typemap(cscode) NameSpace::ClassName %{
29
30 public class TextChangedEventArgs : EventArgs
31 {
32    private TextField _textField;
33
34    public TextField TextField
35    {
36       get
37       {
38          return _textField;
39       }
40       set
41       {
42          _textField = value;
43       }
44    }
45 }
46
47 public class MaxLengthReachedEventArgs : EventArgs
48 {
49    private TextField _textField;
50
51    public TextField TextField
52    {
53       get
54       {
55          return _textField;
56       }
57       set
58       {
59          _textField = value;
60       }
61    }
62 }
63
64   [UnmanagedFunctionPointer(CallingConvention.StdCall)]
65   public delegate void TextChangedEventHandler(object source, TextChangedEventArgs e);
66
67   [UnmanagedFunctionPointer(CallingConvention.StdCall)]
68   public delegate void MaxLengthReachedEventHandler(object source, MaxLengthReachedEventArgs e);
69
70   [UnmanagedFunctionPointer(CallingConvention.StdCall)]
71   private delegate void TextChangedCallbackDelegate(IntPtr textField);
72   private TextChangedEventHandler _textFieldTextChangedEventHandler;
73   private TextChangedCallbackDelegate _textFieldTextChangedCallbackDelegate;
74
75   [UnmanagedFunctionPointer(CallingConvention.StdCall)]
76   private delegate void MaxLengthReachedCallbackDelegate(IntPtr textField);
77   private MaxLengthReachedEventHandler _textFieldMaxLengthReachedEventHandler;
78   private MaxLengthReachedCallbackDelegate _textFieldMaxLengthReachedCallbackDelegate;
79
80   public event TextChangedEventHandler TextChanged
81   {
82      add
83      {
84         lock(this)
85         {
86            // Restricted to only one listener
87            if (_textFieldTextChangedEventHandler == null)
88            {
89               _textFieldTextChangedEventHandler += value;
90
91               _textFieldTextChangedCallbackDelegate = new TextChangedCallbackDelegate(OnTextChanged);
92               this.TextChangedSignal().Connect(_textFieldTextChangedCallbackDelegate);
93            }
94         }
95      }
96
97      remove
98      {
99         lock(this)
100         {
101            if (_textFieldTextChangedEventHandler != null)
102            {
103               this.TextChangedSignal().Disconnect(_textFieldTextChangedCallbackDelegate);
104            }
105
106            _textFieldTextChangedEventHandler -= value;
107         }
108      }
109   }
110
111  private void OnTextChanged(IntPtr textField)
112   {
113    TextChangedEventArgs e = new TextChangedEventArgs();
114
115    // Populate all members of "e" (TextChangedEventArgs) with real data
116    e.TextField = Dali.TextField.GetTextFieldFromPtr(textField);
117
118    if (_textFieldTextChangedEventHandler != null)
119    {
120       //here we send all data to user event handlers
121       _textFieldTextChangedEventHandler(this, e);
122    }
123
124   }
125
126   public event MaxLengthReachedEventHandler MaxLengthReached
127   {
128      add
129      {
130         lock(this)
131         {
132            // Restricted to only one listener
133            if (_textFieldMaxLengthReachedEventHandler == null)
134            {
135               _textFieldMaxLengthReachedEventHandler += value;
136
137               _textFieldMaxLengthReachedCallbackDelegate = new MaxLengthReachedCallbackDelegate(OnMaxLengthReached);
138               this.MaxLengthReachedSignal().Connect(_textFieldMaxLengthReachedCallbackDelegate);
139            }
140         }
141      }
142
143      remove
144      {
145         lock(this)
146         {
147            if (_textFieldMaxLengthReachedEventHandler != null)
148            {
149               this.MaxLengthReachedSignal().Disconnect(_textFieldMaxLengthReachedCallbackDelegate);
150            }
151
152            _textFieldMaxLengthReachedEventHandler -= value;
153         }
154      }
155   }
156
157  private void OnMaxLengthReached(IntPtr textField)
158   {
159    MaxLengthReachedEventArgs e = new MaxLengthReachedEventArgs();
160
161    // Populate all members of "e" (MaxLengthReachedEventArgs) with real data
162    e.TextField = Dali.TextField.GetTextFieldFromPtr(textField);
163
164    if (_textFieldMaxLengthReachedEventHandler != null)
165    {
166       //here we send all data to user event handlers
167       _textFieldMaxLengthReachedEventHandler(this, e);
168    }
169
170   }
171
172  public static ClassName Get ## ClassName ## FromPtr(global::System.IntPtr cPtr) {
173    ClassName ret = new ClassName(cPtr, false);
174    if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
175     return ret;
176   }
177
178 %}
179
180 %enddef
181
182 %define DALI_TEXTFIELD_EVENTHANDLER_PARAM( NameSpace, ClassName)
183
184   TEXTFIELD_EVENTHANDLER_TYPEMAP_EVENTARG( NameSpace, ClassName);
185   TEXTFIELD_EVENTHANDLER_TYPEMAP_HELPER( NameSpace, ClassName);
186
187 %enddef
188
189 namespace Dali
190 {
191   DALI_TEXTFIELD_EVENTHANDLER_PARAM( Dali::Toolkit, TextField);
192 }