summaryrefslogtreecommitdiffstats
path: root/src/dm/systems/Qt3DSDMSignals.h
blob: 57b9659151f508b247fc5c18deb7f66ca2880064 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
/****************************************************************************
**
** Copyright (C) 1993-2009 NVIDIA Corporation.
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt 3D Studio.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#pragma once
#ifndef QT3DSDM_SIGNALS_H
#define QT3DSDM_SIGNALS_H
#include "Qt3DSDMDataTypes.h"
#include "Qt3DSDMHandles.h"
#include "Qt3DSDMAnimation.h"
#include "Qt3DSDMActionInfo.h"
#include "Qt3DSDMValue.h"
#include <functional>
#include <string>

namespace qt3dsdm {

class ISignalConnection
{
public:
    virtual ~ISignalConnection() {}
};

class ISignalItem
{
public:
    virtual ~ISignalItem() {}
};

typedef std::shared_ptr<ISignalItem> TSignalItemPtr;

typedef std::shared_ptr<ISignalConnection> TSignalConnectionPtr;

class QtSignalConnection : public ISignalConnection
{
    Q_DISABLE_COPY(QtSignalConnection)
private:
    QMetaObject::Connection m_connection;
public:
    QtSignalConnection(const QMetaObject::Connection &inConnection)
        : m_connection(inConnection)
    {
    }
    ~QtSignalConnection() override
    {
        QObject::disconnect(m_connection);
    }
};


class IInstancePropertyCoreSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr ConnectInstancePropertyValue(
        const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, const SValue &)>
            &inCallback) = 0;
};

class IInstancePropertyCoreSignalSender : public ISignalItem
{
public:
    virtual void SignalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
                                             Qt3DSDMPropertyHandle inProperty,
                                             const SValue &inValue) = 0;
};

class IDataCoreSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr
    ConnectInstanceCreated(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectBeforeInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectInstanceDerived(
        const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectInstanceParentRemoved(
        const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectPropertyAdded(const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
                                                    TCharPtr, DataModelDataType::Value)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectPropertyRemoved(
        const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, TCharPtr,
                                   DataModelDataType::Value)> &inCallback) = 0;
};

class IDataCoreSignalSender : public ISignalItem
{
public:
    virtual void SignalInstanceCreated(Qt3DSDMInstanceHandle inInstance) = 0;
    virtual void SignalBeforeInstanceDeleted(Qt3DSDMInstanceHandle inInstance) = 0;
    virtual void SignalInstanceDeleted(Qt3DSDMInstanceHandle inInstance) = 0;
    virtual void SignalInstanceDerived(Qt3DSDMInstanceHandle inInstance,
                                       Qt3DSDMInstanceHandle inParent) = 0;
    virtual void SignalInstanceParentRemoved(Qt3DSDMInstanceHandle inInstance,
                                             Qt3DSDMInstanceHandle inParent) = 0;
    virtual void SignalPropertyAdded(Qt3DSDMInstanceHandle inInstance,
                                     Qt3DSDMPropertyHandle inProperty, TCharPtr inName,
                                     DataModelDataType::Value inDataType) = 0;
    virtual void SignalPropertyRemoved(Qt3DSDMInstanceHandle inInstance,
                                       Qt3DSDMPropertyHandle inProperty, TCharPtr inName,
                                       DataModelDataType::Value inDataType) = 0;
};

class ISlideCoreSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr
    ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectBeforeSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectSlideDerived(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle, int)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectInstancePropertyValueSet(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
                                   const SValue &)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectInstancePropertyValueRemoved(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
                                   const SValue &)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectSlideTimeChanged(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
};

class ISlideCoreSignalSender : public ISignalItem
{
public:
    virtual void SendSlideCreated(Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendBeforeSlideDeleted(Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendSlideDeleted(Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendSlideDerived(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent,
                                  int inIndex) = 0;
    virtual void SendPropertyValueSet(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
                                      Qt3DSDMPropertyHandle inParent, const SValue &inValue) = 0;
    // This gives clients a chance to override a property value the first time it is set on a slide
    virtual void SendPropertyValueRemoved(Qt3DSDMSlideHandle inSlide,
                                          Qt3DSDMInstanceHandle inInstance,
                                          Qt3DSDMPropertyHandle inParent, const SValue &inValue) = 0;
    virtual void SendSlideTimeChanged(Qt3DSDMSlideHandle inSlide) = 0;
};

class ISlideGraphCoreSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr ConnectGraphCreated(
        const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectGraphDeleted(
        const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectInstanceAssociated(
        const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectInstanceDissociated(
        const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectGraphActiveSlide(
        const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) = 0;
};

class ISlideGraphCoreSignalSender : public ISignalItem
{
public:
    virtual void SendGraphCreated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendGraphDeleted(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendInstanceAssociated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide,
                                        Qt3DSDMInstanceHandle inInstance) = 0;
    virtual void SendInstanceDissociated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide,
                                         Qt3DSDMInstanceHandle inInstance) = 0;
    virtual void SendGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph,
                                      Qt3DSDMSlideHandle inSlide) = 0;
};

class IAnimationCoreSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr ConnectAnimationCreated(
        const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
                                   Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectBeforeAnimationDeleted(
        const std::function<void(Qt3DSDMAnimationHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectAnimationDeleted(
        const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
                                   Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectKeyframeInserted(
        const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectBeforeKeyframeErased(const std::function<void(Qt3DSDMKeyframeHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectKeyframeErased(
        const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectBeforeAllKeyframesErased(
        const std::function<void(Qt3DSDMAnimationHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectKeyframeUpdated(
        const std::function<void(Qt3DSDMKeyframeHandle, const TKeyframe &)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectFirstKeyframeDynamicSet(
        const std::function<void(Qt3DSDMAnimationHandle, bool)> &inCallback) = 0;
};

class IAnimationCoreSignalSender : public ISignalItem
{
public:
    virtual void SendAnimationCreated(Qt3DSDMAnimationHandle inAnimation, Qt3DSDMSlideHandle inSlide,
                                      Qt3DSDMInstanceHandle inInstance,
                                      Qt3DSDMPropertyHandle inProperty, size_t inIndex,
                                      EAnimationType inAnimationType) = 0;
    virtual void SendBeforeAnimationDeleted(Qt3DSDMAnimationHandle inAnimation) = 0;
    virtual void SendAnimationDeleted(Qt3DSDMAnimationHandle inAnimation, Qt3DSDMSlideHandle inSlide,
                                      Qt3DSDMInstanceHandle inInstance,
                                      Qt3DSDMPropertyHandle inProperty, size_t inIndex,
                                      EAnimationType inAnimationType) = 0;
    virtual void SendKeyframeInserted(Qt3DSDMAnimationHandle inAnimation,
                                      Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) = 0;
    virtual void SendBeforeKeyframeErased(Qt3DSDMKeyframeHandle inAnimation) = 0;
    virtual void SendKeyframeErased(Qt3DSDMAnimationHandle inAnimation,
                                    Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) = 0;
    virtual void SendBeforeAllKeyframesErased(Qt3DSDMAnimationHandle inAnimation) = 0;
    virtual void SendKeyframeUpdated(Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) = 0;
    virtual void SendFirstKeyframeDynamicSet(Qt3DSDMAnimationHandle inAnimation,
                                             bool inKeyframeDynamic) = 0;
};

class IActionCoreSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr ConnectTriggerObjectSet(
        const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectTargetObjectSet(
        const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectEventSet(
        const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectHandlerSet(
        const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback) = 0;

    virtual TSignalConnectionPtr ConnectHandlerArgumentAdded(
        const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
                                   HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectHandlerArgumentRemoved(
        const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
                                   HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectHandlerArgumentValueSet(
        const std::function<void(Qt3DSDMHandlerArgHandle, const SValue &)> &inCallback) = 0;
};

class IActionCoreSignalSender : public ISignalItem
{
public:
    virtual void SendTriggerObjectSet(Qt3DSDMActionHandle inAction,
                                      SObjectRefType &inTriggerObject) = 0;
    virtual void SendTargetObjectSet(Qt3DSDMActionHandle inAction,
                                     SObjectRefType &inTargetObject) = 0;
    virtual void SendEventSet(Qt3DSDMActionHandle inAction, const wstring &inEventHandle) = 0;
    virtual void SendHandlerSet(Qt3DSDMActionHandle inAction, const wstring &inActionName) = 0;

    virtual void SendHandlerArgumentAdded(Qt3DSDMActionHandle inAction,
                                          Qt3DSDMHandlerArgHandle inHandlerArgument,
                                          const TCharStr &inName, HandlerArgumentType::Value inArgType,
                                          DataModelDataType::Value inValueType) = 0;
    virtual void SendHandlerArgumentRemoved(Qt3DSDMActionHandle inAction,
                                            Qt3DSDMHandlerArgHandle inHandlerArgument,
                                            const TCharStr &inName, HandlerArgumentType::Value inArgType,
                                            DataModelDataType::Value inValueType) = 0;
    virtual void SendHandlerArgumentValueSet(Qt3DSDMHandlerArgHandle inHandlerArgument,
                                             const SValue &inValue) = 0;
};

class IActionSystemSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr ConnectActionCreated(
        const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectActionDeleted(
        const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
            &inCallback) = 0;
};

class IActionSystemSignalSender : public ISignalItem
{
public:
    virtual void SendActionCreated(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
                                   Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendActionDeleted(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
                                   Qt3DSDMInstanceHandle inOwner) = 0;
};

class ICustomPropCoreSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr ConnectCustomPropertyCreated(
        const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomPropertyDeleted(
        const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomPropertyModified(
        const std::function<void(Qt3DSDMPropertyHandle)> &inCallback) = 0;

    virtual TSignalConnectionPtr ConnectCustomEventCreated(
        const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomEventDeleted(
        const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectCustomEventModified(const std::function<void(Qt3DSDMEventHandle)> &inCallback) = 0;

    virtual TSignalConnectionPtr ConnectCustomHandlerCreated(
        const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomHandlerDeleted(
        const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectCustomHandlerModified(const std::function<void(Qt3DSDMHandlerHandle)> &inCallback) = 0;

    virtual TSignalConnectionPtr ConnectCustomHandlerParamCreated(
        const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomHandlerParamDeleted(
        const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomHandlerParamModified(
        const std::function<void(Qt3DSDMHandlerParamHandle)> &inCallback) = 0;

    virtual TSignalConnectionPtr ConnectCustomReferencesModified(
        const std::function<void(Qt3DSDMInstanceHandle, const TCharStr &)> &inCallback) = 0;
};

class ICustomPropCoreSignalSender : public ISignalItem
{
public:
    virtual void SendCustomPropertyCreated(Qt3DSDMPropertyHandle inProp,
                                           Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomPropertyDeleted(Qt3DSDMPropertyHandle inProp,
                                           Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomPropertyModified(Qt3DSDMPropertyHandle inProp) = 0;

    virtual void SendCustomEventCreated(Qt3DSDMEventHandle inEvent,
                                        Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomEventDeleted(Qt3DSDMEventHandle inEvent,
                                        Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomEventModified(Qt3DSDMEventHandle inEvent) = 0;

    virtual void SendCustomHandlerCreated(Qt3DSDMHandlerHandle inHandler,
                                          Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomHandlerDeleted(Qt3DSDMHandlerHandle inHandler,
                                          Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomHandlerModified(Qt3DSDMHandlerHandle inHandler) = 0;

    virtual void SendCustomHandlerParamCreated(Qt3DSDMHandlerParamHandle inParameter,
                                               Qt3DSDMHandlerHandle inHandler) = 0;
    virtual void SendCustomHandlerParamDeleted(Qt3DSDMHandlerParamHandle inParameter,
                                               Qt3DSDMHandlerHandle inHandler) = 0;
    virtual void SendCustomHandlerParamModified(Qt3DSDMHandlerParamHandle inParameter) = 0;

    virtual void SendCustomReferencesModified(Qt3DSDMInstanceHandle inOwner,
                                              const TCharStr &inString) = 0;
};

class ISlideSystemSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr
    ConnectMasterCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectMasterDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectSlideCreated(
        const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectSlideDeleted(
        const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectSlideRearranged(
        const std::function<void(Qt3DSDMSlideHandle, int, int)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectInstanceAssociated(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectInstanceDissociated(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectPropertyLinked(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectPropertyUnlinked(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectActiveSlide(
        const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle, Qt3DSDMSlideHandle)>
            &inCallback) = 0;
};

class ISlideSystemSignalSender : public ISignalItem
{
public:
    virtual void SendMasterCreated(Qt3DSDMSlideHandle inMaster) = 0;
    virtual void SendMasterDeleted(Qt3DSDMSlideHandle inMaster) = 0;
    virtual void SendSlideCreated(Qt3DSDMSlideHandle inMaster, int inIndex,
                                  Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendSlideDeleted(Qt3DSDMSlideHandle inMaster, int inIndex,
                                  Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendSlideRearranged(Qt3DSDMSlideHandle inMaster, int inOldIndex,
                                     int inNewIndex) = 0;
    virtual void SendInstanceAssociated(Qt3DSDMSlideHandle inMaster,
                                        Qt3DSDMInstanceHandle inInstance) = 0;
    virtual void SendInstanceDissociated(Qt3DSDMSlideHandle inMaster,
                                         Qt3DSDMInstanceHandle inInstance) = 0;
    virtual void SendPropertyLinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
                                    Qt3DSDMPropertyHandle inProperty) = 0;
    virtual void SendPropertyUnlinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
                                      Qt3DSDMPropertyHandle inProperty) = 0;
    virtual void SendActiveSlide(Qt3DSDMSlideHandle inMaster, int inIndex,
                                 Qt3DSDMSlideHandle inOldSlide, Qt3DSDMSlideHandle inNewSlide) = 0;
};

class IStudioFullSystemSignalProvider : public ISignalItem
{
public:
    virtual TSignalConnectionPtr
    ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectSlideRearranged(
        const std::function<void(Qt3DSDMSlideHandle, int, int)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectBeginComponentSeconds(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectComponentSeconds(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectPropertyLinked(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectPropertyUnlinked(
        const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectActiveSlide(
        const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) = 0;

    virtual TSignalConnectionPtr
    ConnectInstanceCreated(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;

    virtual TSignalConnectionPtr
    ConnectAnimationCreated(const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMInstanceHandle,
                                                       Qt3DSDMPropertyHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectAnimationDeleted(const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMInstanceHandle,
                                                       Qt3DSDMPropertyHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectKeyframeInserted(
        const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectKeyframeErased(
        const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectKeyframeUpdated(const std::function<void(Qt3DSDMKeyframeHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectFirstKeyframeDynamicSet(
        const std::function<void(Qt3DSDMAnimationHandle, bool)> &inCallback) = 0;

    virtual TSignalConnectionPtr ConnectInstancePropertyValue(
        const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> &inCallback) = 0;

    virtual TSignalConnectionPtr ConnectActionCreated(
        const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectActionDeleted(
        const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
            &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectTriggerObjectSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectTargetObjectSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectEventSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectHandlerSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectHandlerArgumentValueSet(
        const std::function<void(Qt3DSDMHandlerArgHandle)> &inCallback) = 0;

    virtual TSignalConnectionPtr ConnectCustomPropertyCreated(
        const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomPropertyDeleted(
        const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomPropertyModified(
        const std::function<void(Qt3DSDMPropertyHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomEventCreated(
        const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomEventDeleted(
        const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectCustomEventModified(const std::function<void(Qt3DSDMEventHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomHandlerCreated(
        const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomHandlerDeleted(
        const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr
    ConnectCustomHandlerModified(const std::function<void(Qt3DSDMHandlerHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomHandlerParamCreated(
        const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomHandlerParamDeleted(
        const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomHandlerParamModified(
        const std::function<void(Qt3DSDMHandlerParamHandle)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectCustomReferencesModified(
        const std::function<void(Qt3DSDMInstanceHandle, const TCharStr &)> &inCallback) = 0;
    virtual TSignalConnectionPtr ConnectControlledToggled(
        const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> &inCallback) = 0;
};

class IStudioFullSystemSignalSender : public ISignalItem
{
public:
    virtual void SendSlideCreated(Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendSlideDeleted(Qt3DSDMSlideHandle inSlide) = 0;
    virtual void SendSlideRearranged(Qt3DSDMSlideHandle inMaster, int inOldIndex,
                                     int inNewIndex) = 0;
    virtual void SendComponentSeconds(Qt3DSDMSlideHandle inMaster) = 0;
    virtual void SendBeginComponentSeconds(Qt3DSDMSlideHandle inMaster) = 0;
    virtual void SendPropertyLinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
                                    Qt3DSDMPropertyHandle inProperty) = 0;
    virtual void SendPropertyUnlinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
                                      Qt3DSDMPropertyHandle inProperty) = 0;
    virtual void SendActiveSlide(Qt3DSDMSlideHandle inMaster, int inIndex,
                                 Qt3DSDMSlideHandle inSlide) = 0;

    virtual void SendInstanceCreated(Qt3DSDMInstanceHandle inInstance) = 0;
    virtual void SendInstanceDeleted(Qt3DSDMInstanceHandle inInstance) = 0;

    virtual void SendAnimationCreated(Qt3DSDMAnimationHandle inAnimation,
                                      Qt3DSDMInstanceHandle inInstance,
                                      Qt3DSDMPropertyHandle inProperty) = 0;
    virtual void SendAnimationDeleted(Qt3DSDMAnimationHandle inAnimation,
                                      Qt3DSDMInstanceHandle inInstance,
                                      Qt3DSDMPropertyHandle inProperty) = 0;
    virtual void SendKeyframeInserted(Qt3DSDMAnimationHandle inAnimation,
                                      Qt3DSDMKeyframeHandle inKeyframe) = 0;
    virtual void SendKeyframeErased(Qt3DSDMAnimationHandle inAnimation,
                                    Qt3DSDMKeyframeHandle inKeyframe) = 0;
    virtual void SendKeyframeUpdated(Qt3DSDMKeyframeHandle inKeyframe) = 0;
    virtual void SendConnectFirstKeyframeDynamicSet(Qt3DSDMAnimationHandle inAnimation,
                                                    bool inDynamic) = 0;

    virtual void SendInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
                                           Qt3DSDMPropertyHandle inProperty) = 0;

    virtual void SendActionCreated(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
                                   Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendActionDeleted(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
                                   Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendTriggerObjectSet(Qt3DSDMActionHandle inAction) = 0;
    virtual void SendTargetObjectSet(Qt3DSDMActionHandle inAction) = 0;
    virtual void SendEventSet(Qt3DSDMActionHandle inAction) = 0;
    virtual void SendHandlerSet(Qt3DSDMActionHandle inAction) = 0;
    virtual void SendHandlerArgumentValueSet(Qt3DSDMHandlerArgHandle inHandlerArgument) = 0;

    virtual void SendCustomPropertyCreated(Qt3DSDMPropertyHandle inProp,
                                           Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomPropertyDeleted(Qt3DSDMPropertyHandle inProp,
                                           Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomPropertyModified(Qt3DSDMPropertyHandle inProp) = 0;
    virtual void SendCustomEventCreated(Qt3DSDMEventHandle inEvent,
                                        Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomEventDeleted(Qt3DSDMEventHandle inEvent,
                                        Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomEventModified(Qt3DSDMEventHandle inEvent) = 0;
    virtual void SendCustomHandlerCreated(Qt3DSDMHandlerHandle inHandler,
                                          Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomHandlerDeleted(Qt3DSDMHandlerHandle inHandler,
                                          Qt3DSDMInstanceHandle inOwner) = 0;
    virtual void SendCustomHandlerModified(Qt3DSDMHandlerHandle inHandler) = 0;
    virtual void SendCustomHandlerParamCreated(Qt3DSDMHandlerParamHandle inParameter,
                                               Qt3DSDMHandlerHandle inHandler) = 0;
    virtual void SendCustomHandlerParamDeleted(Qt3DSDMHandlerParamHandle inParameter,
                                               Qt3DSDMHandlerHandle inHandler) = 0;
    virtual void SendCustomHandlerParamModified(Qt3DSDMHandlerParamHandle inParameter) = 0;
    virtual void SendCustomReferencesModified(Qt3DSDMInstanceHandle inOwner,
                                              const TCharStr &inString) = 0;
    virtual void SendControlledToggled(Qt3DSDMInstanceHandle inInstance,
                                       Qt3DSDMPropertyHandle inProperty) = 0;
};

// Use this if you want to register for only a specific instance or specific property
template <typename TTransaction>
inline void MaybackCallbackInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
                                                 Qt3DSDMPropertyHandle inProperty,
                                                 Qt3DSDMInstanceHandle inDesiredInstance,
                                                 Qt3DSDMPropertyHandle inDesiredProperty,
                                                 TTransaction inCallback)
{
    if ((!inDesiredInstance.Valid() || (inDesiredInstance == inInstance))
        && (!inDesiredProperty.Valid() || (inDesiredProperty == inProperty)))
        inCallback(inInstance, inProperty);
}

void SetDataModelSignalsEnabled(bool inEnabled);
// Defaults to true
bool AreDataModelSignalsEnabled();
}

#endif