update wrt_0.8.107
[platform/framework/web/wrt.git] / src / domain / user_callback_logic.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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  * @file    user_callback_logic.h
18  * @author  Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
19  * @version 1.0
20  * @brief   Implementation file for user callback logic
21  */
22 #ifndef USER_CALLBACK_LOGIC_H
23 #define USER_CALLBACK_LOGIC_H
24
25 #include <cstddef>
26 #include <dpl/assert.h>
27
28 class UserCallbackCall
29 {
30   public:
31     virtual ~UserCallbackCall()
32     {
33     }
34     virtual void Exec() const = 0;
35 };
36
37 template<typename Callback>
38 class GenericUserCallbackCall0 :
39     public UserCallbackCall
40 {
41   private:
42     Callback m_callback;
43
44   public:
45     GenericUserCallbackCall0(Callback callback) :
46         m_callback(callback)
47     {
48     }
49
50     virtual void Exec() const
51     {
52         Assert(m_callback != NULL);
53         m_callback();
54     }
55 };
56
57 template<typename Callback, typename Arg0>
58 class GenericUserCallbackCall1 :
59     public UserCallbackCall
60 {
61   private:
62     Callback m_callback;
63     Arg0 m_arg0;
64
65   public:
66     GenericUserCallbackCall1(Callback callback,
67             Arg0 arg0) :
68         m_callback(callback),
69         m_arg0(arg0)
70     {
71     }
72
73     virtual void Exec() const
74     {
75         Assert(m_callback != NULL);
76         m_callback(m_arg0);
77     }
78 };
79
80 template<typename Callback, typename Arg0, typename Arg1>
81 class GenericUserCallbackCall2 :
82     public UserCallbackCall
83 {
84   private:
85     Callback m_callback;
86     Arg0 m_arg0;
87     Arg1 m_arg1;
88
89   public:
90     GenericUserCallbackCall2(Callback callback,
91             Arg0 arg0,
92             Arg1 arg1) :
93         m_callback(callback),
94         m_arg0(arg0),
95         m_arg1(arg1)
96     {
97     }
98
99     virtual void Exec() const
100     {
101         Assert(m_callback != NULL);
102         m_callback(m_arg0, m_arg1);
103     }
104 };
105
106 template<typename Callback, typename Arg0, typename Arg1, typename Arg2>
107 class GenericUserCallbackCall3 :
108     public UserCallbackCall
109 {
110   private:
111     Callback m_callback;
112     Arg0 m_arg0;
113     Arg1 m_arg1;
114     Arg2 m_arg2;
115
116   public:
117     GenericUserCallbackCall3(Callback callback,
118             Arg0 arg0,
119             Arg1 arg1,
120             Arg2 arg2) :
121         m_callback(callback),
122         m_arg0(arg0),
123         m_arg1(arg1),
124         m_arg2(arg2)
125     {
126     }
127
128     virtual void Exec() const
129     {
130         Assert(m_callback != NULL);
131         m_callback(m_arg0, m_arg1, m_arg2);
132     }
133 };
134
135 template<typename Callback, typename Arg0, typename Arg1, typename Arg2,
136          typename Arg3>
137 class GenericUserCallbackCall4 :
138     public UserCallbackCall
139 {
140   private:
141     Callback m_callback;
142     Arg0 m_arg0;
143     Arg1 m_arg1;
144     Arg2 m_arg2;
145     Arg3 m_arg3;
146
147   public:
148     GenericUserCallbackCall4(Callback callback,
149             Arg0 arg0,
150             Arg1 arg1,
151             Arg2 arg2,
152             Arg3 arg3) :
153         m_callback(callback),
154         m_arg0(arg0),
155         m_arg1(arg1),
156         m_arg2(arg2),
157         m_arg3(arg3)
158     {
159     }
160
161     virtual void Exec() const
162     {
163         Assert(m_callback != NULL);
164         m_callback(m_arg0, m_arg1, m_arg2, m_arg3);
165     }
166 };
167
168 template<typename Callback, typename Arg0, typename Arg1, typename Arg2,
169          typename Arg3, typename Arg4>
170 class GenericUserCallbackCall5 :
171     public UserCallbackCall
172 {
173   private:
174     Callback m_callback;
175     Arg0 m_arg0;
176     Arg1 m_arg1;
177     Arg2 m_arg2;
178     Arg3 m_arg3;
179     Arg4 m_arg4;
180
181   public:
182     GenericUserCallbackCall5(Callback callback,
183             Arg0 arg0,
184             Arg1 arg1,
185             Arg2 arg2,
186             Arg3 arg3,
187             Arg4 arg4) :
188         m_callback(callback),
189         m_arg0(arg0),
190         m_arg1(arg1),
191         m_arg2(arg2),
192         m_arg3(arg3),
193         m_arg4(arg4)
194     {
195     }
196
197     virtual void Exec() const
198     {
199         Assert(m_callback != NULL);
200         m_callback(m_arg0, m_arg1, m_arg2, m_arg3, m_arg4);
201     }
202 };
203
204 /**
205  * @brief User callback logic
206  */
207 class UserCallbackLogic
208 {
209   public:
210     virtual ~UserCallbackLogic();
211
212     /**
213      * This method send user callback from separate context
214      */
215     void EmitUserCallback(const UserCallbackCall *callback);
216
217   private:
218     UserCallbackLogic();
219
220     friend class UserCallbackController;
221 };
222
223 #endif // WIDGET_LOGIC_H