diff options
author | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-03-13 11:50:48 +0200 |
---|---|---|
committer | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-03-14 17:32:34 +0000 |
commit | b6ca1b2df7a4b48f72be7de6f89d168281b96ef8 (patch) | |
tree | 74f1f5d3ae10149c4d4051a2c9d724b41dcc0772 /src/Authoring/Studio/Palettes/Slide | |
parent | 4631909564c0c928b1d0ade97f385e08c97f0dde (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.cpp | 35 | ||||
-rw-r--r-- | src/Authoring/Studio/Palettes/Slide/SlideModel.h | 11 | ||||
-rw-r--r-- | src/Authoring/Studio/Palettes/Slide/SlideView.cpp | 14 | ||||
-rw-r--r-- | src/Authoring/Studio/Palettes/Slide/SlideView.qml | 2 |
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 !== "" |