summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Studio/Palettes/Slide
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2019-03-13 11:50:48 +0200
committerMahmoud Badri <mahmoud.badri@qt.io>2019-03-14 17:32:34 +0000
commitb6ca1b2df7a4b48f72be7de6f89d168281b96ef8 (patch)
tree74f1f5d3ae10149c4d4051a2c9d724b41dcc0772 /src/Authoring/Studio/Palettes/Slide
parent4631909564c0c928b1d0ade97f385e08c97f0dde (diff)
Improve several parts of the variant tags feature
- Update slide view variants tooltip immediately upon tag/group rename. - Fix flicker upon first showing of the filtering dialog. - Word wrap the "empty variants" hint text. - Preserve groups addition order (in inspector and filter dialog). - Use predefined colors for newly created groups. - Add a border around tags in the timeline rows. - Other minor relevant tweaks. Task-number: QT3DS-3114 Change-Id: I2b345f94784fefda5fa1a004bb73dccbad2ddae9 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src/Authoring/Studio/Palettes/Slide')
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideModel.cpp35
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideModel.h11
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideView.cpp14
-rw-r--r--src/Authoring/Studio/Palettes/Slide/SlideView.qml2
4 files changed, 34 insertions, 28 deletions
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideModel.cpp b/src/Authoring/Studio/Palettes/Slide/SlideModel.cpp
index a580d702..66ff7ee1 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideModel.cpp
+++ b/src/Authoring/Studio/Palettes/Slide/SlideModel.cpp
@@ -60,7 +60,7 @@ QVariant SlideModel::data(const QModelIndex &index, int role) const
int slideIdx = GetDoc()->GetStudioSystem()->GetSlideSystem()->GetSlideIndex(m_slides[row]);
if (slideIdx < m_variantsModel.size()) {
const auto variantsDef = g_StudioApp.GetCore()->getProjectFile().variantsDef();
- const auto keys = m_variantsModel[slideIdx].keys();
+ const auto keys = m_variantsModelKeys[slideIdx];
QString templ = QString::fromWCharArray(L"<font color='%1'>\u25A0</font>");
QString slideVariants;
for (auto g : keys) // variants groups
@@ -360,15 +360,18 @@ void SlideModel::setSlideName(const qt3dsdm::Qt3DSDMSlideHandle &handle, const Q
}
}
-void SlideModel::refreshVariants(const QVector<QHash<QString, QStringList>> &vModel)
+void SlideModel::refreshVariants(const QVector<QHash<QString, QStringList>> &vModel,
+ const QVector<QStringList> &vModelKeys)
{
m_variantsModel.clear();
+ m_variantsModelKeys.clear();
if (vModel.isEmpty()) {
const auto *slideSystem = GetDoc()->GetStudioSystem()->GetSlideSystem();
int slideCount = slideSystem->GetSlideCount(slideSystem->GetMasterSlide(
GetDoc()->GetActiveSlide()));
m_variantsModel.resize(slideCount);
+ m_variantsModelKeys.resize(slideCount);
const auto propertySystem = GetDoc()->GetPropertySystem();
const auto layers = GetDoc()->getLayers();
@@ -384,6 +387,9 @@ void SlideModel::refreshVariants(const QVector<QHash<QString, QStringList>> &vMo
QStringList pair = tagPairs[i].split(QLatin1Char(':'));
if (!m_variantsModel[slideIdx][pair[0]].contains(pair[1]))
m_variantsModel[slideIdx][pair[0]].append(pair[1]);
+
+ if (!m_variantsModelKeys[slideIdx].contains(pair[0]))
+ m_variantsModelKeys[slideIdx].append(pair[0]);
}
}
}
@@ -397,10 +403,14 @@ void SlideModel::refreshVariants(const QVector<QHash<QString, QStringList>> &vMo
if (!m_variantsModel[i][g].contains(m_variantsModel[0][g][j]))
m_variantsModel[i][g].append(m_variantsModel[0][g][j]);
}
+
+ if (!m_variantsModelKeys[i].contains(g))
+ m_variantsModelKeys[i].append(g);
}
}
} else {
m_variantsModel = vModel;
+ m_variantsModelKeys = vModelKeys;
}
Q_EMIT dataChanged(this->index(0, 0), this->index(rowCount() - 1, 0), {VariantsRole});
@@ -411,11 +421,16 @@ CDoc *SlideModel::GetDoc() const
return g_StudioApp.GetCore()->GetDoc();
}
-long SlideModel::slideIndex(const qt3dsdm::Qt3DSDMSlideHandle &handle)
+long SlideModel::slideIndex(const qt3dsdm::Qt3DSDMSlideHandle &handle) const
{
return GetDoc()->GetStudioSystem()->GetSlideSystem()->GetSlideIndex(handle);
}
+int SlideModel::rowToSlideIndex(int row) const
+{
+ return GetDoc()->GetStudioSystem()->GetSlideSystem()->GetSlideIndex(m_slides[row]);
+}
+
CClientDataModelBridge *SlideModel::GetBridge() const
{
auto doc = GetDoc();
@@ -424,17 +439,6 @@ 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)
{
@@ -461,6 +465,3 @@ void SlideModel::setSelectedSlideIndex(const QModelIndex &index)
m_selectedRow = index.row();
Q_EMIT dataChanged(this->index(0, 0), this->index(rowCount() - 1, 0), {SelectedRole});
}
-
-
-
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideModel.h b/src/Authoring/Studio/Palettes/Slide/SlideModel.h
index b92a01c5..0b1deab1 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideModel.h
+++ b/src/Authoring/Studio/Palettes/Slide/SlideModel.h
@@ -77,16 +77,18 @@ public:
void refreshSlideLabel(qt3dsdm::Qt3DSDMInstanceHandle instanceHandle,
qt3dsdm::Qt3DSDMPropertyHandle propertyHandle);
void setSelectedSlideIndex(const QModelIndex &index);
- void refreshVariants(const QVector<QHash<QString, QStringList>> &vModel = {});
- QHash<QString, QStringList> variantsSlideModel(int row) const;
- QVector<QHash<QString, QStringList> > variantsModel() const;
+ void refreshVariants(const QVector<QHash<QString, QStringList>> &vModel = {},
+ const QVector<QStringList> &vModelKeys = {});
+ int rowToSlideIndex(int row) const;
+ QVector<QHash<QString, QStringList> > variantsModel() const { return m_variantsModel; }
+ QVector<QStringList> variantsModelKeys() const { return m_variantsModelKeys; }
private:
bool hasSlideWithName(const QString &name) const;
QString slideName(const qt3dsdm::Qt3DSDMSlideHandle &handle) const;
void setSlideName(const qt3dsdm::Qt3DSDMSlideHandle &handle, const QString &name);
inline CDoc *GetDoc() const;
- inline long slideIndex(const qt3dsdm::Qt3DSDMSlideHandle &handle);
+ inline long slideIndex(const qt3dsdm::Qt3DSDMSlideHandle &handle) const;
inline CClientDataModelBridge *GetBridge() const;
QVector<qt3dsdm::Qt3DSDMSlideHandle> m_slides;
@@ -94,6 +96,7 @@ private:
int m_rearrangeStartRow = -1;
int m_rearrangeEndRow = -1;
QVector<QHash<QString, QStringList> > m_variantsModel;
+ QVector<QStringList> m_variantsModelKeys;
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 d54ec277..ba8dd5d5 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp
+++ b/src/Authoring/Studio/Palettes/Slide/SlideView.cpp
@@ -51,9 +51,9 @@ SlideView::SlideView(QWidget *parent) : QQuickWidget(parent)
, m_MasterSlideModel(new SlideModel(1, this))
, m_SlidesModel(new SlideModel(0, this))
, m_CurrentModel(m_SlidesModel)
+ , m_variantsToolTip(new QLabel(this))
, 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);
@@ -191,16 +191,18 @@ void SlideView::showContextMenu(int x, int y, int row)
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) {
+ const auto variantsDef = g_StudioApp.GetCore()->getProjectFile().variantsDef();
+ const auto slideIndex = m_CurrentModel->rowToSlideIndex(row);
+ const auto variantsModel = m_CurrentModel->variantsModel()[slideIndex];
+ const auto variantsModelKeys = m_CurrentModel->variantsModelKeys()[slideIndex];
+ for (auto &g : variantsModelKeys) {
tooltipStr.append("<tr><td>");
tooltipStr.append(templ.arg(variantsDef[g].m_color).arg(g + ": "));
tooltipStr.append("</td><td>");
- for (auto &t : slideVariants[g])
+ const auto tags = variantsModel[g];
+ for (auto &t : tags)
tooltipStr.append(t + ", ");
tooltipStr.chop(2);
tooltipStr.append("</td></tr>");
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.qml b/src/Authoring/Studio/Palettes/Slide/SlideView.qml
index 9efa20a5..7100ed8a 100644
--- a/src/Authoring/Studio/Palettes/Slide/SlideView.qml
+++ b/src/Authoring/Studio/Palettes/Slide/SlideView.qml
@@ -270,7 +270,7 @@ Rectangle {
leftPadding: 3
topPadding: -3
bottomPadding: 8
- background: Rectangle { color:_variantsSlideViewBGColor }
+ background: Rectangle { color: _variantsSlideViewBGColor }
wrapMode: Text.WrapAnywhere
lineHeight: .6
visible: model.variants !== undefined && model.variants !== ""