~macslow/unity/backported-remote-add-to-5.0

1270.2.29 by Neil Jagdish Patel
cleanup
1
// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
2
/*
3
* Copyright (C) 2011 Canonical Ltd
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 3 as
7
* published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
*
17
* Authored by: Neil Jagdish Patel <neil.patel@canonical.com>
18
*/
19
20
#ifndef UNITY_GLIB_SIGNAL_H
21
#define UNITY_GLIB_SIGNAL_H
22
23
#include <string>
1270.2.8 by Neil Jagdish Patel
Beginnings of SignalManager
24
#include <vector>
1270.2.30 by Neil Jagdish Patel
Make SignalManager noncopyable
25
#include <boost/noncopyable.hpp>
1270.2.9 by Neil Jagdish Patel
Add an ass load of constructors. Template programming is a lot of repeating the same code...
26
#include <boost/shared_ptr.hpp>
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
27
#include <glib-object.h>
28
#include <sigc++/sigc++.h>
29
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
30
namespace unity
31
{
32
namespace glib
33
{
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
34
1270.2.32 by Neil Jagdish Patel
s/using namepspace sigc/using sigc::nil/
35
using sigc::nil;
1270.2.29 by Neil Jagdish Patel
cleanup
36
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
37
class SignalBase
38
{
39
public:
1270.2.9 by Neil Jagdish Patel
Add an ass load of constructors. Template programming is a lot of repeating the same code...
40
  typedef boost::shared_ptr<SignalBase> Ptr;
41
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
42
  SignalBase();
43
  virtual ~SignalBase();
1270.2.2 by Neil Jagdish Patel
Initial testing support
44
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
45
  void Disconnect();
46
1270.2.22 by Neil Jagdish Patel
get_foo/foo
47
  GObject* object() const;
48
  std::string const& name() const;
1270.2.13 by Neil Jagdish Patel
Add support to SignalManager for disconnections and add a test for that
49
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
50
protected:
51
  GObject* object_;
52
  guint32 connection_id_;
1270.2.13 by Neil Jagdish Patel
Add support to SignalManager for disconnections and add a test for that
53
  std::string name_;
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
54
};
55
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
56
template <typename R, typename G>
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
57
class Signal0 : public SignalBase
58
{
59
public:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
60
  typedef sigc::slot<R, G> SignalCallback;
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
61
1270.2.18 by Neil Jagdish Patel
Some cleanups
62
  Signal0();
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
63
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
64
  void Connect(G Object,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
65
               std::string const& signal_name,
66
               SignalCallback     cb);
67
private:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
68
  static R Callback(G object, Signal0* self);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
69
private:
70
  SignalCallback callback_;
71
};
72
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
73
template <typename R, typename G, typename T>
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
74
class Signal1 : public SignalBase
75
{
76
public:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
77
  typedef sigc::slot<R, G, T> SignalCallback;
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
78
1270.2.18 by Neil Jagdish Patel
Some cleanups
79
  Signal1();
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
80
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
81
  void Connect(G Object,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
82
               std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
83
               SignalCallback callback);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
84
private:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
85
  static R Callback(G object, T data1, Signal1* self);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
86
private:
87
  SignalCallback callback_;
88
};
89
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
90
template <typename R, typename G, typename T1, typename T2>
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
91
class Signal2 : public SignalBase
92
{
93
public:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
94
  typedef sigc::slot<R, G, T1, T2> SignalCallback;
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
95
1270.2.18 by Neil Jagdish Patel
Some cleanups
96
  Signal2();
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
97
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
98
  void Connect(G Object,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
99
               std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
100
               SignalCallback callback);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
101
private:
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
102
  static R Callback(G Object,
103
                    T1 data1,
104
                    T2 data2,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
105
                    Signal2* self);
106
private:
107
  SignalCallback callback_;
108
};
109
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
110
template <typename R, typename G, typename T1, typename T2, typename T3>
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
111
class Signal3 : public SignalBase
112
{
113
public:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
114
  typedef sigc::slot<R, G, T1, T2, T3> SignalCallback;
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
115
1270.2.18 by Neil Jagdish Patel
Some cleanups
116
  Signal3();
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
117
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
118
  void Connect(G Object,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
119
               std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
120
               SignalCallback callback);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
121
private:
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
122
  static R Callback(G Object,
123
                    T1 data1,
124
                    T2 data2,
125
                    T3 data3,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
126
                    Signal3* self);
127
private:
128
  SignalCallback callback_;
129
};
130
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
131
template <typename R, typename G, typename T1, typename T2, typename T3, typename T4>
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
132
class Signal4 : public SignalBase
133
{
134
public:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
135
  typedef sigc::slot<R, G, T1, T2, T3, T4> SignalCallback;
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
136
1270.2.18 by Neil Jagdish Patel
Some cleanups
137
  Signal4();
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
138
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
139
  void Connect(G Object,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
140
               std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
141
               SignalCallback callback);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
142
private:
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
143
  static R Callback(G Object,
144
                    T1 data1,
145
                    T2 data2,
146
                    T3 data3,
147
                    T4 data4,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
148
                    Signal4* self);
149
private:
150
  SignalCallback callback_;
151
};
152
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
153
template < typename R, typename G, typename T1, typename T2,
154
         typename T3, typename T4, typename T5 >
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
155
class Signal5 : public SignalBase
156
{
157
public:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
158
  typedef sigc::slot<R, G, T1, T2, T3, T4, T5> SignalCallback;
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
159
1270.2.18 by Neil Jagdish Patel
Some cleanups
160
  Signal5();
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
161
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
162
  void Connect(G Object,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
163
               std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
164
               SignalCallback callback);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
165
private:
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
166
  static R Callback(G Object,
167
                    T1 data1,
168
                    T2 data2,
169
                    T3 data3,
170
                    T4 data4,
171
                    T5 data5,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
172
                    Signal5* self);
173
private:
174
  SignalCallback callback_;
175
};
176
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
177
template < typename R, typename G, typename T1, typename T2,
178
         typename T3, typename T4, typename T5, typename T6 >
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
179
class Signal6 : public SignalBase
180
{
181
public:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
182
  typedef sigc::slot<R, G, T1, T2, T3, T4, T5, T6> SignalCallback;
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
183
1270.2.18 by Neil Jagdish Patel
Some cleanups
184
  Signal6();
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
185
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
186
  void Connect(G Object,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
187
               std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
188
               SignalCallback callback);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
189
private:
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
190
  static R Callback(G Object,
191
                    T1 data1,
192
                    T2 data2,
193
                    T3 data3,
194
                    T4 data4,
195
                    T5 data5,
196
                    T6 data6,
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
197
                    Signal6* self);
198
private:
199
  SignalCallback callback_;
200
};
201
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
202
template < typename R, typename G,
203
         typename T1 = nil, typename T2 = nil,
204
         typename T3 = nil, typename T4 = nil,
205
         typename T5 = nil, typename T6 = nil >
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
206
class Signal : public Signal6<R, G, T1, T2, T3, T4, T5, T6>
207
{
208
public:
209
  typedef sigc::slot<R, G, T1, T2, T3, T4, T5, T6> SignalCallback;
210
211
  inline Signal();
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
212
  inline Signal(G Object,
1270.2.23 by Neil Jagdish Patel
Use std::string const& in Signal template
213
                std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
214
                SignalCallback callback);
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
215
};
216
217
template <typename R, typename G>
1270.2.29 by Neil Jagdish Patel
cleanup
218
class Signal<R, G, nil, nil, nil, nil, nil, nil> : public Signal0<R, G>
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
219
{
220
public:
221
  typedef sigc::slot<R, G> SignalCallback;
222
223
  inline Signal();
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
224
  inline Signal(G Object,
1270.2.23 by Neil Jagdish Patel
Use std::string const& in Signal template
225
                std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
226
                SignalCallback callback);
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
227
};
228
229
template <typename R, typename G, typename T1>
1270.2.29 by Neil Jagdish Patel
cleanup
230
class Signal<R, G, T1, nil, nil, nil, nil, nil> : public Signal1<R, G, T1>
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
231
{
232
public:
233
  typedef sigc::slot<R, G, T1> SignalCallback;
234
235
  inline Signal();
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
236
  inline Signal(G Object,
1270.2.23 by Neil Jagdish Patel
Use std::string const& in Signal template
237
                std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
238
                SignalCallback callback);
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
239
};
240
241
template <typename R, typename G, typename T1, typename T2>
1270.2.29 by Neil Jagdish Patel
cleanup
242
class Signal<R, G, T1, T2, nil, nil, nil, nil> : public Signal2<R, G, T1, T2>
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
243
{
244
public:
245
  typedef sigc::slot<R, G, T1, T2> SignalCallback;
246
247
  inline Signal();
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
248
  inline Signal(G Object,
1270.2.23 by Neil Jagdish Patel
Use std::string const& in Signal template
249
                std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
250
                SignalCallback callback);
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
251
};
252
253
template <typename R, typename G, typename T1, typename T2, typename T3>
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
254
class Signal<R, G, T1, T2, T3, nil, nil, nil> : public Signal3<R, G, T1, T2 , T3>
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
255
{
256
public:
257
  typedef sigc::slot<R, G, T1, T2, T3> SignalCallback;
258
259
  inline Signal();
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
260
  inline Signal(G Object,
1270.2.23 by Neil Jagdish Patel
Use std::string const& in Signal template
261
                std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
262
                SignalCallback callback);
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
263
};
264
265
template <typename R, typename G, typename T1, typename T2, typename T3, typename T4>
1270.2.29 by Neil Jagdish Patel
cleanup
266
class Signal<R, G, T1, T2, T3, T4, nil, nil>
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
267
  : public Signal4<R, G, T1, T2 , T3, T4>
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
268
{
269
public:
270
  typedef sigc::slot<R, G, T1, T2, T3, T4> SignalCallback;
271
272
  inline Signal();
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
273
  inline Signal(G Object,
1270.2.23 by Neil Jagdish Patel
Use std::string const& in Signal template
274
                std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
275
                SignalCallback callback);
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
276
};
277
1270.2.23 by Neil Jagdish Patel
Use std::string const& in Signal template
278
template <typename R, typename G, typename T1, typename T2, typename T3, typename T4, typename T5>
1270.2.29 by Neil Jagdish Patel
cleanup
279
class Signal<R, G, T1, T2, T3, T4, T5, nil>
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
280
  : public Signal5<R, G, T1, T2 , T3, T4, T5>
1270.2.15 by Neil Jagdish Patel
Forgot to add support for sending the emitting GObject!
281
{
282
public:
1270.2.21 by Neil Jagdish Patel
Don't use upper case o
283
  typedef sigc::slot<R, G, T1, T2, T3, T4, T5> SignalCallback;
1270.2.15 by Neil Jagdish Patel
Forgot to add support for sending the emitting GObject!
284
285
  inline Signal();
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
286
  inline Signal(G Object,
1270.2.23 by Neil Jagdish Patel
Use std::string const& in Signal template
287
                std::string const& signal_name,
1270.2.34 by Neil Jagdish Patel
Try to not pad out the parameters for a method
288
                SignalCallback callback);
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
289
};
290
1270.2.30 by Neil Jagdish Patel
Make SignalManager noncopyable
291
class SignalManager : public boost::noncopyable
1270.2.8 by Neil Jagdish Patel
Beginnings of SignalManager
292
{
293
public:
1270.2.13 by Neil Jagdish Patel
Add support to SignalManager for disconnections and add a test for that
294
  typedef std::vector<SignalBase::Ptr> ConnectionVector;
295
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
296
  SignalManager();
1270.2.8 by Neil Jagdish Patel
Beginnings of SignalManager
297
  void Add(SignalBase* signal);
2356.1.1 by Marco Trevisan (Treviño)
GLib::SignalManager: allow to disconnect all the signals for a given Object.
298
  void Disconnect(void* object, std::string const& signal_name = "");
1307 by Neil Jagdish Patel
Update formatting to match style (as close as possible)
299
1270.2.8 by Neil Jagdish Patel
Beginnings of SignalManager
300
private:
1270.2.13 by Neil Jagdish Patel
Add support to SignalManager for disconnections and add a test for that
301
  ConnectionVector connections_;
1270.2.8 by Neil Jagdish Patel
Beginnings of SignalManager
302
};
303
1270.2.1 by Neil Jagdish Patel
Import Signal work as merging old trunk was breaking things
304
}
305
}
306
307
#include "GLibSignal-inl.h"
308
309
#endif