summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Qt3DStudio/Palettes
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2020-09-24 08:30:56 +0300
committerAntti Määttä <antti.maatta@qt.io>2020-10-15 12:11:34 +0300
commit222398b775d7dca97b7b4346d58109f3cee415b4 (patch)
tree166bae0a6bdd27bb0a45cb8f032511c0dcb4e30c /src/Authoring/Qt3DStudio/Palettes
parent36ae96eb01fe5c506c958ef008b58bd382a83517 (diff)
Use images with dynamic object textures
Task-number: QT3DS-4063 Change-Id: I32b4b1892f064311e5896ebc1ebdc087598135d1 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Authoring/Qt3DStudio/Palettes')
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp44
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp16
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp31
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h8
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp6
5 files changed, 72 insertions, 33 deletions
diff --git a/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp b/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp
index b6225dff..4a845425 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp
@@ -1228,14 +1228,27 @@ void InspectorControlModel::updatePropertyValue(InspectorControlBase *element) c
bool skipEmits = false;
switch (element->m_dataType) {
case qt3dsdm::DataModelDataType::String: {
- QString stringValue = qt3dsdm::get<QString>(value);
- if (getBridge()->isInsideMaterialContainer(element->m_instance)) {
- int index = stringValue.lastIndexOf(QLatin1Char('/'));
- if (index != -1)
- stringValue = stringValue.mid(index + 1);
- }
+ if (value.getType() == qt3dsdm::DataModelDataType::Long4) {
+ qt3dsdm::Option<qt3dsdm::SLong4> guid = qt3dsdm::get<qt3dsdm::SLong4>(value);
+ qt3dsdm::Qt3DSDMInstanceHandle imageInstance = doc->GetDocumentReader()
+ .GetInstanceForGuid(guid);
+ if (imageInstance.Valid()) {
+ Q3DStudio::CString path = doc->GetDocumentReader().GetSourcePath(imageInstance);
+ Q3DStudio::CFilePath relPath(path);
+ element->m_value = QVariant(relPath.GetFileName().toQString());
+ } else {
+ element->m_value = QVariant(QString());
+ }
+ } else {
+ QString stringValue = qt3dsdm::get<QString>(value);
+ if (getBridge()->isInsideMaterialContainer(element->m_instance)) {
+ int index = stringValue.lastIndexOf(QLatin1Char('/'));
+ if (index != -1)
+ stringValue = stringValue.mid(index + 1);
+ }
- element->m_value = stringValue;
+ element->m_value = stringValue;
+ }
}
Q_FALLTHROUGH(); // fall-through for other String-derived datatypes
@@ -1324,8 +1337,21 @@ void InspectorControlModel::updatePropertyValue(InspectorControlBase *element) c
QString meshValue = QFileInfo(qt3dsdm::get<QString>(value)).fileName();
element->m_value = meshValue.startsWith('#'_L1) ? meshValue.mid(1) : meshValue;
} else if (element->m_propertyType == qt3dsdm::AdditionalMetaDataType::Texture) {
- QFileInfo fileInfo(qt3dsdm::get<QString>(value));
- element->m_value = fileInfo.fileName();
+ if (value.getType() == qt3dsdm::DataModelDataType::Long4) {
+ qt3dsdm::Option<qt3dsdm::SLong4> guid = qt3dsdm::get<qt3dsdm::SLong4>(value);
+ qt3dsdm::Qt3DSDMInstanceHandle imageInstance = doc->GetDocumentReader()
+ .GetInstanceForGuid(guid);
+ if (imageInstance.Valid()) {
+ Q3DStudio::CString path = doc->GetDocumentReader().GetSourcePath(imageInstance);
+ Q3DStudio::CFilePath relPath(path);
+ element->m_value = QVariant(relPath.GetFileName().toQString());
+ } else {
+ element->m_value = QVariant(QString());
+ }
+ } else {
+ QFileInfo fileInfo(qt3dsdm::get<QString>(value));
+ element->m_value = fileInfo.fileName();
+ }
} else if (element->m_propertyType == qt3dsdm::AdditionalMetaDataType::PathBuffer) {
element->m_value = qt3dsdm::get<QString>(value);
} else if (element->m_propertyType == qt3dsdm::AdditionalMetaDataType::String) {
diff --git a/src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp b/src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp
index 8804e675..8b20b950 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp
@@ -91,8 +91,20 @@ QString TextureChooserView::currentDataModelPath() const
qt3dsdm::SValue value;
propertySystem->GetInstancePropertyValue(m_instance, m_handle, value);
-
- const QString path = qt3dsdm::get<QString>(value);
+ QString path;
+ if (value.getType() == qt3dsdm::DataModelDataType::Long4) {
+ qt3dsdm::Option<qt3dsdm::SLong4> guid = qt3dsdm::get<qt3dsdm::SLong4>(value);
+ qt3dsdm::Qt3DSDMInstanceHandle imageInstance = doc->GetDocumentReader()
+ .GetInstanceForGuid(guid);
+ if (imageInstance.Valid()) {
+ Q3DStudio::CFilePath relPath(doc->GetDocumentReader().GetSourcePath(imageInstance));
+ path = relPath.GetFileName().toQString();
+ } else {
+ path = QString();
+ }
+ } else {
+ path = qt3dsdm::get<QString>(value);
+ }
// An empty value can sometimes be represented by a relative path either to project root or the
// presentation file, such as"./" or "../", so let's just consider all directory paths as empty
diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp
index e3483969..599b2a9f 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp
@@ -48,8 +48,8 @@
using namespace qt3dsdm;
-CMaterialTimelineItemBinding::CMaterialTimelineItemBinding(CTimelineTranslationManager *inMgr,
- Qt3DSDMInstanceHandle inDataHandle)
+CMaterialEffectTimelineItemBinding::CMaterialEffectTimelineItemBinding(
+ CTimelineTranslationManager *inMgr, Qt3DSDMInstanceHandle inDataHandle)
: Qt3DSDMTimelineItemBinding(inMgr, inDataHandle)
{
qt3dsdm::IPropertySystem *thePropertySystem = m_TransMgr->GetStudioSystem()->GetPropertySystem();
@@ -63,7 +63,8 @@ CMaterialTimelineItemBinding::CMaterialTimelineItemBinding(CTimelineTranslationM
AdditionalMetaDataType::Value theAdditionalMetaDataType =
thePropertySystem->GetAdditionalMetaDataType(inDataHandle, theProperty);
- if (theAdditionalMetaDataType == AdditionalMetaDataType::Image) {
+ if (theAdditionalMetaDataType == AdditionalMetaDataType::Image
+ || theAdditionalMetaDataType == AdditionalMetaDataType::Texture) {
TCharStr theName(thePropertySystem->GetName(theProperty));
TCharStr theFormalName(thePropertySystem->GetFormalName(inDataHandle, theProperty));
TNameFormalNamePair thePair = std::make_tuple(theName, theFormalName);
@@ -72,16 +73,16 @@ CMaterialTimelineItemBinding::CMaterialTimelineItemBinding(CTimelineTranslationM
}
}
-CMaterialTimelineItemBinding::~CMaterialTimelineItemBinding()
+CMaterialEffectTimelineItemBinding::~CMaterialEffectTimelineItemBinding()
{
}
-ITimelineTimebar *CMaterialTimelineItemBinding::GetTimebar()
+ITimelineTimebar *CMaterialEffectTimelineItemBinding::GetTimebar()
{ // No timebars on materials
return new CEmptyTimelineTimebar();
}
-bool CMaterialTimelineItemBinding::ShowToggleControls() const
+bool CMaterialEffectTimelineItemBinding::ShowToggleControls() const
{
// Materials have no toggle controls, by design
return false;
@@ -106,7 +107,7 @@ bool ImageSlotIsFilled(qt3dsdm::IPropertySystem *inPropertySystem, Qt3DSDMInstan
return theReturn;
}
-long CMaterialTimelineItemBinding::GetChildrenCount()
+long CMaterialEffectTimelineItemBinding::GetChildrenCount()
{
long theReturnCount = 0;
if (m_TransMgr->GetStudioSystem()->IsInstance(m_DataHandle)) {
@@ -124,7 +125,7 @@ long CMaterialTimelineItemBinding::GetChildrenCount()
return theReturnCount;
}
-ITimelineItemBinding *CMaterialTimelineItemBinding::GetChild(long inIndex)
+ITimelineItemBinding *CMaterialEffectTimelineItemBinding::GetChild(long inIndex)
{
qt3dsdm::IPropertySystem *thePropertySystem = m_TransMgr->GetStudioSystem()->GetPropertySystem();
@@ -147,7 +148,7 @@ ITimelineItemBinding *CMaterialTimelineItemBinding::GetChild(long inIndex)
theImageProperty, std::get<1>(m_ImageNameFormalNamePairs[theSlotCursor]).wide_str());
}
-QList<ITimelineItemBinding *> CMaterialTimelineItemBinding::GetChildren()
+QList<ITimelineItemBinding *> CMaterialEffectTimelineItemBinding::GetChildren()
{
int childCount = GetChildrenCount();
QList<ITimelineItemBinding *> retlist;
@@ -158,7 +159,7 @@ QList<ITimelineItemBinding *> CMaterialTimelineItemBinding::GetChildren()
return retlist;
}
-void CMaterialTimelineItemBinding::OnAddChild(qt3dsdm::Qt3DSDMInstanceHandle inInstance)
+void CMaterialEffectTimelineItemBinding::OnAddChild(qt3dsdm::Qt3DSDMInstanceHandle inInstance)
{
using namespace qt3dsdm;
CClientDataModelBridge *theBridge = m_TransMgr->GetStudioSystem()->GetClientDataModelBridge();
@@ -169,18 +170,18 @@ void CMaterialTimelineItemBinding::OnAddChild(qt3dsdm::Qt3DSDMInstanceHandle inI
Qt3DSDMTimelineItemBinding::OnAddChild(inInstance);
}
-void CMaterialTimelineItemBinding::OnPropertyChanged(Qt3DSDMPropertyHandle inPropertyHandle)
+void CMaterialEffectTimelineItemBinding::OnPropertyChanged(Qt3DSDMPropertyHandle inPropertyHandle)
{
Qt3DSDMTimelineItemBinding::OnPropertyChanged(inPropertyHandle);
}
-void CMaterialTimelineItemBinding::OnPropertyLinked(Qt3DSDMPropertyHandle inPropertyHandle)
+void CMaterialEffectTimelineItemBinding::OnPropertyLinked(Qt3DSDMPropertyHandle inPropertyHandle)
{
Qt3DSDMTimelineItemBinding::OnPropertyLinked(inPropertyHandle);
}
qt3dsdm::Qt3DSDMInstanceHandle
-CMaterialTimelineItemBinding::GetImage(qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle)
+CMaterialEffectTimelineItemBinding::GetImage(qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle)
{
qt3dsdm::IPropertySystem *thePropertySystem = m_TransMgr->GetStudioSystem()->GetPropertySystem();
SValue theImageValue;
@@ -191,8 +192,8 @@ CMaterialTimelineItemBinding::GetImage(qt3dsdm::Qt3DSDMPropertyHandle inProperty
}
ITimelineItemBinding *
-CMaterialTimelineItemBinding::GetOrCreateImageBinding(qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle,
- const wchar_t *inName)
+CMaterialEffectTimelineItemBinding::GetOrCreateImageBinding(
+ qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle, const wchar_t *inName)
{
qt3dsdm::Qt3DSDMInstanceHandle theImageInstance = GetImage(inPropertyHandle);
ITimelineItemBinding *theImageTimelineRow = m_TransMgr->GetBinding(theImageInstance);
diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h
index 8e188a52..0ecbcb54 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h
+++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h
@@ -47,7 +47,7 @@ class CTimelineTranslationManager;
/**
* Binding to a DataModel object of Material type
*/
-class CMaterialTimelineItemBinding : public Qt3DSDMTimelineItemBinding
+class CMaterialEffectTimelineItemBinding : public Qt3DSDMTimelineItemBinding
{
public: // Types
typedef std::tuple<qt3dsdm::TCharStr, qt3dsdm::TCharStr> TNameFormalNamePair;
@@ -57,9 +57,9 @@ protected: // Members
TNameFormalNamePairList m_ImageNameFormalNamePairs;
public: // Construction
- CMaterialTimelineItemBinding(CTimelineTranslationManager *inMgr,
- qt3dsdm::Qt3DSDMInstanceHandle inDataHandle);
- virtual ~CMaterialTimelineItemBinding();
+ CMaterialEffectTimelineItemBinding(CTimelineTranslationManager *inMgr,
+ qt3dsdm::Qt3DSDMInstanceHandle inDataHandle);
+ virtual ~CMaterialEffectTimelineItemBinding();
public: // Qt3DSDMTimelineItemBinding
ITimelineTimebar *GetTimebar() override;
diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp
index 2264d232..9a1e9eab 100644
--- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp
+++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp
@@ -64,8 +64,8 @@ ITimelineItemBinding *CTimelineTranslationManager::GetOrCreate(Qt3DSDMInstanceHa
EStudioObjectType objType = g_StudioApp.GetCore()->GetDoc()->GetStudioSystem()
->GetClientDataModelBridge()->GetObjectType(inInstance);
- if (objType & OBJTYPE_IS_MATERIAL) {
- theReturn = new CMaterialTimelineItemBinding(this, inInstance);
+ if (objType & (OBJTYPE_IS_MATERIAL | OBJTYPE_EFFECT)) {
+ theReturn = new CMaterialEffectTimelineItemBinding(this, inInstance);
} else if (objType == OBJTYPE_IMAGE) {
theReturn = new CImageTimelineItemBinding(this, inInstance);
} else if (objType & (OBJTYPE_GROUP | OBJTYPE_COMPONENT)) {
@@ -80,7 +80,7 @@ ITimelineItemBinding *CTimelineTranslationManager::GetOrCreate(Qt3DSDMInstanceHa
theReturn = new CPathTimelineItemBinding(this, inInstance);
} else if (objType == OBJTYPE_LAYER) {
theReturn = new CLayerTimelineItemBinding(this, inInstance);
- } else if (objType & (OBJTYPE_MODEL | OBJTYPE_TEXT | OBJTYPE_CAMERA | OBJTYPE_EFFECT
+ } else if (objType & (OBJTYPE_MODEL | OBJTYPE_TEXT | OBJTYPE_CAMERA
| OBJTYPE_LIGHT | OBJTYPE_RENDERPLUGIN | OBJTYPE_ALIAS
| OBJTYPE_SUBPATH | OBJTYPE_SIGNAL))
theReturn = new Qt3DSDMTimelineItemBinding(this, inInstance);