summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaj Grönholm <kaj.gronholm@qt.io>2020-09-16 17:30:39 +0300
committerKaj Grönholm <kaj.gronholm@qt.io>2020-09-21 07:47:10 +0300
commit7761f86cec898a0a38ed2e3adddc5ef0fdbdea89 (patch)
treefc08bf2827a5fa797e380408e60459e7d3fc2cd3
parent05eb20d0b7e46101dd79d3f5788681f5a2a9446e (diff)
Add support for onActivate and onDeactivate Actions
Add new Action types onActivate and onDeactivate. When assigned, these will get triggered at object timeline start and end times. Using these it is possible to trigger events at specific times during animation. Example and autotest case included. Task-number: QT3DS-4128 Change-Id: Ib973b479a1de47745089d41c5764c2a1747ec95e Reviewed-by: Antti Määttä <antti.maatta@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--examples/studio3d/simpleqml/main.qml8
-rw-r--r--examples/studio3d/simpleqml/presentation/barrel.uip67
-rw-r--r--res/DataModelMetadata/en-us/MetaData.xml2
-rw-r--r--src/runtime/Qt3DSActivationManager.cpp10
-rw-r--r--src/runtime/Qt3DSApplication.cpp7
-rw-r--r--src/runtime/Qt3DSApplication.h1
-rw-r--r--src/runtime/Qt3DSElementSystem.h4
-rw-r--r--src/runtime/Qt3DSInputEventTypes.h3
-rw-r--r--src/runtime/Qt3DSKernelTypes.h5
-rw-r--r--src/runtime/Qt3DSLogicSystem.cpp10
-rw-r--r--tests/auto/studio3d/q3dssurfaceviewer/tst_q3dssurfaceviewer.cpp36
-rw-r--r--tests/auto/studio3d/shared/presentation/activateactions.uip55
-rw-r--r--tests/auto/studio3d/shared/shared_presentations.h1
-rw-r--r--tests/auto/studio3d/shared/shared_presentations.qrc1
14 files changed, 178 insertions, 32 deletions
diff --git a/examples/studio3d/simpleqml/main.qml b/examples/studio3d/simpleqml/main.qml
index abdcb79..4cbea83 100644
--- a/examples/studio3d/simpleqml/main.qml
+++ b/examples/studio3d/simpleqml/main.qml
@@ -77,7 +77,7 @@ Rectangle {
Presentation {
id: s3dpres
source: "qrc:/presentation/barrel.uia"
- onCustomSignalEmitted: customSignalName.text = Date.now() + ": " + name
+ onCustomSignalEmitted: customSignalName.text = Date.now() + ": customSignal:" + name
onSlideEntered: slideEnter.text = "Entered slide " + name + "(index " + index + ") on " + elementPath
onSlideExited: slideExit.text = "Exited slide " + name + "(index " + index + ") on " + elementPath
@@ -218,19 +218,19 @@ Rectangle {
id: customSignalName
anchors.bottom: parent.bottom
anchors.left: fpsCount.right
- anchors.leftMargin: 8
+ anchors.leftMargin: 30
}
Text {
id: slideEnter
anchors.bottom: parent.bottom
anchors.left: customSignalName.right
- anchors.leftMargin: 8
+ anchors.leftMargin: 30
}
Text {
id: slideExit
anchors.bottom: parent.bottom
anchors.left: slideEnter.right
- anchors.leftMargin: 8
+ anchors.leftMargin: 30
}
Button {
id: nextSlideByIndex
diff --git a/examples/studio3d/simpleqml/presentation/barrel.uip b/examples/studio3d/simpleqml/presentation/barrel.uip
index 7b9b2fb..c36f0e5 100644
--- a/examples/studio3d/simpleqml/presentation/barrel.uip
+++ b/examples/studio3d/simpleqml/presentation/barrel.uip
@@ -1,47 +1,54 @@
<?xml version="1.0" encoding="UTF-8" ?>
<UIP version="6" >
<Project >
- <ProjectSettings author="" company="" presentationWidth="800" presentationHeight="480" maintainAspect="False" preferKtx="False" >
+ <ProjectSettings author="" company="" presentationWidth="800" presentationHeight="480" maintainAspect="False" preferKtx="False" flipCompressedTextures="False" >
<CustomColors count="16" >#ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff</CustomColors>
</ProjectSettings>
+ <BufferData >
+ <ImageBuffer sourcepath="maps/barrel_barrel_Diffuse.png" hasTransparency="False" hasOpaquePixels="True" />
+ <ImageBuffer sourcepath="maps/barrel_barrel_Emissive.png" hasTransparency="False" hasOpaquePixels="True" />
+ <ImageBuffer sourcepath="maps/barrel_barrel_Normal.png" hasTransparency="False" hasOpaquePixels="True" />
+ <ImageBuffer sourcepath="maps/barrel_barrel_Specular.png" hasTransparency="False" hasOpaquePixels="True" />
+ </BufferData>
<Graph >
- <Scene id="Scene" >
- <Layer id="Layer" variants="" >
- <Camera id="Camera" />
- <Light id="Light" />
- <Model id="Barrel" variants="" >
- <Material id="Material" >
- <Image id="Material_diffusemap" />
- <Image id="Material_normalmap" />
- <Image id="Material_emissivemap" />
- <Image id="Material_specularmap" />
+ <Scene id="Scene_u51457" >
+ <Layer id="Layer_u16894" variants="" >
+ <Camera id="Camera_u20801" />
+ <Light id="Light_u60375" />
+ <Model id="Barrel_u17933" variants="" >
+ <Material id="Material_u43207" >
+ <Image id="Material_diffusemap_u25218" />
+ <Image id="Material_normalmap_u31730" />
+ <Image id="Material_emissivemap_u20392" />
+ <Image id="Material_specularmap_u63189" />
</Material>
</Model>
- <Text id="Text" variants="" />
- <Text id="Text2" variants="" />
+ <Text id="Text_u12278" variants="" />
+ <Text id="Text2_u28451" variants="" />
+ <Group id="Group_u19473" variants="" />
</Layer>
</Scene>
</Graph>
<Logic >
- <State name="Master Slide" component="#Scene" >
- <Add ref="#Layer" />
- <Add ref="#Camera" />
- <Add ref="#Light" />
- <State id="Scene-Slide1" name="Slide1" playmode="Looping" >
- <Add ref="#Barrel" name="Barrel" position="0 -42 -483" rotation="90 0 0" scale="100 100 100" sourcepath=".\barrel\meshes\Barrel.mesh#1" >
+ <State name="Master Slide" component="#Scene_u51457" >
+ <Add ref="#Layer_u16894" />
+ <Add ref="#Camera_u20801" />
+ <Add ref="#Light_u60375" />
+ <State id="Scene-Slide1_u1119" name="Slide1" playmode="Looping" >
+ <Add ref="#Barrel_u17933" name="Barrel" position="0 -42 -483" rotation="90 0 0" scale="100 100 100" sourcepath=".\barrel\meshes\Barrel.mesh#1" >
<AnimationTrack property="opacity" type="EaseInOut" />
<AnimationTrack property="rotation.x" type="EaseInOut" >0 90 100 100 5 64 100 100 10 90 100 100</AnimationTrack>
<AnimationTrack property="rotation.y" type="EaseInOut" >0 0 100 100 5 -302 100 100 10 0 100 100</AnimationTrack>
<AnimationTrack property="rotation.z" type="EaseInOut" >0 0 100 100 5 0 100 100 10 0 100 100</AnimationTrack>
</Add>
- <Add ref="#Material" bumpamount="0" diffuse="1 1 1 1" diffusemap="#Material_diffusemap" emissivemap="#Material_emissivemap" fresnelPower="25" normalmap="#Material_normalmap" specularamount="4" specularmap="#Material_specularmap" specularmodel="Default" specularroughness="0.001" >
+ <Add ref="#Material_u43207" bumpamount="0" diffuse="1 1 1 1" diffusemap="#Material_diffusemap_u25218" emissivemap="#Material_emissivemap_u20392" fresnelPower="25" normalmap="#Material_normalmap_u31730" specularamount="4" specularmap="#Material_specularmap_u63189" specularmodel="Default" specularroughness="0.001" >
<AnimationTrack property="bumpamount" type="EaseInOut" >0 0 100 100 5 1 100 100</AnimationTrack>
</Add>
- <Add ref="#Material_diffusemap" sourcepath=".\maps\barrel_barrel_Diffuse.png" />
- <Add ref="#Material_normalmap" sourcepath=".\maps\barrel_barrel_Normal.png" />
- <Add ref="#Material_emissivemap" sourcepath=".\maps\barrel_barrel_Emissive.png" />
- <Add ref="#Material_specularmap" sourcepath=".\maps\barrel_barrel_Specular.png" />
- <Add ref="#Text" name="Text" font="Arimo-Regular" position="-486.418 297.128 50.5569" textcolor="0 1 0 1" textstring="Barrel!" tracking="0" >
+ <Add ref="#Material_diffusemap_u25218" sourcepath=".\maps\barrel_barrel_Diffuse.png" />
+ <Add ref="#Material_normalmap_u31730" sourcepath=".\maps\barrel_barrel_Normal.png" />
+ <Add ref="#Material_emissivemap_u20392" sourcepath=".\maps\barrel_barrel_Emissive.png" />
+ <Add ref="#Material_specularmap_u63189" sourcepath=".\maps\barrel_barrel_Specular.png" />
+ <Add ref="#Text_u12278" name="Text" font="Arimo-Regular" position="-486.418 297.128 50.5569" textcolor="0 1 0 1" textstring="Barrel!" tracking="0" >
<AnimationTrack property="opacity" type="EaseInOut" >0 100 100 100 5.009 43.75 100 100 10 100 100 100</AnimationTrack>
<AnimationTrack property="rotation.x" type="EaseInOut" >0 0 100 100 4.997 0 100 100 5.009 0 100 100 10 0 100 100</AnimationTrack>
<AnimationTrack property="rotation.y" type="EaseInOut" >0 0 100 100 4.997 0 100 100 5.009 0 100 100 10 360 100 100</AnimationTrack>
@@ -50,7 +57,15 @@
<AnimationTrack property="textcolor.y" type="EaseInOut" >0 1 100 100 5.009 0.235294 100 100 10 1 100 100</AnimationTrack>
<AnimationTrack property="textcolor.z" type="EaseInOut" >0 0 100 100 5.009 0.333333 100 100 10 0 100 100</AnimationTrack>
</Add>
- <Add ref="#Text2" name="Text2" controlledproperty="$di_text textstring" font="Arimo-Regular" position="437.342 256.921 0" />
+ <Add ref="#Text2_u28451" name="Text2" controlledproperty="$di_text textstring" font="Arimo-Regular" position="437.342 256.921 0" />
+ <Add ref="#Group_u19473" name="Group" endtime="3083" starttime="1433" >
+ <Action id="Group-Action_u35574" eyeball="True" triggerObject="#Group_u19473" event="onActivate" targetObject="#Group_u19473" handler="Emit Signal" >
+ <HandlerArgument name="Signal Name" type="String" argtype="Signal" value="CustomTestSignal1" />
+ </Action>
+ <Action id="Group-Action_u20930" eyeball="True" triggerObject="#Group_u19473" event="onDeactivate" targetObject="#Group_u19473" handler="Emit Signal" >
+ <HandlerArgument name="Signal Name" type="String" argtype="Signal" />
+ </Action>
+ </Add>
</State>
</State>
</Logic>
diff --git a/res/DataModelMetadata/en-us/MetaData.xml b/res/DataModelMetadata/en-us/MetaData.xml
index c5d2458..b793df7 100644
--- a/res/DataModelMetadata/en-us/MetaData.xml
+++ b/res/DataModelMetadata/en-us/MetaData.xml
@@ -49,6 +49,8 @@
<Event name="onPressureDown" category="Gesture" />
<Event name="onPressureUp" category="Gesture" />
<Event name="onTap" category="Gesture" />
+ <Event name="onActivate" category="Time" />
+ <Event name="onDeactivate" category="Time" />
<!--
<Event name="onDoubleTap" category="Gesture" />
<Event name="onSingleTap" category="Gesture" />
diff --git a/src/runtime/Qt3DSActivationManager.cpp b/src/runtime/Qt3DSActivationManager.cpp
index 664e3a2..b1965fa 100644
--- a/src/runtime/Qt3DSActivationManager.cpp
+++ b/src/runtime/Qt3DSActivationManager.cpp
@@ -46,6 +46,7 @@
#include "foundation/Qt3DSSync.h"
#include "Qt3DSRenderThreadPool.h"
#include "foundation/Qt3DSSimpleTypes.h"
+#include "Qt3DSInputEventTypes.h"
using namespace qt3ds::runtime;
using namespace qt3ds::runtime::element;
@@ -517,6 +518,15 @@ struct STimeContext
Mutex &inElementAccessMutex, bool &scriptBufferRequiresSort,
bool inIsActive)
{
+
+ if (inNode.Flags().HasActivityAction() && inNode.GetBelongedPresentation()) {
+ // If node has activity changing actions enabled, fire them
+ if (inIsActive)
+ inNode.GetBelongedPresentation()->FireEvent(Q3DStudio::ON_ACTIVATE, &inNode);
+ else
+ inNode.GetBelongedPresentation()->FireEvent(Q3DStudio::ON_DEACTIVATE, &inNode);
+ }
+
Mutex::ScopedLock __locker(inElementAccessMutex);
TElementAndSortKey theKey(&inNode, inNode.Depth());
if (inIsActive) {
diff --git a/src/runtime/Qt3DSApplication.cpp b/src/runtime/Qt3DSApplication.cpp
index 7b4d625..6bc7b1b 100644
--- a/src/runtime/Qt3DSApplication.cpp
+++ b/src/runtime/Qt3DSApplication.cpp
@@ -2326,6 +2326,13 @@ bool IApplication::isPickingEvent(TEventCommandHash event)
|| event == ON_GROUPEDMOUSEOUT);
}
+// Checks if the event comes from timeline becoming (de)active
+bool IApplication::isActivityEvent(TEventCommandHash event)
+{
+ return (event == ON_ACTIVATE
+ || event == ON_DEACTIVATE);
+}
+
QDebug operator<<(QDebug debug, const DataInOutAttribute &value)
{
QDebugStateSaver saver(debug);
diff --git a/src/runtime/Qt3DSApplication.h b/src/runtime/Qt3DSApplication.h
index fd9c871..fd7f027 100644
--- a/src/runtime/Qt3DSApplication.h
+++ b/src/runtime/Qt3DSApplication.h
@@ -254,6 +254,7 @@ public:
static IApplication &CreateApplicationCore(Q3DStudio::IRuntimeFactoryCore &inFactory,
const char8_t *inApplicationDirectory);
static bool isPickingEvent(Q3DStudio::TEventCommandHash event);
+ static bool isActivityEvent(Q3DStudio::TEventCommandHash event);
// This will print out and reset the startup perf logs
virtual void OutputPerfLoggingData() = 0;
diff --git a/src/runtime/Qt3DSElementSystem.h b/src/runtime/Qt3DSElementSystem.h
index a633ea8..eeafb5d 100644
--- a/src/runtime/Qt3DSElementSystem.h
+++ b/src/runtime/Qt3DSElementSystem.h
@@ -246,6 +246,10 @@ namespace runtime {
{
return this->operator&(Q3DStudio::ELEMENTFLAG_TIMELINE);
}
+ bool HasActivityAction() const
+ {
+ return this->operator&(Q3DStudio::ELEMENTFLAG_ACTIVITYACTIONENABLED);
+ }
};
typedef eastl::pair<SPropertyDesc, Q3DStudio::UVariant *> TPropertyDescAndValuePtr;
diff --git a/src/runtime/Qt3DSInputEventTypes.h b/src/runtime/Qt3DSInputEventTypes.h
index 0b3c398..fcf1d23 100644
--- a/src/runtime/Qt3DSInputEventTypes.h
+++ b/src/runtime/Qt3DSInputEventTypes.h
@@ -46,6 +46,9 @@ const TEventCommandHash ON_MOUSEOUT = CHash::HashEventCommand("onMouseOut");
const TEventCommandHash ON_GROUPEDMOUSEOVER = CHash::HashEventCommand("onGroupedMouseOver");
const TEventCommandHash ON_GROUPEDMOUSEOUT = CHash::HashEventCommand("onGroupedMouseOut");
+const TEventCommandHash ON_ACTIVATE = CHash::HashEventCommand("onActivate");
+const TEventCommandHash ON_DEACTIVATE = CHash::HashEventCommand("onDeactivate");
+
// Crude hack to pretend mouse events are gesture events, since gesture events are all you
// can specify in studio.
// TODO: Fix properly, preferably by bringing back gesture support
diff --git a/src/runtime/Qt3DSKernelTypes.h b/src/runtime/Qt3DSKernelTypes.h
index 866196d..2e6d769 100644
--- a/src/runtime/Qt3DSKernelTypes.h
+++ b/src/runtime/Qt3DSKernelTypes.h
@@ -143,7 +143,10 @@ enum EElementFlag {
// Flags used by the activation manager
ELEMENTFLAG_AMGR_TIMEACTIVE = 1 << 13, ///< Is the element alive according to time information
- ELEMENTFLAG_CONTROLLED_ACTIVE = 1 << 14 ///< Is the element alive based on datainput control
+ ELEMENTFLAG_CONTROLLED_ACTIVE = 1 << 14, ///< Is the element alive based on datainput control
+
+ ELEMENTFLAG_ACTIVITYACTIONENABLED = 1 << 15, ///< Activity changing action has been registered on this element
+
};
// Four byte aligned time unit structure.
diff --git a/src/runtime/Qt3DSLogicSystem.cpp b/src/runtime/Qt3DSLogicSystem.cpp
index 4a8341b..742764c 100644
--- a/src/runtime/Qt3DSLogicSystem.cpp
+++ b/src/runtime/Qt3DSLogicSystem.cpp
@@ -218,7 +218,7 @@ struct SLogicSystem : public ILogicSystem
if (logicIter != m_LogicKeys.end()) {
for (TLogicDataList::iterator listIter = logicIter->second.begin(),
listEnd = logicIter->second.end();
- listIter != listEnd; ++listIter)
+ listIter != listEnd; ++listIter) {
if (listIter->m_Id == inActionIndex) {
listIter->m_Active = inActive;
if (IApplication::isPickingEvent(logicIter->first.m_CommandHash)) {
@@ -226,8 +226,16 @@ struct SLogicSystem : public ILogicSystem
logicIter->first.m_ElementHandle);
if (theElement && inActive)
theElement->SetFlag(Q3DStudio::ELEMENTFLAG_PICKENABLED, true);
+ } else if (IApplication::isActivityEvent(logicIter->first.m_CommandHash)) {
+ SElement *theElement = inElemAllocator.FindElementByHandle(
+ logicIter->first.m_ElementHandle);
+ if (theElement && inActive) {
+ theElement->SetFlag(Q3DStudio::ELEMENTFLAG_ACTIVITYACTIONENABLED,
+ true);
+ }
}
}
+ }
}
}
}
diff --git a/tests/auto/studio3d/q3dssurfaceviewer/tst_q3dssurfaceviewer.cpp b/tests/auto/studio3d/q3dssurfaceviewer/tst_q3dssurfaceviewer.cpp
index 7197b49..6133577 100644
--- a/tests/auto/studio3d/q3dssurfaceviewer/tst_q3dssurfaceviewer.cpp
+++ b/tests/auto/studio3d/q3dssurfaceviewer/tst_q3dssurfaceviewer.cpp
@@ -61,6 +61,8 @@ private slots:
void testBasics();
void testSourceChange_data();
void testSourceChange();
+ void testActivateActions_data();
+ void testActivateActions();
void testSizeChange_data();
void testSizeChange();
void testUpdateInterval_data();
@@ -368,6 +370,40 @@ void tst_Q3DSSurfaceViewer::testSourceChange()
checkPixel(m_viewer, Qt::red);
}
+void tst_Q3DSSurfaceViewer::testActivateActions_data()
+{
+ testBasics_data();
+}
+
+void tst_Q3DSSurfaceViewer::testActivateActions()
+{
+ QFETCH(bool, isWindow);
+
+ if (isWindow)
+ createWindowAndViewer(m_viewer, ACTIVATEACTIONS);
+ else
+ createOffscreenAndViewer(m_viewer, ACTIVATEACTIONS);
+
+ QSignalSpy spy(m_viewer->presentation(), &Q3DSPresentation::customSignalEmitted);
+
+ QVERIFY(spy.isValid());
+
+ // This presentations sends custom signals at 1000ms and at 3000ms.
+ // At same times it also changes scene color using activate actions.
+ QCOMPARE(spy.count(), 0);
+ QImage image1 = m_viewer->grab();
+
+ QTest::qWait(2000);
+ QCOMPARE(spy.count(), 1);
+ QImage image2 = m_viewer->grab();
+ QVERIFY(image1 != image2);
+
+ QTest::qWait(2000);
+ QCOMPARE(spy.count(), 2);
+ QImage image3 = m_viewer->grab();
+ QVERIFY(image1 == image3);
+}
+
void tst_Q3DSSurfaceViewer::testSizeChange_data()
{
testBasics_data();
diff --git a/tests/auto/studio3d/shared/presentation/activateactions.uip b/tests/auto/studio3d/shared/presentation/activateactions.uip
new file mode 100644
index 0000000..52ca81a
--- /dev/null
+++ b/tests/auto/studio3d/shared/presentation/activateactions.uip
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<UIP version="6" >
+ <Project >
+ <ProjectSettings author="" company="" presentationWidth="800" presentationHeight="480" maintainAspect="False" preferKtx="False" flipCompressedTextures="False" >
+ <CustomColors count="16" >#969696 #780000 #ff0055 #ffffff #0a0a0a #ffffff #a0a8b2 #ffffff #ff643a #ffffff #4694ff #ffffff #ff0800 #ffffff #280000 #ffffff</CustomColors>
+ </ProjectSettings>
+ <Graph >
+ <Scene id="Scene_u31923" backgroundcolor="1 0 0 1" bgcolorenable="False" >
+ <Layer id="Layer_u40191" variants="" >
+ <Camera id="Camera_u60961" />
+ <Light id="Light_u46987" />
+ <Model id="Cube_u48840" variants="" >
+ <ReferencedMaterial id="Default_u50569" name="Default" />
+ </Model>
+ <Group id="Events1_u28102" variants="" />
+ <Group id="Events2_u17296" variants="" />
+ </Layer>
+ <Material id="__Container_u55481" >
+ <Material id="materials//Default_u19189" />
+ </Material>
+ </Scene>
+ </Graph>
+ <Logic >
+ <State name="Master Slide" component="#Scene_u31923" >
+ <Add ref="#Layer_u40191" />
+ <Add ref="#Camera_u60961" />
+ <Add ref="#Light_u46987" />
+ <Add ref="#__Container_u55481" name="__Container" />
+ <Add ref="#materials//Default_u19189" name="materials//Default" />
+ <State id="Scene-Slide1_u54514" name="Slide1" >
+ <Add ref="#Cube_u48840" name="Cube" rotation="20 360 20" sourcepath="#Cube" />
+ <Add ref="#Default_u50569" name="Default" referencedmaterial="#materials//Default_u19189" sourcepath="/Default" />
+ <Add ref="#Events1_u28102" name="Events1" endtime="3000" starttime="1000" >
+ <Action id="Events1-Action_u22921" eyeball="True" triggerObject="#Events1_u28102" event="onActivate" targetObject="#Scene_u31923" handler="Set Property" >
+ <HandlerArgument name="Property Name" type="String" argtype="Property" value="bgcolorenable" />
+ <HandlerArgument name="Property Value" type="Bool" argtype="Dependent" value="True" />
+ </Action>
+ <Action id="Events1-Action_u62890" eyeball="True" triggerObject="#Events1_u28102" event="onDeactivate" targetObject="#Scene_u31923" handler="Set Property" >
+ <HandlerArgument name="Property Name" type="String" argtype="Property" value="bgcolorenable" />
+ <HandlerArgument name="Property Value" type="Bool" argtype="Dependent" />
+ </Action>
+ </Add>
+ <Add ref="#Events2_u17296" name="Events2" endtime="3000" starttime="1000" >
+ <Action id="Events2-Action_u55956" eyeball="True" triggerObject="#Events2_u17296" event="onActivate" targetObject="#Events2_u17296" handler="Emit Signal" >
+ <HandlerArgument name="Signal Name" type="String" argtype="Signal" value="mySignal1" />
+ </Action>
+ <Action id="Events2-Action_u17879" eyeball="True" triggerObject="#Events2_u17296" event="onDeactivate" targetObject="#Events2_u17296" handler="Emit Signal" >
+ <HandlerArgument name="Signal Name" type="String" argtype="Signal" value="mySignal2" />
+ </Action>
+ </Add>
+ </State>
+ </State>
+ </Logic>
+ </Project>
+</UIP>
diff --git a/tests/auto/studio3d/shared/shared_presentations.h b/tests/auto/studio3d/shared/shared_presentations.h
index 6d38273..af9bd87 100644
--- a/tests/auto/studio3d/shared/shared_presentations.h
+++ b/tests/auto/studio3d/shared/shared_presentations.h
@@ -37,3 +37,4 @@ const QUrl SETTINGS = QUrl(QStringLiteral("qrc:/settings.uip"));
const QUrl MULTISLIDE = QUrl(QStringLiteral("qrc:/multislide.uip"));
const QUrl MOUSE = QUrl(QStringLiteral("qrc:/mouse.uip"));
const QUrl DATAINPUT = QUrl(QStringLiteral("qrc:/datainput.uia"));
+const QUrl ACTIVATEACTIONS = QUrl(QStringLiteral("qrc:/activateactions.uip"));
diff --git a/tests/auto/studio3d/shared/shared_presentations.qrc b/tests/auto/studio3d/shared/shared_presentations.qrc
index 25dd40e..c55f2bc 100644
--- a/tests/auto/studio3d/shared/shared_presentations.qrc
+++ b/tests/auto/studio3d/shared/shared_presentations.qrc
@@ -12,5 +12,6 @@
<file alias="datainput.uia">presentation/datainput.uia</file>
<file alias="datainput_sub.uip">presentation/datainput_sub.uip</file>
<file>maps/OpenfootageNET_garage-512.hdr</file>
+ <file alias="activateactions.uip">presentation/activateactions.uip</file>
</qresource>
</RCC>