summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2019-02-28 12:31:57 +0200
committerMahmoud Badri <mahmoud.badri@qt.io>2019-03-04 12:06:32 +0000
commitd365c795bb03e7650dc095068bf02599101e274f (patch)
tree02e563cf3e69542962a9386b9c193f6dac1ce2ee
parentbddb943092efb0cc59f90109d4f6bfbbdad77bfc (diff)
Implement variant tags slide view tooltipv2.3.0-beta2
Task-number: QT3DS-3114 Change-Id: I9003913ab919ad53ae0ec1e4192f41772fb4141f Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Janne Kangas <janne.kangas@qt.io> Reviewed-by: Antti Määttä <antti.maatta@qt.io>
-rw-r--r--src/Authoring/Client/Code/Core/Doc/Doc.cpp4
-rw-r--r--src/Authoring/Client/Code/Core/Doc/Doc.h2
-rw-r--r--src/Authoring/Studio/Application/ProjectFile.cpp9
-rw-r--r--src/Authoring/Studio/Palettes/Inspector/VariantsGroupModel.cpp3
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideModel.cpp68
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideModel.h7
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideView.cpp67
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideView.h16
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideView.qml16
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp3
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp31
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h2
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp40
13 files changed, 187 insertions, 81 deletions
diff --git a/src/Authoring/Client/Code/Core/Doc/Doc.cpp b/src/Authoring/Client/Code/Core/Doc/Doc.cpp
index 9f1f4dca..ef6fc42f 100644
--- a/src/Authoring/Client/Code/Core/Doc/Doc.cpp
+++ b/src/Authoring/Client/Code/Core/Doc/Doc.cpp
@@ -727,12 +727,12 @@ qt3dsdm::Qt3DSDMInstanceHandle CDoc::GetFirstSelectableLayer()
return theFoundLayer;
}
-QVector<qt3dsdm::Qt3DSDMInstanceHandle> CDoc::getLayers()
+QVector<int> CDoc::getLayers()
{
Q3DStudio::CGraphIterator layerIterator;
GetAssetChildren(this, m_SceneInstance, layerIterator, OBJTYPE_LAYER);
- QVector<qt3dsdm::Qt3DSDMInstanceHandle> layerList;
+ QVector<int> layerList;
for (; !layerIterator.IsDone(); ++layerIterator) {
if (m_StudioSystem->IsInstance(layerIterator.GetCurrent()))
diff --git a/src/Authoring/Client/Code/Core/Doc/Doc.h b/src/Authoring/Client/Code/Core/Doc/Doc.h
index e66a2057..c18b85fb 100644
--- a/src/Authoring/Client/Code/Core/Doc/Doc.h
+++ b/src/Authoring/Client/Code/Core/Doc/Doc.h
@@ -465,7 +465,7 @@ public:
int getSelectedInstancesCount() const;
std::shared_ptr<Q3DStudio::IInternalDocumentEditor> getSceneEditor() { return m_SceneEditor; }
- QVector<qt3dsdm::Qt3DSDMInstanceHandle> getLayers();
+ QVector<int> getLayers();
void queueMaterialRename(const QString &oldName, const QString &newName);
diff --git a/src/Authoring/Studio/Application/ProjectFile.cpp b/src/Authoring/Studio/Application/ProjectFile.cpp
index bd79e64b..ebec8b53 100644
--- a/src/Authoring/Studio/Application/ProjectFile.cpp
+++ b/src/Authoring/Studio/Application/ProjectFile.cpp
@@ -1123,8 +1123,7 @@ void ProjectFile::renameVariantTag(const QString &group, const QString &oldTag,
for (auto layer : layers) {
qt3dsdm::SValue sValue;
if (propertySystem->GetInstancePropertyValue(layer, property, sValue)) {
- QString propVal = QString::fromWCharArray(qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)
- ->GetData());
+ QString propVal = qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->toQString();
QString oldGroupTagPair = QStringLiteral("%1:%2").arg(group).arg(oldTag);
if (propVal.contains(oldGroupTagPair)) {
propVal.replace(oldGroupTagPair, QStringLiteral("%1:%2").arg(group).arg(newTag));
@@ -1186,8 +1185,7 @@ void ProjectFile::renameVariantGroup(const QString &oldGroup, const QString &new
for (auto layer : layers) {
qt3dsdm::SValue sValue;
if (propertySystem->GetInstancePropertyValue(layer, property, sValue)) {
- QString propVal = QString::fromWCharArray(qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)
- ->GetData());
+ QString propVal = qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->toQString();
QString oldGroupWithColon = QStringLiteral("%1:").arg(oldGroup);
if (propVal.contains(oldGroupWithColon)) {
propVal.replace(oldGroupWithColon, QStringLiteral("%1:").arg(newGroup));
@@ -1262,8 +1260,7 @@ void ProjectFile::deleteVariantGroup(const QString &group)
for (auto layer : layers) {
qt3dsdm::SValue sValue;
if (propertySystem->GetInstancePropertyValue(layer, property, sValue)) {
- QString propVal = QString::fromWCharArray(qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)
- ->GetData());
+ QString propVal = qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->toQString();
if (propVal.contains(QStringLiteral("%1:").arg(group))) {
// property has the deleted group, need to update it, else the deleted group
// will be saved the uip if the user saves the presentation.
diff --git a/src/Authoring/Studio/Palettes/Inspector/VariantsGroupModel.cpp b/src/Authoring/Studio/Palettes/Inspector/VariantsGroupModel.cpp
index a122889b..e31a5876 100644
--- a/src/Authoring/Studio/Palettes/Inspector/VariantsGroupModel.cpp
+++ b/src/Authoring/Studio/Palettes/Inspector/VariantsGroupModel.cpp
@@ -65,8 +65,7 @@ void VariantsGroupModel::refresh()
beginResetModel();
m_data.clear();
- QString propVal = QString::fromWCharArray(qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)
- ->GetData());
+ QString propVal = qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->toQString();
QHash<QString, QStringList> propTags;
if (!propVal.isEmpty()) {
const QStringList propTagsList = propVal.split(QChar(','));
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideModel.cpp b/src/Authoring/Studio/Palettes/Slide/SlideModel.cpp
index eba5d044..3cf0a01e 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideModel.cpp
+++ b/src/Authoring/Studio/Palettes/Slide/SlideModel.cpp
@@ -58,8 +58,18 @@ QVariant SlideModel::data(const QModelIndex &index, int role) const
return row == m_selectedRow;
case VariantsRole:
int slideIdx = GetDoc()->GetStudioSystem()->GetSlideSystem()->GetSlideIndex(m_slides[row]);
- if (slideIdx < m_variants.size())
- return m_variants.at(slideIdx);
+ if (slideIdx < m_variantsModel.size()) {
+ const auto variantsDef = g_StudioApp.GetCore()->getProjectFile().variantsDef();
+ const auto keys = m_variantsModel[slideIdx].keys();
+ QString templ = QStringLiteral(" <font color='%1'>%2</font>");
+ QString slideVariants;
+ for (auto g : keys) { // variants groups
+ slideVariants.append(templ.arg(variantsDef[g].m_color)
+ .arg(m_variantsModel[slideIdx][g].length()));
+ }
+
+ return slideVariants;
+ }
}
return {};
@@ -352,17 +362,15 @@ void SlideModel::setSlideName(const qt3dsdm::Qt3DSDMSlideHandle &handle, const Q
}
}
-void SlideModel::refreshVariants(const QStringList &variants)
+void SlideModel::refreshVariants(const QVector<QHash<QString, QStringList>> &vModel)
{
- m_variants.clear();
+ m_variantsModel.clear();
- if (variants.isEmpty()) {
+ if (vModel.isEmpty()) {
const auto *slideSystem = GetDoc()->GetStudioSystem()->GetSlideSystem();
int slideCount = slideSystem->GetSlideCount(slideSystem->GetMasterSlide(
GetDoc()->GetActiveSlide()));
-
- QString vTemplate = QStringLiteral(" <font color='%1'>%2</font>");
- QVector<QHash<QString, int>> counts(slideCount); // <group, total count tags>
+ m_variantsModel.resize(slideCount);
const auto propertySystem = GetDoc()->GetPropertySystem();
const auto layers = GetDoc()->getLayers();
@@ -371,37 +379,30 @@ void SlideModel::refreshVariants(const QStringList &variants)
qt3dsdm::SValue sValue;
if (propertySystem->GetInstancePropertyValue(layer, GetBridge()->GetLayer().m_variants,
sValue)) {
- QString propVal = QString::fromWCharArray(qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)
- ->GetData());
+ QString propVal = qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->toQString();
if (!propVal.isEmpty()) {
QStringList tagPairs = propVal.split(QLatin1Char(','));
for (int i = 0; i < tagPairs.size(); ++i) {
- QString group = tagPairs[i].left(tagPairs[i].indexOf(QLatin1Char(':')));
- ++counts[slideIdx][group];
+ QStringList pair = tagPairs[i].split(QLatin1Char(':'));
+ if (!m_variantsModel[slideIdx][pair[0]].contains(pair[1]))
+ m_variantsModel[slideIdx][pair[0]].append(pair[1]);
}
}
}
}
- // add master slide layers counts to other layers
- const auto keys = counts[0].keys();
+ // add master slide variants to other slides
+ const auto keys = m_variantsModel[0].keys();
for (int i = 1; i < slideCount; ++i) {
- for (auto g : keys)
- counts[i][g] += counts[0][g];
- }
-
- // update the variants counts model (m_variants)
- auto variantsDef = g_StudioApp.GetCore()->getProjectFile().variantsDef();
- for (int i = 0; i < counts.size(); ++i) { // slides indexes
- QString slideVariants;
- const auto keys = counts[i].keys();
- for (auto g : keys) // variants groups
- slideVariants.append(vTemplate.arg(variantsDef[g].m_color).arg(counts[i][g]));
-
- m_variants << slideVariants;
+ for (auto g : keys) {
+ for (int j = 0; j < m_variantsModel[0][g].length(); ++j) {
+ if (!m_variantsModel[i][g].contains(m_variantsModel[0][g][j]))
+ m_variantsModel[i][g].append(m_variantsModel[0][g][j]);
+ }
+ }
}
} else {
- m_variants = variants;
+ m_variantsModel = vModel;
}
Q_EMIT dataChanged(this->index(0, 0), this->index(rowCount() - 1, 0), {VariantsRole});
@@ -425,6 +426,17 @@ CClientDataModelBridge *SlideModel::GetBridge() const
return doc->GetStudioSystem()->GetClientDataModelBridge();
}
+QVector<QHash<QString, QStringList> > SlideModel::variantsModel() const
+{
+ return m_variantsModel;
+}
+
+QHash<QString, QStringList> SlideModel::variantsSlideModel(int row) const
+{
+ int slideIdx = GetDoc()->GetStudioSystem()->GetSlideSystem()->GetSlideIndex(m_slides[row]);
+ return m_variantsModel[slideIdx];
+}
+
void SlideModel::refreshSlideLabel(qt3dsdm::Qt3DSDMInstanceHandle instanceHandle,
qt3dsdm::Qt3DSDMPropertyHandle propertyHandle)
{
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideModel.h b/src/Authoring/Studio/Palettes/Slide/SlideModel.h
index 6f2de22f..b92a01c5 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideModel.h
+++ b/src/Authoring/Studio/Palettes/Slide/SlideModel.h
@@ -77,8 +77,9 @@ public:
void refreshSlideLabel(qt3dsdm::Qt3DSDMInstanceHandle instanceHandle,
qt3dsdm::Qt3DSDMPropertyHandle propertyHandle);
void setSelectedSlideIndex(const QModelIndex &index);
- void refreshVariants(const QStringList &variants = {});
- QStringList variants() const { return m_variants; }
+ void refreshVariants(const QVector<QHash<QString, QStringList>> &vModel = {});
+ QHash<QString, QStringList> variantsSlideModel(int row) const;
+ QVector<QHash<QString, QStringList> > variantsModel() const;
private:
bool hasSlideWithName(const QString &name) const;
@@ -92,7 +93,7 @@ private:
int m_selectedRow = -1;
int m_rearrangeStartRow = -1;
int m_rearrangeEndRow = -1;
- QStringList m_variants; // model for variants tags display
+ QVector<QHash<QString, QStringList> > m_variantsModel;
QHash<qt3dsdm::Qt3DSDMInstanceHandle, qt3dsdm::Qt3DSDMSlideHandle> m_slideLookupHash;
};
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp b/src/Authoring/Studio/Palettes/Slide/SlideView.cpp
index e459deda..f3a5e099 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp
+++ b/src/Authoring/Studio/Palettes/Slide/SlideView.cpp
@@ -44,6 +44,7 @@
#include "Dialogs.h"
#include <QtCore/qtimer.h>
+#include "QtWidgets/qlabel.h"
#include <QtQml/qqmlcontext.h>
#include <QtQml/qqmlengine.h>
@@ -51,9 +52,14 @@ SlideView::SlideView(QWidget *parent) : QQuickWidget(parent)
, m_MasterSlideModel(new SlideModel(1, this))
, m_SlidesModel(new SlideModel(0, this))
, m_CurrentModel(m_SlidesModel)
- , m_ActiveRoot(0)
, m_toolTip(tr("No Controller"))
{
+ m_variantsToolTip = new QLabel(this);
+ m_variantsToolTip->setObjectName(QStringLiteral("variantsToolTip"));
+ m_variantsToolTip->setWindowModality(Qt::NonModal);
+ m_variantsToolTip->setWindowFlags(Qt::FramelessWindowHint | Qt::ToolTip);
+ m_variantsToolTip->setContentsMargins(2, 2, 2, 2);
+
g_StudioApp.GetCore()->GetDispatch()->AddPresentationChangeListener(this);
setResizeMode(QQuickWidget::SizeRootObjectToView);
QTimer::singleShot(0, this, &SlideView::initialize);
@@ -177,6 +183,36 @@ void SlideView::showContextMenu(int x, int y, int row)
contextMenu.exec(mapToGlobal({x, y}));
}
+void SlideView::showVariantsTooltip(int row, const QPoint &point)
+{
+ const auto variantsDef = g_StudioApp.GetCore()->getProjectFile().variantsDef();
+ QString templ = QStringLiteral("<font color='%1'>%2</font>");
+ QString tooltipStr("<table>");
+ const auto slideVariants = m_CurrentModel->variantsSlideModel(row);
+ const auto keys = slideVariants.keys();
+ for (auto &g : keys) {
+ tooltipStr.append("<tr><td>");
+ tooltipStr.append(templ.arg(variantsDef[g].m_color).arg(g + ": "));
+ tooltipStr.append("</td><td>");
+ for (auto &t : slideVariants[g])
+ tooltipStr.append(t + ", ");
+ tooltipStr.chop(2);
+ tooltipStr.append("</td></tr>");
+ }
+ tooltipStr.append("</table>");
+
+ m_variantsToolTip->setText(tooltipStr);
+ m_variantsToolTip->adjustSize();
+ m_variantsToolTip->move(point);
+ m_variantsToolTip->raise();
+ m_variantsToolTip->show();
+}
+
+void SlideView::hideVariantsTooltip()
+{
+ m_variantsToolTip->hide();
+}
+
void SlideView::OnNewPresentation()
{
// Register callbacks
@@ -202,6 +238,12 @@ void SlideView::OnNewPresentation()
std::bind(&SlideView::onPropertyChanged, this,
std::placeholders::_1, std::placeholders::_2)));
+ // object created/deleted
+ m_Connections.push_back(theSignalProvider->ConnectInstanceCreated(
+ std::bind(&SlideView::onAssetCreated, this, std::placeholders::_1)));
+ m_Connections.push_back(theSignalProvider->ConnectInstanceDeleted(
+ std::bind(&SlideView::onAssetDeleted, this, std::placeholders::_1)));
+
// Set up listener for undo/redo changes in order to update
// slide datainput control
CDispatch *theDispatch = g_StudioApp.GetCore()->GetDispatch();
@@ -327,6 +369,27 @@ void SlideView::onDataInputChange(int handle, int instance, const QString &dataI
Q_EMIT controlledChanged();
}
+void SlideView::onAssetCreated(qt3dsdm::Qt3DSDMInstanceHandle inInstance)
+{
+ // refresh the variants model if the created asset is a layer with variants property set.
+ if (GetBridge()->IsLayerInstance(inInstance)) {
+ const auto propertySystem = GetDoc()->GetPropertySystem();
+ qt3dsdm::SValue sValue;
+ if (propertySystem->GetInstancePropertyValue(inInstance, GetBridge()->GetLayer().m_variants,
+ sValue)) {
+ if (qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->GetLength() != 0)
+ refreshVariants();
+ }
+ }
+}
+
+void SlideView::onAssetDeleted(qt3dsdm::Qt3DSDMInstanceHandle inInstance)
+{
+ Q_UNUSED(inInstance)
+
+ refreshVariants();
+}
+
void SlideView::onPropertyChanged(qt3dsdm::Qt3DSDMInstanceHandle inInstance,
qt3dsdm::Qt3DSDMPropertyHandle inProperty)
{
@@ -506,7 +569,7 @@ bool SlideView::isMaster(const qt3dsdm::Qt3DSDMSlideHandle &inSlideHandle)
void SlideView::refreshVariants()
{
m_SlidesModel->refreshVariants();
- m_MasterSlideModel->refreshVariants(m_SlidesModel->variants());
+ m_MasterSlideModel->refreshVariants(m_SlidesModel->variantsModel());
}
void SlideView::OnBeginDataModelNotifications()
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.h b/src/Authoring/Studio/Palettes/Slide/SlideView.h
index 18c4d1d7..eed79655 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideView.h
+++ b/src/Authoring/Studio/Palettes/Slide/SlideView.h
@@ -38,9 +38,12 @@
#include "Qt3DSDMSignals.h"
#include "DispatchListeners.h"
#include "Dispatch.h"
+
class CClientDataModelBridge;
class CDoc;
+QT_FORWARD_DECLARE_CLASS(QLabel);
+
namespace qt3dsdm {
class ISlideSystem;
}
@@ -78,6 +81,8 @@ public:
Q_INVOKABLE void finishSlideRearrange(bool commit);
Q_INVOKABLE void showContextMenu(int x, int y, int row);
Q_INVOKABLE void showControllerDialog(const QPoint &point);
+ Q_INVOKABLE void showVariantsTooltip(int row, const QPoint &point);
+ Q_INVOKABLE void hideVariantsTooltip();
Q_INVOKABLE bool toolTipsEnabled();
// Presentation Change Listener
@@ -121,6 +126,8 @@ private:
long GetSlideIndex(const qt3dsdm::Qt3DSDMSlideHandle &inSlideHandle);
bool isMaster(const qt3dsdm::Qt3DSDMSlideHandle &inSlideHandle);
void rebuildSlideList(const qt3dsdm::Qt3DSDMSlideHandle &inActiveSlideHandle);
+ void onAssetCreated(qt3dsdm::Qt3DSDMInstanceHandle inInstance);
+ void onAssetDeleted(qt3dsdm::Qt3DSDMInstanceHandle inInstance);
void onPropertyChanged(qt3dsdm::Qt3DSDMInstanceHandle inInstance,
qt3dsdm::Qt3DSDMPropertyHandle inProperty);
@@ -128,17 +135,18 @@ private:
SlideModel *m_SlidesModel = nullptr;
SlideModel *m_CurrentModel = nullptr;
DataInputSelectView *m_dataInputSelector = nullptr;
+ QLabel *m_variantsToolTip = nullptr;
QColor m_BaseColor = QColor::fromRgb(75, 75, 75);
- std::vector<std::shared_ptr<qt3dsdm::ISignalConnection>>
- m_Connections; /// connections to the DataModel
+ std::vector<std::shared_ptr<qt3dsdm::ISignalConnection>> m_Connections;
typedef QHash<int, int> TIntIntMap;
// We need to remember which slide we were on when we entered the master slide.
// Then, when the users leave the master slide we can go back to roughly the same
// state.
TIntIntMap m_MasterSlideReturnPointers;
- qt3dsdm::Qt3DSDMInstanceHandle m_ActiveRoot; ///< the object containing the slides to be inspected.
- qt3dsdm::Qt3DSDMSlideHandle m_ActiveSlideHandle; ///< the active slide handle
+ // the object containing the slides to be inspected.
+ qt3dsdm::Qt3DSDMInstanceHandle m_ActiveRoot = 0;
+ qt3dsdm::Qt3DSDMSlideHandle m_ActiveSlideHandle; // the active slide handle
bool m_controlled = false; // Are slides in this slide set controlled by datainput?
QString m_currentController;
QString m_toolTip;
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.qml b/src/Authoring/Studio/Palettes/Slide/SlideView.qml
index 4113c947..93865fa3 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideView.qml
+++ b/src/Authoring/Studio/Palettes/Slide/SlideView.qml
@@ -270,8 +270,20 @@ Rectangle {
verticalAlignment: Text.AlignVCenter
background: Rectangle { color:"#111111" }
wrapMode: Text.WordWrap
- visible: model.variants !== ""
- text: model.variants
+ visible: model.variants !== undefined && model.variants !== ""
+ text: model.variants ? model.variants : ""
+
+ MouseArea {
+ anchors.fill: parent
+ hoverEnabled: true
+ onEntered: {
+ _parentView.showVariantsTooltip(
+ model.index, mapToGlobal(x + width + 2, y));
+ }
+ onExited : {
+ _parentView.hideVariantsTooltip();
+ }
+ }
}
Item {
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
index 1f750f15..9e77a2ce 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
@@ -1012,8 +1012,7 @@ void TimelineGraphicsScene::updateHoverStatus(const QPointF &scenePos)
SValue sValue;
if (propertySystem->GetInstancePropertyValue(rowTree->instance(), property,
sValue)) {
- QString propVal = QString::fromWCharArray(get<TDataStrPtr>(sValue)
- ->GetData());
+ QString propVal = qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->toQString();
if (!propVal.isEmpty()) {
// parse propVal into variantsHash (group => tags)
const QStringList tagPairs = propVal.split(QLatin1Char(','));
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
index 7fa54cb6..c0d7a965 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
@@ -544,6 +544,20 @@ void TimelineWidget::onAssetCreated(qt3dsdm::Qt3DSDMInstanceHandle inInstance)
->createRowFromBinding(binding, bindingParent->getRowTree());
row->updateSubpresentations();
insertToHandlesMap(binding);
+
+ // refresh the created object variants if it is a layer with variants property
+ // set.
+ if (m_bridge->IsLayerInstance(inInstance)) {
+ const auto propertySystem = g_StudioApp.GetCore()->GetDoc()
+ ->GetPropertySystem();
+ qt3dsdm::SValue sValue;
+ if (propertySystem->GetInstancePropertyValue(inInstance,
+ m_bridge->GetLayer().m_variants,
+ sValue)) {
+ if (qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->GetLength() != 0)
+ refreshVariants(inInstance);
+ }
+ }
} else {
qWarning() << "Binding parent was not found.";
}
@@ -755,8 +769,7 @@ void TimelineWidget::onPropertyChanged(qt3dsdm::Qt3DSDMInstanceHandle inInstance
} else if (inProperty == m_bridge->GetLayer().m_variants) {
qt3dsdm::SValue sValue;
if (doc->GetPropertySystem()->GetInstancePropertyValue(inInstance, inProperty, sValue)) {
- QString propVal = QString::fromWCharArray(qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)
- ->GetData());
+ QString propVal = qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->toQString();
if (!propVal.isEmpty()) {
QStringList tagPairs = propVal.split(QLatin1Char(','));
QStringList groups;
@@ -1247,19 +1260,23 @@ void TimelineWidget::setSelectedTimeBarsColor(const QColor &color, bool preview)
}
}
-void TimelineWidget::refreshVariants()
+void TimelineWidget::refreshVariants(int instance)
{
const auto propertySystem = g_StudioApp.GetCore()->GetDoc()->GetPropertySystem();
- const auto layers = g_StudioApp.GetCore()->GetDoc()->getLayers();
- for (auto layer : layers) {
+ QVector<int> layers;
+ if (instance)
+ layers << instance;
+ else
+ layers = g_StudioApp.GetCore()->GetDoc()->getLayers();
+
+ for (auto layer : qAsConst(layers)) {
if (!m_handlesMap.contains(layer))
continue;
qt3dsdm::SValue sValue;
if (propertySystem->GetInstancePropertyValue(layer, m_bridge->GetLayer().m_variants,
sValue)) {
- QString propVal = QString::fromWCharArray(qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)
- ->GetData());
+ QString propVal = qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->toQString();
if (!propVal.isEmpty()) {
QStringList tagPairs = propVal.split(QLatin1Char(','));
QStringList groups;
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h
index ac01367a..d4a76ba1 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h
@@ -73,7 +73,7 @@ public:
void openBarColorDialog();
void onTimeBarColorChanged(const QColor &color);
void setSelectedTimeBarsColor(const QColor &color, bool preview);
- void refreshVariants();
+ void refreshVariants(int instance = 0);
void enableDnD(bool b = true);
bool dndActive() const;
bool blockMousePress() const;
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
index 39405ac4..bf4820ea 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
@@ -53,15 +53,28 @@
// object row constructor
RowTree::RowTree(TimelineGraphicsScene *timelineScene, EStudioObjectType rowType,
const QString &label)
+ : m_rowTimeline(new RowTimeline())
+ , m_scene(timelineScene)
+ , m_rowType(rowType)
+ , m_label(label)
+{
+ CDoc *doc = g_StudioApp.GetCore()->GetDoc();
+ m_onMasterSlide = doc->GetStudioSystem()->GetSlideSystem()
+ ->IsMasterSlide(doc->GetActiveSlide());
+
+ initialize();
+}
+
+// property row constructor
+RowTree::RowTree(TimelineGraphicsScene *timelineScene, const QString &propType)
: InteractiveTimelineItem()
, m_rowTimeline(new RowTimeline())
+ , m_isProperty(true)
+ , m_scene(timelineScene)
+ , m_propertyType(propType)
+ , m_label(propType)
{
- m_scene = timelineScene;
- m_rowType = rowType;
- m_label = label;
- CDoc *doc = g_StudioApp.GetCore()->GetDoc();
- m_onMasterSlide = doc->GetStudioSystem()->GetSlideSystem()->IsMasterSlide(
- doc->GetActiveSlide());
+ m_rowTimeline->m_isProperty = true;
initialize();
}
@@ -83,21 +96,6 @@ int RowTree::instance() const
return static_cast<Qt3DSDMTimelineItemBinding *>(m_binding)->GetInstance();
}
-// property row constructor
-RowTree::RowTree(TimelineGraphicsScene *timelineScene, const QString &propType)
- : InteractiveTimelineItem()
- , m_rowTimeline(new RowTimeline())
-{
- m_scene = timelineScene;
- m_label = propType;
- m_propertyType = propType;
-
- m_isProperty = true;
- m_rowTimeline->m_isProperty = true;
-
- initialize();
-}
-
void RowTree::initialize()
{
setTimelineRow(m_rowTimeline);