summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaj Grönholm <kaj.gronholm@qt.io>2020-09-18 14:40:33 +0300
committerKaj Grönholm <kaj.gronholm@qt.io>2020-09-25 11:04:22 +0300
commit98d888b6beeda9e301625ecba8e377cf552e7231 (patch)
tree2201c7ee29accc46d78816c2f047b1e784a73df0
parent3bcbc804004d293eba409b5e65ff5c5e38c572fe (diff)
Improve timeline signal actionsv2.8.0-beta1
- Support new signal type object with icons. Bump generated UIP version to 7. - When creating a signal, also create initial onActivate action. - Don't show basic node properties for signals, only the name. - When adding new action to signal, default to onActivate and emit signal. - Show small ticks on timeline bar if onActivate or onDeactivate actions have been set to the object. Task-number: QT3DS-4165 Change-Id: I16d1129536ac4d22c23c27bbc95741aa66adf597 Reviewed-by: Antti Määttä <antti.maatta@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp12
-rw-r--r--src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h4
-rw-r--r--src/Authoring/Client/Code/Core/Doc/Doc.cpp2
-rw-r--r--src/Authoring/Client/Code/Core/Doc/IDocumentReader.h2
-rw-r--r--src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.cpp13
-rw-r--r--src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.h1
-rw-r--r--src/Authoring/Client/Code/Core/Utility/StudioPreferences.cpp7
-rw-r--r--src/Authoring/Client/Code/Core/Utility/StudioPreferences.h1
-rw-r--r--src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.cpp2
-rw-r--r--src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.h6
-rw-r--r--src/Authoring/Qt3DStudio/DragAndDrop/BasicObjectDropSource.cpp14
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Action/ActionView.cpp13
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/BasicObjects/BasicObjectsModel.cpp1
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp4
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/ITimelineItem.h10
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp28
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h1
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp2
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineConstants.h1
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.cpp13
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.h1
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp12
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.cpp16
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.h3
-rw-r--r--src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp1
-rw-r--r--src/Authoring/Qt3DStudio/images.qrc6
-rw-r--r--src/Authoring/Qt3DStudio/images/Asset-Signal-Normal.pngbin0 -> 424 bytes
-rw-r--r--src/Authoring/Qt3DStudio/images/Asset-Signal-Normal@2x.pngbin0 -> 915 bytes
-rw-r--r--src/Authoring/Qt3DStudio/images/Objects-Signal-Disabled.pngbin0 -> 1562 bytes
-rw-r--r--src/Authoring/Qt3DStudio/images/Objects-Signal-Disabled@2x.pngbin0 -> 1829 bytes
-rw-r--r--src/Authoring/Qt3DStudio/images/Objects-Signal-Normal.pngbin0 -> 2099 bytes
-rw-r--r--src/Authoring/Qt3DStudio/images/Objects-Signal-Normal@2x.pngbin0 -> 2466 bytes
32 files changed, 170 insertions, 6 deletions
diff --git a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
index 95540fe6..d0da3c6c 100644
--- a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
+++ b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
@@ -81,6 +81,7 @@ CClientDataModelBridge::CClientDataModelBridge(
, m_Camera(inDefinitions->m_Camera)
, m_Text(inDefinitions->m_Text)
, m_Group(inDefinitions->m_Group)
+ , m_Signal(inDefinitions->m_Signal)
, m_Component(inDefinitions->m_Component)
, m_Behavior(inDefinitions->m_Behavior)
, m_Scene(inDefinitions->m_Scene)
@@ -214,6 +215,9 @@ Qt3DSDMInstanceHandle CClientDataModelBridge::CreateAssetInstance(Q3DStudio::CId
case OBJTYPE_GROUP:
m_DataCore->DeriveInstance(theNewInstance, m_Group.m_Instance);
break;
+ case OBJTYPE_SIGNAL:
+ m_DataCore->DeriveInstance(theNewInstance, m_Signal.m_Instance);
+ break;
case OBJTYPE_COMPONENT:
m_DataCore->DeriveInstance(theNewInstance, m_Component.m_Instance);
break;
@@ -1706,6 +1710,7 @@ bool CClientDataModelBridge::CanDelete(qt3dsdm::Qt3DSDMInstanceHandle inInstance
case OBJTYPE_MODEL:
case OBJTYPE_TEXT:
case OBJTYPE_GROUP:
+ case OBJTYPE_SIGNAL:
case OBJTYPE_CAMERA:
case OBJTYPE_LIGHT:
case OBJTYPE_IMAGE:
@@ -1849,6 +1854,8 @@ CClientDataModelBridge::GetObjectType(qt3dsdm::Qt3DSDMInstanceHandle inInstance)
return OBJTYPE_CAMERA;
else if (theType == L"Group")
return OBJTYPE_GROUP;
+ else if (theType == L"Signal")
+ return OBJTYPE_SIGNAL;
else if (theType == L"Component")
return OBJTYPE_COMPONENT;
else if (theType == L"Image" || theType == L"LibraryImage")
@@ -1904,6 +1911,11 @@ bool CClientDataModelBridge::IsGroupInstance(qt3dsdm::Qt3DSDMInstanceHandle inIn
return m_DataCore->IsInstanceOrDerivedFrom(inInstance, m_Group.m_Instance);
}
+bool CClientDataModelBridge::IsSignalInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const
+{
+ return m_DataCore->IsInstanceOrDerivedFrom(inInstance, m_Signal.m_Instance);
+}
+
bool CClientDataModelBridge::IsActionInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const
{
return m_DataCore->IsInstanceOrDerivedFrom(inInstance, m_ActionItem.m_Instance);
diff --git a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
index c3f1a90f..f0f5004d 100644
--- a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
+++ b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
@@ -75,6 +75,7 @@ typedef qt3dsdm::SComposerObjectDefinition<qt3dsdm::ComposerObjectTypes::Light>
typedef qt3dsdm::SComposerObjectDefinition<qt3dsdm::ComposerObjectTypes::Camera> SDataModelCamera;
typedef qt3dsdm::SComposerObjectDefinition<qt3dsdm::ComposerObjectTypes::Text> SDataModelText;
typedef qt3dsdm::SComposerObjectDefinition<qt3dsdm::ComposerObjectTypes::Group> SDataModelGroup;
+typedef qt3dsdm::SComposerObjectDefinition<qt3dsdm::ComposerObjectTypes::Signal> SDataModelSignal;
typedef qt3dsdm::SComposerObjectDefinition<qt3dsdm::ComposerObjectTypes::Component> SDataModelComponent;
typedef qt3dsdm::SComposerObjectDefinition<qt3dsdm::ComposerObjectTypes::Behavior> SDataModelBehavior;
typedef qt3dsdm::SComposerObjectDefinition<qt3dsdm::ComposerObjectTypes::Scene> SDataModelScene;
@@ -133,6 +134,7 @@ class CClientDataModelBridge
SDataModelCamera &m_Camera;
SDataModelText &m_Text;
SDataModelGroup &m_Group;
+ SDataModelSignal &m_Signal;
SDataModelComponent &m_Component;
SDataModelBehavior &m_Behavior;
SDataModelScene &m_Scene;
@@ -232,6 +234,7 @@ public:
const SDataModelCamera &GetCamera() const { return m_Camera; }
const SDataModelText &GetText() const { return m_Text; }
const SDataModelGroup &GetGroup() const { return m_Group; }
+ const SDataModelSignal &GetSignal() const { return m_Signal; }
const SDataModelComponent &GetComponent() const { return m_Component; }
const SDataModelBehavior &GetBehavior() const { return m_Behavior; }
const SDataModelScene &GetScene() const { return m_Scene; }
@@ -384,6 +387,7 @@ public:
bool IsBehaviorInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const;
bool IsCameraInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const;
bool IsGroupInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const;
+ bool IsSignalInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const;
bool IsActionInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const;
bool IsComponentInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const;
bool IsLayerInstance(qt3dsdm::Qt3DSDMInstanceHandle inInstance) const;
diff --git a/src/Authoring/Client/Code/Core/Doc/Doc.cpp b/src/Authoring/Client/Code/Core/Doc/Doc.cpp
index a85cc2e2..1d182b32 100644
--- a/src/Authoring/Client/Code/Core/Doc/Doc.cpp
+++ b/src/Authoring/Client/Code/Core/Doc/Doc.cpp
@@ -74,7 +74,7 @@
#include <QtCore/qtimer.h>
#include <QtGui/qvalidator.h>
-const long UIP_VERSION = 6; // current version (latest supported)
+const long UIP_VERSION = 7; // current version (latest supported)
const long LAST_SUPPORTED_UIP_VERSION = 1;
IMPLEMENT_OBJECT_COUNTER(CDoc)
diff --git a/src/Authoring/Client/Code/Core/Doc/IDocumentReader.h b/src/Authoring/Client/Code/Core/Doc/IDocumentReader.h
index aec35f50..be2f739a 100644
--- a/src/Authoring/Client/Code/Core/Doc/IDocumentReader.h
+++ b/src/Authoring/Client/Code/Core/Doc/IDocumentReader.h
@@ -279,6 +279,8 @@ inline EStudioObjectType GetStudioObjectType(qt3dsdm::ComposerObjectTypes::Enum
return OBJTYPE_MODEL;
case ComposerObjectTypes::Group:
return OBJTYPE_GROUP;
+ case ComposerObjectTypes::Signal:
+ return OBJTYPE_SIGNAL;
case ComposerObjectTypes::Image:
return OBJTYPE_IMAGE;
case ComposerObjectTypes::Text:
diff --git a/src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.cpp b/src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.cpp
index 121bd747..c02d2e99 100644
--- a/src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.cpp
+++ b/src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.cpp
@@ -58,6 +58,7 @@ bool CStudioObjectTypes::AcceptableParent(EStudioObjectType inChild, EStudioObje
case OBJTYPE_LIGHT:
case OBJTYPE_MODEL:
case OBJTYPE_GROUP:
+ case OBJTYPE_SIGNAL:
case OBJTYPE_PATH:
case OBJTYPE_COMPONENT:
theAcceptible = (inParent == OBJTYPE_LAYER) || (inParent == OBJTYPE_CAMERA)
@@ -132,6 +133,10 @@ const QString &CStudioObjectTypes::GetNormalIconName(EStudioObjectType inType)
static QString theString = QStringLiteral("Objects-Group-Normal.png");
return theString;
}
+ case OBJTYPE_SIGNAL: {
+ static QString theString = QStringLiteral("Objects-Signal-Normal.png");
+ return theString;
+ }
case OBJTYPE_ALIAS: {
static QString theString = QStringLiteral("Objects-Alias-Normal.png");
return theString;
@@ -234,6 +239,10 @@ const QString &CStudioObjectTypes::GetDisabledIconName(EStudioObjectType inType)
static QString theString = QStringLiteral("Objects-Group-Disabled.png");
return theString;
}
+ case OBJTYPE_SIGNAL: {
+ static QString theString = QStringLiteral("Objects-Signal-Disabled.png");
+ return theString;
+ }
case OBJTYPE_ALIAS: {
static QString theString = QStringLiteral("Objects-Alias-Disabled.png");
return theString;
@@ -335,6 +344,10 @@ const QString &CStudioObjectTypes::GetHighlightIconName(EStudioObjectType inType
static QString theString = QStringLiteral("Objects-Group-Normal.png");
return theString;
}
+ case OBJTYPE_SIGNAL: {
+ static QString theString = QStringLiteral("Objects-Signal-Normal.png");
+ return theString;
+ }
case OBJTYPE_PATH: {
static QString theString = QStringLiteral("Objects-Path-Normal.png");
return theString;
diff --git a/src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.h b/src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.h
index 79eafc19..dc57d4c8 100644
--- a/src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.h
+++ b/src/Authoring/Client/Code/Core/Utility/StudioObjectTypes.h
@@ -67,6 +67,7 @@ enum EStudioObjectType {
OBJTYPE_PROJECT = 0x02000000,
OBJTYPE_QML_STREAM = 0x04000000,
OBJTYPE_MATERIALDATA = 0x08000000,
+ OBJTYPE_SIGNAL = 0x10000000,
// filters
OBJTYPE_IS_VARIANT = OBJTYPE_LAYER | OBJTYPE_TEXT | OBJTYPE_MODEL | OBJTYPE_GROUP
diff --git a/src/Authoring/Client/Code/Core/Utility/StudioPreferences.cpp b/src/Authoring/Client/Code/Core/Utility/StudioPreferences.cpp
index c340ff32..3fe5f377 100644
--- a/src/Authoring/Client/Code/Core/Utility/StudioPreferences.cpp
+++ b/src/Authoring/Client/Code/Core/Utility/StudioPreferences.cpp
@@ -84,6 +84,7 @@ static QColor s_timelineFilterButtonSelectedColor;
static QColor s_timelineFilterButtonHoveredColor;
static QColor s_timelineRowCommentBgColor;
static QColor s_timelinePressedKeyframeColor; // pressed keyframe from multiple selection
+static QColor s_timelineActionColor;
static QColor s_invalidDataIndicatorColor;
static int s_fontSize;
@@ -158,6 +159,7 @@ void CStudioPreferences::loadPreferences()
s_timelineRowSubpDescendantColor = QColor("#a263ff");
s_timelineRowCommentBgColor = QColor("#d0000000");
s_timelinePressedKeyframeColor = QColor("#ffff00");
+ s_timelineActionColor = QColor("#f4be04");
s_invalidDataIndicatorColor = QColor("#ff2121");
@@ -926,6 +928,11 @@ QColor CStudioPreferences::timelinePressedKeyframeColor()
return s_timelinePressedKeyframeColor;
}
+QColor CStudioPreferences::timelineActionColor()
+{
+ return s_timelineActionColor;
+}
+
QColor CStudioPreferences::invalidDataIndicatorColor()
{
return s_invalidDataIndicatorColor;
diff --git a/src/Authoring/Client/Code/Core/Utility/StudioPreferences.h b/src/Authoring/Client/Code/Core/Utility/StudioPreferences.h
index 92a5787a..fb0b8fae 100644
--- a/src/Authoring/Client/Code/Core/Utility/StudioPreferences.h
+++ b/src/Authoring/Client/Code/Core/Utility/StudioPreferences.h
@@ -251,6 +251,7 @@ public:
static QColor timelineRowSubpDescendantColor();
static QColor timelineRowCommentBgColor();
static QColor timelinePressedKeyframeColor();
+ static QColor timelineActionColor();
static QColor invalidDataIndicatorColor();
diff --git a/src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.cpp b/src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.cpp
index 5c4cb11d..fdf332c5 100644
--- a/src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.cpp
+++ b/src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.cpp
@@ -225,6 +225,8 @@ SImportAsset &SImportComposerTypes::GetImportAssetForType(ComposerObjectTypes::E
return m_Asset;
case ComposerObjectTypes::Group:
return m_Group;
+ case ComposerObjectTypes::Signal:
+ return m_Signal;
case ComposerObjectTypes::Light:
return m_Light;
case ComposerObjectTypes::Camera:
diff --git a/src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.h b/src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.h
index 78df2a9b..0f069270 100644
--- a/src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.h
+++ b/src/Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportComposerTypes.h
@@ -88,6 +88,11 @@ struct SImportGroup : public SImportNode
ComposerObjectTypes::Enum GetObjectType() override { return ComposerObjectTypes::Group; }
};
+struct SImportSignal : public SImportNode
+{
+ ComposerObjectTypes::Enum GetObjectType() override { return ComposerObjectTypes::Signal; }
+};
+
struct SImportLight : public SImportNode
{
ITERATE_COMPOSER_LIGHT_PROPERTIES
@@ -205,6 +210,7 @@ struct SImportComposerTypes
{
SImportAsset m_Asset;
SImportGroup m_Group;
+ SImportSignal m_Signal;
SImportLight m_Light;
SImportCamera m_Camera;
SImportModel m_Model;
diff --git a/src/Authoring/Qt3DStudio/DragAndDrop/BasicObjectDropSource.cpp b/src/Authoring/Qt3DStudio/DragAndDrop/BasicObjectDropSource.cpp
index d99bd9a5..ecaae33a 100644
--- a/src/Authoring/Qt3DStudio/DragAndDrop/BasicObjectDropSource.cpp
+++ b/src/Authoring/Qt3DStudio/DragAndDrop/BasicObjectDropSource.cpp
@@ -163,6 +163,9 @@ CCmd *CBasicObjectDropSource::GenerateAssetCommand(qt3dsdm::Qt3DSDMInstanceHandl
case OBJTYPE_GROUP:
theComposerType = ComposerObjectTypes::Group;
break;
+ case OBJTYPE_SIGNAL:
+ theComposerType = ComposerObjectTypes::Signal;
+ break;
case OBJTYPE_IMAGE:
theComposerType = ComposerObjectTypes::Image;
break;
@@ -254,10 +257,17 @@ CCmd *CBasicObjectDropSource::GenerateAssetCommand(qt3dsdm::Qt3DSDMInstanceHandl
Q3DStudio::ImportUtils::GetInsertTypeForDropType(inDestType), thePoint,
theStartTime);
} else {
- SCOPED_DOCUMENT_EDITOR(*theDoc, QObject::tr("Add Instance"))
- ->CreateSceneGraphInstance(theComposerType, inTarget, inSlide, theInsertType,
+ ScopedDocumentEditor editor(
+ SCOPED_DOCUMENT_EDITOR(*theDoc, QObject::tr("Add Instance")));
+ Qt3DSDMInstanceHandle newHandle =
+ editor->CreateSceneGraphInstance(theComposerType, inTarget, inSlide, theInsertType,
thePoint, (EPrimitiveType)m_PrimitiveType, theStartTime,
false);
+
+ if (theComposerType == ComposerObjectTypes::Signal) {
+ // When creating a signal, automatically create also onActivate action
+ editor->AddAction(inSlide, newHandle, L"onActivate", L"Emit Signal");
+ }
}
}
return nullptr;
diff --git a/src/Authoring/Qt3DStudio/Palettes/Action/ActionView.cpp b/src/Authoring/Qt3DStudio/Palettes/Action/ActionView.cpp
index 56bd80dc..cd4c4fb6 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Action/ActionView.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/Action/ActionView.cpp
@@ -394,8 +394,17 @@ void ActionView::addAction()
// Query data model bridge to see the applicable events and actions for this instance.
CClientDataModelBridge *theBridge = GetBridge();
- std::wstring theEventName = theBridge->GetDefaultEvent(m_itemHandle);
- std::wstring theHandlerName = theBridge->GetDefaultHandler(m_itemHandle);
+ // For signals, default to onActivate and emitting signal
+ std::wstring preferredEvent = L"";
+ std::wstring preferredHandler = L"";
+ auto info = m_objRefHelper->GetInfo(m_itemHandle);
+ if (info.m_Type == OBJTYPE_SIGNAL) {
+ preferredEvent = L"onActivate";
+ preferredHandler = L"Emit Signal";
+ }
+
+ std::wstring theEventName = theBridge->GetDefaultEvent(m_itemHandle, preferredEvent);
+ std::wstring theHandlerName = theBridge->GetDefaultHandler(m_itemHandle, preferredHandler);
Q3DStudio::SCOPED_DOCUMENT_EDITOR(*GetDoc(), QObject::tr("Add Action"))
->AddAction(GetDoc()->GetActiveSlide(), m_itemHandle, theEventName,
diff --git a/src/Authoring/Qt3DStudio/Palettes/BasicObjects/BasicObjectsModel.cpp b/src/Authoring/Qt3DStudio/Palettes/BasicObjects/BasicObjectsModel.cpp
index 8694fda7..65274d7b 100644
--- a/src/Authoring/Qt3DStudio/Palettes/BasicObjects/BasicObjectsModel.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/BasicObjects/BasicObjectsModel.cpp
@@ -55,6 +55,7 @@ const QVector<BasicObjectItem> BasicObjectsModel::InitializeObjectModel()
{tr("Cone"), "Asset-Cone-Normal.png"_L1, OBJTYPE_MODEL, PRIMITIVETYPE_CONE},
{tr("Component"), "Asset-Component-Normal.png"_L1, OBJTYPE_COMPONENT, PRIMITIVETYPE_UNKNOWN},
{tr("Group"), "Asset-Group-Normal.png"_L1, OBJTYPE_GROUP, PRIMITIVETYPE_UNKNOWN},
+ {tr("Signal"), "Asset-Signal-Normal.png"_L1, OBJTYPE_SIGNAL, PRIMITIVETYPE_UNKNOWN},
{tr("Text"), "Asset-Text-Normal.png"_L1, OBJTYPE_TEXT, PRIMITIVETYPE_UNKNOWN},
{tr("Camera"), "Asset-Camera-Normal.png"_L1, OBJTYPE_CAMERA, PRIMITIVETYPE_UNKNOWN},
{tr("Light"), "Asset-Light-Normal.png"_L1, OBJTYPE_LIGHT, PRIMITIVETYPE_UNKNOWN},
diff --git a/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp b/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp
index 06fc9ce6..b6225dff 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp
@@ -782,6 +782,10 @@ InspectorControlBase* InspectorControlModel::createItem(Qt3DSDMInspectable *insp
if (title == "Name" && isBasicMaterial())
return nullptr;
+ // Hide everything else than name for signals
+ if (title != "Name" && getBridge()->IsSignalInstance(inspectable->getInstance()))
+ return nullptr;
+
InspectorControlBase *item = new InspectorControlBase;
item->m_property = metaProperty.m_Property;
item->m_instance = inspectable->GetGroupInstance(groupIndex);
diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/ITimelineItem.h b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/ITimelineItem.h
index 4308fb2b..2c8b6ecc 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/ITimelineItem.h
+++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/ITimelineItem.h
@@ -47,6 +47,13 @@ class ITimelineTimebar;
class ITimelineItem : public INamable
{
public:
+ enum class ActivateAction {
+ None = 0,
+ Activate = 1,
+ Deactivate = 2
+ };
+ Q_DECLARE_FLAGS(ActivateActions, ActivateAction)
+
virtual ~ITimelineItem() {}
virtual EStudioObjectType GetObjectType() const = 0;
@@ -65,6 +72,7 @@ public:
virtual bool HasAction(bool inMaster) = 0;
virtual bool ChildrenHasAction(bool inMaster) = 0;
virtual bool ComponentHasAction(bool inMaster) = 0;
+ virtual ActivateActions getActivateActions() = 0;
// subpresentations
virtual bool hasSubpresentation() const = 0;
@@ -72,4 +80,6 @@ public:
virtual ITimelineTimebar *GetTimebar() = 0;
};
+Q_DECLARE_OPERATORS_FOR_FLAGS(ITimelineItem::ActivateActions)
+
#endif // INCLUDED_ITIMELINE_ITEM_H
diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
index 744c53a0..58529ad4 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
@@ -234,6 +234,34 @@ bool Qt3DSDMTimelineItemBinding::HasAction(bool inMaster)
return theActions.size() > 0;
}
+ITimelineItem::ActivateActions Qt3DSDMTimelineItemBinding::getActivateActions()
+{
+ TActionHandleList theActions;
+ CDoc *theDoc = g_StudioApp.GetCore()->GetDoc();
+
+ Qt3DSDMSlideHandle theSlide = theDoc->GetActiveSlide();
+ qt3dsdm::ISlideCore &theSlideCore(*m_StudioSystem->GetSlideCore());
+ if (theSlideCore.IsSlide(theSlide)) {
+ m_StudioSystem->GetActionCore()->GetActions(theSlide, m_DataHandle, theActions);
+ // Check also master slide, to get actions inside component
+ TActionHandleList masterActions;
+ Qt3DSDMSlideHandle masterSlide = m_StudioSystem->GetSlideSystem()->GetMasterSlide(theSlide);
+ m_StudioSystem->GetActionCore()->GetActions(masterSlide, m_DataHandle, masterActions);
+ theActions.insert(theActions.end(), masterActions.begin(), masterActions.end());
+ }
+
+ ITimelineItem::ActivateActions activateActions = ITimelineItem::ActivateAction::None;
+ for (auto theIter = theActions.begin(); theIter != theActions.end(); ++theIter) {
+ auto info = m_StudioSystem->GetActionCore()->GetActionInfo(*theIter);
+ if (info.m_Event == L"onActivate")
+ activateActions |= ITimelineItem::ActivateAction::Activate;
+ else if (info.m_Event == L"onDeactivate")
+ activateActions |= ITimelineItem::ActivateAction::Deactivate;
+ }
+
+ return activateActions;
+}
+
bool Qt3DSDMTimelineItemBinding::ChildrenHasAction(bool inMaster)
{
// Get all the instances in this slidegraph
diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h
index 3980c0e1..4f7084d2 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h
+++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h
@@ -107,6 +107,7 @@ public:
bool IsVisible() const override;
void SetVisible(bool) override;
bool HasAction(bool inMaster) override;
+ ITimelineItem::ActivateActions getActivateActions() override;
bool IsVisibilityControlled() const override;
bool ChildrenHasAction(bool inMaster) override;
bool ComponentHasAction(bool inMaster) override;
diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp
index c03867a7..2264d232 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp
@@ -82,7 +82,7 @@ ITimelineItemBinding *CTimelineTranslationManager::GetOrCreate(Qt3DSDMInstanceHa
theReturn = new CLayerTimelineItemBinding(this, inInstance);
} else if (objType & (OBJTYPE_MODEL | OBJTYPE_TEXT | OBJTYPE_CAMERA | OBJTYPE_EFFECT
| OBJTYPE_LIGHT | OBJTYPE_RENDERPLUGIN | OBJTYPE_ALIAS
- | OBJTYPE_SUBPATH))
+ | OBJTYPE_SUBPATH | OBJTYPE_SIGNAL))
theReturn = new Qt3DSDMTimelineItemBinding(this, inInstance);
else {
// Add support for additional DataModel types here.
diff --git a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineConstants.h b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineConstants.h
index 02d08141..365bb88b 100644
--- a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineConstants.h
+++ b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineConstants.h
@@ -62,6 +62,7 @@ namespace TimelineConstants
const int DURATION_HANDLE_W = 14; // width of duration end handles in a timeline row
const int NAVIGATION_BAR_H = 30; // height of navigation/breadcrumb bar
const int TIMEBAR_TOOLTIP_OFFSET_V = 10;
+ const int ACTION_W = 4;
// Other
const int EXPAND_ANIMATION_DURATION = 200;
diff --git a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.cpp b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
index d05fe12d..4b599cbf 100644
--- a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
@@ -385,6 +385,9 @@ void TimelineWidget::OnNewPresentation()
m_connections.push_back(theSignalProvider->ConnectActionDeleted(
std::bind(&TimelineWidget::onActionEvent, this,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)));
+ m_connections.push_back(theSignalProvider->ConnectEventSet(
+ std::bind(&TimelineWidget::onActionModifiedEvent, this,
+ std::placeholders::_1)));
// connect property linked/unlinked
m_connections.push_back(theSignalProvider->ConnectPropertyLinked(
@@ -741,6 +744,7 @@ void TimelineWidget::updateActionStates(const QSet<RowTree *> &rows)
states |= RowTree::ActionState::ComponentAction;
}
row->setActionStates(states);
+ row->setActivateActions(binding->getActivateActions());
}
}
@@ -994,6 +998,15 @@ void TimelineWidget::onAsyncUpdate()
m_graphicsScene->rowManager()->finalizeRowDeletions();
}
+void TimelineWidget::onActionModifiedEvent(qt3dsdm::Qt3DSDMActionHandle inAction)
+{
+ // We don't have action owner here, so just do full reconstruct as action
+ // event types are anyway rarely changed.
+ m_fullReconstruct = true;
+ if (!m_asyncUpdateTimer.isActive())
+ m_asyncUpdateTimer.start();
+}
+
void TimelineWidget::onActionEvent(qt3dsdm::Qt3DSDMActionHandle inAction,
qt3dsdm::Qt3DSDMSlideHandle inSlide,
qt3dsdm::Qt3DSDMInstanceHandle inOwner)
diff --git a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.h b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.h
index ed27f924..9804a03e 100644
--- a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.h
+++ b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineWidget.h
@@ -117,6 +117,7 @@ protected:
qt3dsdm::Qt3DSDMPropertyHandle property);
void onActionEvent(qt3dsdm::Qt3DSDMActionHandle inAction, qt3dsdm::Qt3DSDMSlideHandle inSlide,
qt3dsdm::Qt3DSDMInstanceHandle inOwner);
+ void onActionModifiedEvent(qt3dsdm::Qt3DSDMActionHandle inAction);
void onPropertyLinked(qt3dsdm::Qt3DSDMInstanceHandle inInstance,
qt3dsdm::Qt3DSDMPropertyHandle inProperty);
void onPropertyUnlinked(qt3dsdm::Qt3DSDMInstanceHandle inInstance,
diff --git a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp
index 2d7cf19d..b2a8f6dc 100644
--- a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp
@@ -219,6 +219,18 @@ void RowTimeline::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio
painter->drawLine(startXActual, 0, startXActual, currHeight);
painter->drawLine(edgeOffset + m_endX, 0, edgeOffset + m_endX, currHeight);
}
+
+ // Paint possible timeline actions
+ auto actions = m_rowTree->m_activateActions;
+ bool paintActivate = actions.testFlag(ITimelineItem::ActivateAction::Activate);
+ bool paintDeactivate = actions.testFlag(ITimelineItem::ActivateAction::Deactivate);
+ int aw = TimelineConstants::ACTION_W;
+ QColor aColor = CStudioPreferences::timelineActionColor();
+ if (paintActivate)
+ painter->fillRect(QRect(x - aw/2, 0, aw, currHeight), aColor);
+ if (paintDeactivate)
+ painter->fillRect(QRect(x + w - aw/2, 0, aw, currHeight), aColor);
+
}
painter->restore();
diff --git a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.cpp b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
index bc9f7a63..aca0ef3c 100644
--- a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
@@ -424,6 +424,7 @@ void RowTree::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q
static const QPixmap pixTextNormal(":/images/Objects-Text-Normal.png");
static const QPixmap pixAliasNormal(":/images/Objects-Alias-Normal.png");
static const QPixmap pixGroupNormal(":/images/Objects-Group-Normal.png");
+ static const QPixmap pixSignalNormal(":/images/Objects-Signal-Normal.png");
static const QPixmap pixComponentNormal(":/images/Objects-Component-Normal.png");
static const QPixmap pixMaterialNormal(":/images/Objects-Material-Normal.png");
static const QPixmap pixPropertyNormal(":/images/Objects-Property-Normal.png");
@@ -438,6 +439,7 @@ void RowTree::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q
static const QPixmap pixTextNormal2x(":/images/Objects-Text-Normal@2x.png");
static const QPixmap pixAliasNormal2x(":/images/Objects-Alias-Normal@2x.png");
static const QPixmap pixGroupNormal2x(":/images/Objects-Group-Normal@2x.png");
+ static const QPixmap pixSignalNormal2x(":/images/Objects-Signal-Normal@2x.png");
static const QPixmap pixComponentNormal2x(":/images/Objects-Component-Normal@2x.png");
static const QPixmap pixMaterialNormal2x(":/images/Objects-Material-Normal@2x.png");
static const QPixmap pixPropertyNormal2x(":/images/Objects-Property-Normal@2x.png");
@@ -453,6 +455,7 @@ void RowTree::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q
static const QPixmap pixTextDisabled(":/images/Objects-Text-Disabled.png");
static const QPixmap pixAliasDisabled(":/images/Objects-Alias-Disabled.png");
static const QPixmap pixGroupDisabled(":/images/Objects-Group-Disabled.png");
+ static const QPixmap pixSignalDisabled(":/images/Objects-Signal-Disabled.png");
static const QPixmap pixComponentDisabled(":/images/Objects-Component-Disabled.png");
static const QPixmap pixMaterialDisabled(":/images/Objects-Material-Disabled.png");
static const QPixmap pixPropertyDisabled(":/images/Objects-Property-Disabled.png");
@@ -467,6 +470,7 @@ void RowTree::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q
static const QPixmap pixTextDisabled2x(":/images/Objects-Text-Disabled@2x.png");
static const QPixmap pixAliasDisabled2x(":/images/Objects-Alias-Disabled@2x.png");
static const QPixmap pixGroupDisabled2x(":/images/Objects-Group-Disabled@2x.png");
+ static const QPixmap pixSignalDisabled2x(":/images/Objects-Signal-Disabled@2x.png");
static const QPixmap pixComponentDisabled2x(":/images/Objects-Component-Disabled@2x.png");
static const QPixmap pixMaterialDisabled2x(":/images/Objects-Material-Disabled@2x.png");
static const QPixmap pixPropertyDisabled2x(":/images/Objects-Property-Disabled@2x.png");
@@ -512,6 +516,10 @@ void RowTree::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q
pixRowType = hiResIcons ? (m_locked ? pixGroupDisabled2x : pixGroupNormal2x)
: (m_locked ? pixGroupDisabled : pixGroupNormal);
break;
+ case OBJTYPE_SIGNAL:
+ pixRowType = hiResIcons ? (m_locked ? pixSignalDisabled2x : pixSignalNormal2x)
+ : (m_locked ? pixSignalDisabled : pixSignalNormal);
+ break;
case OBJTYPE_COMPONENT:
pixRowType = hiResIcons ? (m_locked ? pixComponentDisabled2x : pixComponentNormal2x)
: (m_locked ? pixComponentDisabled : pixComponentNormal);
@@ -1336,6 +1344,14 @@ void RowTree::setActionStates(ActionStates states)
}
}
+void RowTree::setActivateActions(ITimelineItem::ActivateActions activateActions)
+{
+ if (activateActions != m_activateActions) {
+ m_activateActions = activateActions;
+ update();
+ }
+}
+
bool RowTree::isContainer() const
{
return !m_isProperty && m_objectType & OBJTYPE_IS_CONTAINER;
diff --git a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.h b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.h
index 34a851b7..179292c9 100644
--- a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.h
+++ b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/ui/RowTree.h
@@ -35,6 +35,7 @@
#include "StudioObjectTypes.h"
#include "RowTreeLabel.h"
#include "Qt3DSDMHandles.h"
+#include "Bindings/ITimelineItem.h"
#include <QtCore/qpropertyanimation.h>
#include <QtCore/qparallelanimationgroup.h>
@@ -93,6 +94,7 @@ public:
void removeChild(RowTree *child);
void setDnDState(DnDState state, DnDState onlyIfState = DnDState::Any, bool recursive = false);
void setActionStates(ActionStates states);
+ void setActivateActions(ITimelineItem::ActivateActions activateActions);
void setTreeWidth(double w);
void setBinding(ITimelineItemBinding *binding);
void setPropBinding(ITimelineItemProperty *binding); // for property rows
@@ -196,6 +198,7 @@ private:
bool m_onMasterSlide = false;
DnDState m_dndState = DnDState::None;
ActionStates m_actionStates = ActionState::None;
+ ITimelineItem::ActivateActions m_activateActions = ITimelineItem::ActivateAction::None;
bool m_hasSubpresentation = false;
int m_numDescendantSubpresentations = 0;
ExpandState m_expandState = ExpandState::HiddenCollapsed;
diff --git a/src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp b/src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp
index dcbcc83e..b07d01ed 100644
--- a/src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp
+++ b/src/Authoring/Qt3DStudio/Render/StudioRendererTranslation.cpp
@@ -1718,6 +1718,7 @@ SGraphObjectTranslator *STranslation::CreateTranslator(qt3dsdm::Qt3DSDMInstanceH
// For the subset of possible instances, pick out the valid translators.
switch (theType) {
case qt3dsdm::ComposerObjectTypes::Group:
+ case qt3dsdm::ComposerObjectTypes::Signal:
case qt3dsdm::ComposerObjectTypes::Component:
case qt3dsdm::ComposerObjectTypes::Node:
theNewTranslator = QT3DS_NEW(m_Allocator, SNodeTranslator)(inInstance, m_Allocator);
diff --git a/src/Authoring/Qt3DStudio/images.qrc b/src/Authoring/Qt3DStudio/images.qrc
index b808711e..9dfdee3b 100644
--- a/src/Authoring/Qt3DStudio/images.qrc
+++ b/src/Authoring/Qt3DStudio/images.qrc
@@ -331,6 +331,12 @@
<file>images/gradient@2x.png</file>
<file>images/gradient_disabled.png</file>
<file>images/gradient_disabled@2x.png</file>
+ <file>images/Asset-Signal-Normal.png</file>
+ <file>images/Asset-Signal-Normal@2x.png</file>
+ <file>images/Objects-Signal-Normal.png</file>
+ <file>images/Objects-Signal-Normal@2x.png</file>
+ <file>images/Objects-Signal-Disabled.png</file>
+ <file>images/Objects-Signal-Disabled@2x.png</file>
</qresource>
<qresource prefix="/startup">
<file alias="open_dialog.png">images/open_dialog.png</file>
diff --git a/src/Authoring/Qt3DStudio/images/Asset-Signal-Normal.png b/src/Authoring/Qt3DStudio/images/Asset-Signal-Normal.png
new file mode 100644
index 00000000..dda0e2c3
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/images/Asset-Signal-Normal.png
Binary files differ
diff --git a/src/Authoring/Qt3DStudio/images/Asset-Signal-Normal@2x.png b/src/Authoring/Qt3DStudio/images/Asset-Signal-Normal@2x.png
new file mode 100644
index 00000000..04f34fd1
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/images/Asset-Signal-Normal@2x.png
Binary files differ
diff --git a/src/Authoring/Qt3DStudio/images/Objects-Signal-Disabled.png b/src/Authoring/Qt3DStudio/images/Objects-Signal-Disabled.png
new file mode 100644
index 00000000..e1301aa4
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/images/Objects-Signal-Disabled.png
Binary files differ
diff --git a/src/Authoring/Qt3DStudio/images/Objects-Signal-Disabled@2x.png b/src/Authoring/Qt3DStudio/images/Objects-Signal-Disabled@2x.png
new file mode 100644
index 00000000..905e23a1
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/images/Objects-Signal-Disabled@2x.png
Binary files differ
diff --git a/src/Authoring/Qt3DStudio/images/Objects-Signal-Normal.png b/src/Authoring/Qt3DStudio/images/Objects-Signal-Normal.png
new file mode 100644
index 00000000..2463c2f1
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/images/Objects-Signal-Normal.png
Binary files differ
diff --git a/src/Authoring/Qt3DStudio/images/Objects-Signal-Normal@2x.png b/src/Authoring/Qt3DStudio/images/Objects-Signal-Normal@2x.png
new file mode 100644
index 00000000..50932af4
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/images/Objects-Signal-Normal@2x.png
Binary files differ