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;
101 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
102 private delegate bool ClickedCallbackDelegate(global::System.IntPtr data);
103 private DaliEventHandlerWithReturnType<object,ClickedEventArgs,bool> _buttonClickedEventHandler;
104 private ClickedCallbackDelegate _buttonClickedCallbackDelegate;
106 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
107 private delegate bool PressedCallbackDelegate(global::System.IntPtr data);
108 private DaliEventHandlerWithReturnType<object,PressedEventArgs,bool> _buttonPressedEventHandler;
109 private PressedCallbackDelegate _buttonPressedCallbackDelegate;
111 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
112 private delegate bool ReleasedCallbackDelegate(global::System.IntPtr data);
113 private DaliEventHandlerWithReturnType<object,ReleasedEventArgs,bool> _buttonReleasedEventHandler;
114 private ReleasedCallbackDelegate _buttonReleasedCallbackDelegate;
116 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
117 private delegate bool StateChangedCallbackDelegate(global::System.IntPtr data);
118 private DaliEventHandlerWithReturnType<object,StateChangedEventArgs,bool> _buttonStateChangedEventHandler;
119 private StateChangedCallbackDelegate _buttonStateChangedCallbackDelegate;
122 public event DaliEventHandlerWithReturnType<object,ClickedEventArgs,bool> Clicked
128 // Restricted to only one listener
129 if (_buttonClickedEventHandler == null)
131 _buttonClickedEventHandler += value;
133 _buttonClickedCallbackDelegate = new ClickedCallbackDelegate(OnClicked);
134 this.ClickedSignal().Connect(_buttonClickedCallbackDelegate);
143 if (_buttonClickedEventHandler != null)
145 this.ClickedSignal().Disconnect(_buttonClickedCallbackDelegate);
148 _buttonClickedEventHandler -= value;
153 // Callback for button click signal
154 private bool OnClicked (IntPtr data)
156 ClickedEventArgs e = new ClickedEventArgs();
158 e.Button = Button.GetButtonFromPtr(data);
160 if (_buttonClickedEventHandler != null)
162 //here we send all data to user event handlers
163 return _buttonClickedEventHandler(this, e);
169 public event DaliEventHandlerWithReturnType<object,PressedEventArgs,bool> Pressed
175 // Restricted to only one listener
176 if (_buttonPressedEventHandler == null)
178 _buttonPressedEventHandler += value;
180 _buttonPressedCallbackDelegate = new PressedCallbackDelegate(OnPressed);
181 this.PressedSignal().Connect(_buttonPressedCallbackDelegate);
190 if (_buttonPressedEventHandler != null)
192 this.PressedSignal().Disconnect(_buttonPressedCallbackDelegate);
195 _buttonPressedEventHandler -= value;
200 // Callback for button click signal
201 private bool OnPressed (IntPtr data)
203 PressedEventArgs e = new PressedEventArgs();
205 e.Button = Button.GetButtonFromPtr(data);
207 if (_buttonPressedEventHandler != null)
209 //here we send all data to user event handlers
210 return _buttonPressedEventHandler(this, e);
216 public event DaliEventHandlerWithReturnType<object,ReleasedEventArgs,bool> Released
222 // Restricted to only one listener
223 if (_buttonReleasedEventHandler == null)
225 _buttonReleasedEventHandler += value;
227 _buttonReleasedCallbackDelegate = new ReleasedCallbackDelegate(OnReleased);
228 this.ReleasedSignal().Connect(_buttonReleasedCallbackDelegate);
237 if (_buttonReleasedEventHandler != null)
239 this.ReleasedSignal().Disconnect(_buttonReleasedCallbackDelegate);
242 _buttonReleasedEventHandler -= value;
247 // Callback for button click signal
248 private bool OnReleased (IntPtr data)
250 ReleasedEventArgs e = new ReleasedEventArgs();
252 e.Button = Button.GetButtonFromPtr(data);
254 if (_buttonReleasedEventHandler != null)
256 //here we send all data to user event handlers
257 return _buttonReleasedEventHandler(this, e);
263 public event DaliEventHandlerWithReturnType<object,StateChangedEventArgs,bool> StateChanged
269 // Restricted to only one listener
270 if (_buttonStateChangedEventHandler == null)
272 _buttonStateChangedEventHandler += value;
274 _buttonStateChangedCallbackDelegate = new StateChangedCallbackDelegate(OnStateChanged);
275 this.StateChangedSignal().Connect(_buttonStateChangedCallbackDelegate);
284 if (_buttonStateChangedEventHandler != null)
286 this.StateChangedSignal().Disconnect(_buttonStateChangedCallbackDelegate);
289 _buttonStateChangedEventHandler -= value;
294 // Callback for button click signal
295 private bool OnStateChanged (IntPtr data)
297 StateChangedEventArgs e = new StateChangedEventArgs();
299 e.Button = Button.GetButtonFromPtr(data);
301 if (_buttonStateChangedEventHandler != null)
303 //here we send all data to user event handlers
304 return _buttonStateChangedEventHandler(this, e);
309 public static ClassName Get ## ClassName ## FromPtr(global::System.IntPtr cPtr) {
310 ClassName ret = new ClassName(cPtr, false);
311 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
319 %define BUTTON_EVENTHANDLER_PARAM( NameSpace, ClassName)
321 BUTTON_EVENTHANDLER_TYPEMAP_EVENTARG( NameSpace, ClassName);
322 BUTTON_EVENTHANDLER_TYPEMAP_HELPER( NameSpace, ClassName);
328 BUTTON_EVENTHANDLER_PARAM( Dali::Toolkit, Button);