2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 // Example from Swig MACRO
20 %define BUTTON_EVENTHANDLER_TYPEMAP_EVENTARG(NameSpace, ClassName)
21 %typemap(csimports) NameSpace::ClassName %{
23 using System.Runtime.InteropServices;
29 %define BUTTON_EVENTHANDLER_TYPEMAP_HELPER(NameSpace, ClassName)
30 %typemap(cscode) NameSpace::ClassName %{
32 public class ClickedEventArgs : EventArgs
34 private Button _button;
49 public class PressedEventArgs : EventArgs
51 private Button _button;
66 public class ReleasedEventArgs : EventArgs
68 private Button _button;
83 public class StateChangedEventArgs : EventArgs
85 private Button _button;
100 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
101 public delegate bool ClickedEventHandler(object source, ClickedEventArgs e);
103 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
104 public delegate bool PressedEventHandler(object source, PressedEventArgs e);
106 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
107 public delegate bool ReleasedEventHandler(object source, ReleasedEventArgs e);
109 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
110 public delegate bool StateChangedEventHandler(object source, StateChangedEventArgs e);
112 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
113 private delegate bool ClickedCallbackDelegate(global::System.IntPtr data);
114 private ClickedEventHandler _buttonClickedEventHandler;
115 private ClickedCallbackDelegate _buttonClickedCallbackDelegate;
117 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
118 private delegate bool PressedCallbackDelegate(global::System.IntPtr data);
119 private PressedEventHandler _buttonPressedEventHandler;
120 private PressedCallbackDelegate _buttonPressedCallbackDelegate;
122 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
123 private delegate bool ReleasedCallbackDelegate(global::System.IntPtr data);
124 private ReleasedEventHandler _buttonReleasedEventHandler;
125 private ReleasedCallbackDelegate _buttonReleasedCallbackDelegate;
127 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
128 private delegate bool StateChangedCallbackDelegate(global::System.IntPtr data);
129 private StateChangedEventHandler _buttonStateChangedEventHandler;
130 private StateChangedCallbackDelegate _buttonStateChangedCallbackDelegate;
133 public event ClickedEventHandler Clicked
139 // Restricted to only one listener
140 if (_buttonClickedEventHandler == null)
142 _buttonClickedEventHandler += value;
144 _buttonClickedCallbackDelegate = new ClickedCallbackDelegate(OnClicked);
145 this.ClickedSignal().Connect(_buttonClickedCallbackDelegate);
154 if (_buttonClickedEventHandler != null)
156 this.ClickedSignal().Disconnect(_buttonClickedCallbackDelegate);
159 _buttonClickedEventHandler -= value;
164 // Callback for button click signal
165 private bool OnClicked (IntPtr data)
167 ClickedEventArgs e = new ClickedEventArgs();
169 e.Button = Button.GetButtonFromPtr(data);
171 if (_buttonClickedEventHandler != null)
173 //here we send all data to user event handlers
174 return _buttonClickedEventHandler(this, e);
180 public event PressedEventHandler Pressed
186 // Restricted to only one listener
187 if (_buttonPressedEventHandler == null)
189 _buttonPressedEventHandler += value;
191 _buttonPressedCallbackDelegate = new PressedCallbackDelegate(OnPressed);
192 this.PressedSignal().Connect(_buttonPressedCallbackDelegate);
201 if (_buttonPressedEventHandler != null)
203 this.PressedSignal().Disconnect(_buttonPressedCallbackDelegate);
206 _buttonPressedEventHandler -= value;
211 // Callback for button click signal
212 private bool OnPressed (IntPtr data)
214 PressedEventArgs e = new PressedEventArgs();
216 e.Button = Button.GetButtonFromPtr(data);
218 if (_buttonPressedEventHandler != null)
220 //here we send all data to user event handlers
221 return _buttonPressedEventHandler(this, e);
227 public event ReleasedEventHandler Released
233 // Restricted to only one listener
234 if (_buttonReleasedEventHandler == null)
236 _buttonReleasedEventHandler += value;
238 _buttonReleasedCallbackDelegate = new ReleasedCallbackDelegate(OnReleased);
239 this.ReleasedSignal().Connect(_buttonReleasedCallbackDelegate);
248 if (_buttonReleasedEventHandler != null)
250 this.ReleasedSignal().Disconnect(_buttonReleasedCallbackDelegate);
253 _buttonReleasedEventHandler -= value;
258 // Callback for button click signal
259 private bool OnReleased (IntPtr data)
261 ReleasedEventArgs e = new ReleasedEventArgs();
263 e.Button = Button.GetButtonFromPtr(data);
265 if (_buttonReleasedEventHandler != null)
267 //here we send all data to user event handlers
268 return _buttonReleasedEventHandler(this, e);
274 public event StateChangedEventHandler StateChanged
280 // Restricted to only one listener
281 if (_buttonStateChangedEventHandler == null)
283 _buttonStateChangedEventHandler += value;
285 _buttonStateChangedCallbackDelegate = new StateChangedCallbackDelegate(OnStateChanged);
286 this.StateChangedSignal().Connect(_buttonStateChangedCallbackDelegate);
295 if (_buttonStateChangedEventHandler != null)
297 this.StateChangedSignal().Disconnect(_buttonStateChangedCallbackDelegate);
300 _buttonStateChangedEventHandler -= value;
305 // Callback for button click signal
306 private bool OnStateChanged (IntPtr data)
308 StateChangedEventArgs e = new StateChangedEventArgs();
310 e.Button = Button.GetButtonFromPtr(data);
312 if (_buttonStateChangedEventHandler != null)
314 //here we send all data to user event handlers
315 return _buttonStateChangedEventHandler(this, e);
320 public static ClassName Get ## ClassName ## FromPtr(global::System.IntPtr cPtr) {
321 ClassName ret = new ClassName(cPtr, false);
322 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
330 %define BUTTON_EVENTHANDLER_PARAM( NameSpace, ClassName)
332 BUTTON_EVENTHANDLER_TYPEMAP_EVENTARG( NameSpace, ClassName);
333 BUTTON_EVENTHANDLER_TYPEMAP_HELPER( NameSpace, ClassName);
339 BUTTON_EVENTHANDLER_PARAM( Dali::Toolkit, Button);