summaryrefslogtreecommitdiffstats
path: root/src/Authoring
diff options
context:
space:
mode:
authorJanne Kangas <janne.kangas@qt.io>2018-06-06 10:09:01 +0300
committerJanne Kangas <janne.kangas@qt.io>2018-06-27 08:29:05 +0000
commitb1a5c793e31aa68e5f33ed7b64e0b1563d5efc0a (patch)
treeb9a48f56cc22dc2df2e86a37f55fb9330a838937 /src/Authoring
parent7045f185a1efae8dee4fcb425a0b2d92d21303ff (diff)
Improve datainput visualization in timeline
Show controlling datainput over time context root (scene or component) timeline bar. Change bar color when animation has controlling datainput. Task-ID: QT3DS-1662 Change-Id: I19b4be622a48b9a3c8c5416bf3fc7c7b319cff68 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src/Authoring')
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/RowManager.cpp2
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineConstants.h2
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp24
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h3
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp10
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp46
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.h2
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.cpp1
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.h1
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.cpp8
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.h2
-rw-r--r--src/Authoring/Studio/images.qrc2
-rw-r--r--src/Authoring/Studio/images/Objects-DataInput-White.pngbin0 -> 363 bytes
-rw-r--r--src/Authoring/Studio/images/Objects-DataInput-White@2x.pngbin0 -> 601 bytes
14 files changed, 99 insertions, 4 deletions
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/RowManager.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/RowManager.cpp
index defbf1ff..d78bed7f 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/RowManager.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/RowManager.cpp
@@ -275,9 +275,11 @@ void RowManager::updateRulerDuration(bool updateMaxDuration)
if (dur_i > maxDuration)
maxDuration = dur_i;
}
+ rootRow->rowTimeline()->setEndTime(maxDuration);
}
m_scene->ruler()->setDuration(duration);
+
if (updateMaxDuration)
m_scene->ruler()->setMaxDuration(maxDuration);
}
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineConstants.h b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineConstants.h
index 9c3ab457..52a54e7a 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineConstants.h
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineConstants.h
@@ -73,6 +73,8 @@ namespace TimelineConstants
const char ROW_COLOR_DURATION_SELECTED[] = "#80000000";
const char ROW_COLOR_DND_SRC[] = "#464600";
const char ROW_COLOR_DND_TGT[] = "#292929";
+ const char ROW_COLOR_DATAINPUT_TEXT[] = "#ffffff";
+ const char ROW_COLOR_DATAINPUT_DURATION[] = "#ff5102";
const char ROW_TEXT_COLOR[] = "#bbbbbb";
const char ROW_TEXT_COLOR_DISABLED[] = "#888888";
const char PLAYHEAD_COLOR[] = "#ff0066";
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
index 65aa65cc..a1efdb72 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
@@ -337,6 +337,16 @@ void TimelineGraphicsScene::setTimelineScale(int scl)
static_cast<RowTimeline *>(m_layoutTimeline->itemAt(i)->graphicsItem())->updatePosition();
}
+void TimelineGraphicsScene::setControllerText(const QString &controller)
+{
+ // check that we have scene/container root item at index 1
+ if (m_layoutTimeline->count() < 2)
+ return;
+
+ RowTimeline *rt = static_cast<RowTimeline *>(m_layoutTimeline->itemAt(1)->graphicsItem());
+ rt->setControllerText(controller);
+}
+
void TimelineGraphicsScene::updateTimelineLayoutWidth()
{
double timelineWidth = TimelineConstants::RULER_EDGE_OFFSET * 2
@@ -347,6 +357,20 @@ void TimelineGraphicsScene::updateTimelineLayoutWidth()
m_layoutTimeline->setMaximumWidth(timelineWidth);
}
+void TimelineGraphicsScene::updateControllerLayoutWidth()
+{
+ if (m_layoutTimeline->count() < 2)
+ return;
+ auto root = m_layoutTimeline->itemAt(1);
+
+ static_cast<RowTimeline *>(root->graphicsItem())->setEndTime(ruler()->duration());
+}
+
+void TimelineGraphicsScene::updateController()
+{
+ setControllerText(m_widgetTimeline->toolbar()->getCurrentController());
+}
+
void TimelineGraphicsScene::commitMoveRows()
{
if (!m_rowMover->insertionTarget()
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h
index ec878bf0..525421ae 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h
@@ -66,7 +66,10 @@ public:
virtual ~TimelineGraphicsScene();
void setTimelineScale(int scale);
+ void setControllerText(const QString &controller);
void updateTimelineLayoutWidth();
+ void updateControllerLayoutWidth();
+ void updateController();
Ruler *ruler() const;
PlayHead *playHead() const;
RowManager *rowManager() const;
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
index 71688bcb..8088d170 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp
@@ -267,10 +267,19 @@ TimelineWidget::TimelineWidget(const QSize &preferredSize, QWidget *parent)
m_graphicsScene->setTimelineScale(scale);
});
+ connect(m_toolbar, &TimelineToolbar::controllerChanged, this,
+ [this](const QString &controller) {
+ m_graphicsScene->setControllerText(controller);
+ });
+
connect(m_graphicsScene->ruler(), &Ruler::maxDurationChanged, this, [this]() {
m_graphicsScene->updateTimelineLayoutWidth();
});
+ connect(m_graphicsScene->ruler(), &Ruler::durationChanged, this, [this]() {
+ m_graphicsScene->updateControllerLayoutWidth();
+ });
+
// data model listeners
g_StudioApp.GetCore()->GetDispatch()->AddPresentationChangeListener(this);
g_StudioApp.GetCore()->GetDispatch()->AddClientPlayChangeListener(this);
@@ -689,6 +698,7 @@ void TimelineWidget::onAsyncUpdate()
m_graphicsScene->updateSnapSteps();
m_fullReconstruct = false;
m_graphicsScene->rowManager()->updateFiltering();
+ m_graphicsScene->updateController();
onSelectionChange(doc->GetSelectedValue());
} else {
if (!m_moveMap.isEmpty()) {
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp
index b35b7fe3..1e34762e 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.cpp
@@ -38,6 +38,7 @@
#include "Bindings/ITimelineItemBinding.h"
#include "Bindings/ITimelineTimebar.h"
#include "Bindings/Qt3DSDMTimelineItemProperty.h"
+#include "AppFonts.h"
#include <QtGui/qpainter.h>
#include <QtGui/qbrush.h>
@@ -92,8 +93,9 @@ void RowTimeline::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio
painter->fillRect(0, 0, size().width(), currentHeight, bgColor);
}
- // Duration
- if (m_rowTree->hasDurationBar()) {
+ // Duration. Draw duration bar (for scene/component root) also if it has
+ // datainput controller
+ if (m_rowTree->hasDurationBar() || m_controllerDataInput.size()) {
painter->save();
// fully outside ancestors' limits, draw fully hashed
@@ -112,17 +114,47 @@ void RowTimeline::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio
// draw main duration part
double x = qMax(m_startX, m_minStartX);
double w = qMin(m_endX, m_maxEndX) - x;
+ static const int marginY = 3;
painter->setPen(Qt::NoPen);
- painter->fillRect(QRect(x, 0, w, currentHeight), m_barColor);
+
+ if (m_controllerDataInput.size()) {
+ painter->fillRect(QRect(x, 0, w, currentHeight),
+ QColor(TimelineConstants::ROW_COLOR_DATAINPUT_DURATION));
+ } else {
+ painter->fillRect(QRect(x, 0, w, currentHeight), m_barColor);
+ }
if ( m_state == Selected) {
// draw selection overlay on bar
- int marginY = 3;
painter->fillRect(QRect(x, marginY, w, currentHeight - marginY * 2),
QColor(TimelineConstants::ROW_COLOR_DURATION_SELECTED));
}
+ if (m_controllerDataInput.size()) {
+ static const QPixmap pixDataInput
+ = QPixmap(":/images/Objects-DataInput-White.png");
+ static const QFont normalFont = CAppFonts::GetInstance()->GetNormalFont();
+ static const QFontMetrics fm(normalFont);
+
+ // need clip region to limit datainput icon visibility to the same rect as we use
+ // for text
+ painter->setClipRect(x, 0, w, currentHeight);
+ painter->setClipping(true);
+ painter->setPen(QPen(QColor(TimelineConstants::ROW_COLOR_DATAINPUT_TEXT), 2));
+ painter->drawText(QRect(x + pixDataInput.width(), 0, w, currentHeight),
+ m_controllerDataInput, QTextOption(Qt::AlignCenter));
+ // place the icon marginY amount away from the datainput name
+ int textwidth = fm.width(m_controllerDataInput);
+ int iconx = x + (w - textwidth) / 2;
+ if (iconx < x)
+ iconx = x;
+ painter->drawPixmap(iconx, marginY, pixDataInput.width(), pixDataInput.height(),
+ pixDataInput);
+ painter->setPen(Qt::NoPen);
+ painter->setClipping(false);
+ }
+
// draw hashed part before
painter->setBrush(QBrush(QColor(TimelineConstants::ROW_COLOR_DURATION_OFF1),
Qt::BDiagPattern));
@@ -626,6 +658,12 @@ void RowTimeline::setBarColor(const QColor &color)
update();
}
+void RowTimeline::setControllerText(const QString &controller)
+{
+ m_controllerDataInput = controller;
+ update();
+}
+
void RowTimeline::updateChildrenStartRecursive(RowTree *rowTree, double oldStartX)
{
// Update all bound childred
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.h b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.h
index 2a7dd7c9..342b8782 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.h
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTimeline.h
@@ -58,6 +58,7 @@ public:
void setStartX(double startX);
void setEndX(double endX);
void setBarColor(const QColor &color);
+ void setControllerText(const QString &controller);
void putSelectedKeyframesOnTop();
void updateKeyframes();
void insertKeyframe(Keyframe *keyframe);
@@ -107,6 +108,7 @@ private:
double m_minStartX = 0;
double m_maxEndX = 0;
bool m_isProperty = false; // used in the destructor
+ QString m_controllerDataInput;
QList<Keyframe *> m_keyframes;
QColor m_barColor;
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.cpp
index 30496f9f..be0cb878 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.cpp
@@ -171,6 +171,7 @@ void Ruler::setDuration(double duration)
if (m_duration != duration) {
m_duration = duration;
update();
+ emit durationChanged(m_duration);
}
}
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.h b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.h
index 8715d1d4..a601c304 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.h
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/Ruler.h
@@ -60,6 +60,7 @@ protected:
signals:
void maxDurationChanged(double maxDuration);
+ void durationChanged(double duration);
private:
const QString timestampString(int timeMs);
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.cpp
index 15fb3144..5b505c11 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.cpp
@@ -194,6 +194,11 @@ void TimelineToolbar::setTime(long totalMillis)
m_timeLabel->setText(QString::asprintf("%01d:%02d.%03d", mins, secs, millis));
}
+QString TimelineToolbar::getCurrentController() const
+{
+ return m_currController;
+}
+
void TimelineToolbar::updatePlayButtonState(bool started)
{
if (started) {
@@ -280,6 +285,7 @@ void TimelineToolbar::updateDataInputStatus()
updateTimelineTitleColor(false);
}
m_diLabel->setText(m_currController);
+ emit controllerChanged(m_currController);
}
}
@@ -325,6 +331,8 @@ void TimelineToolbar::onDataInputChange(int handle, int instance, const QString
updateTimelineTitleColor(false);
}
+ emit controllerChanged(m_currController);
+
// To indicate that this presentation timeline is controlled by data input,
// we set "controlled property" of this time context root (scene or component)
// to contain the name of controller followed by special indicator "@timeline".
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.h b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.h
index 77298c8a..ebd0c7bb 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.h
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/TimelineToolbar.h
@@ -53,6 +53,7 @@ signals:
void firstFrameTriggered();
void stopTriggered();
void playTriggered();
+ void controllerChanged(const QString &controller);
void lastFrameTriggered();
void timelineScaleChanged(int scale);
void setDurationTriggered();
@@ -61,6 +62,7 @@ public:
TimelineToolbar();
virtual ~TimelineToolbar();
void setTime(long totalMillis);
+ QString getCurrentController() const;
// IDataModelListener
void OnBeginDataModelNotifications() override;
diff --git a/src/Authoring/Studio/images.qrc b/src/Authoring/Studio/images.qrc
index 4e018f64..be5904a3 100644
--- a/src/Authoring/Studio/images.qrc
+++ b/src/Authoring/Studio/images.qrc
@@ -277,6 +277,8 @@
<file>images/remote-disabled@2x.png</file>
<file>images/Assets-Model.png</file>
<file>images/Assets-Model@2x.png</file>
+ <file>images/Objects-DataInput-White.png</file>
+ <file>images/Objects-DataInput-White@2x.png</file>
</qresource>
<qresource prefix="/startup">
<file alias="open_dialog.png">images/open_dialog.png</file>
diff --git a/src/Authoring/Studio/images/Objects-DataInput-White.png b/src/Authoring/Studio/images/Objects-DataInput-White.png
new file mode 100644
index 00000000..346f1c86
--- /dev/null
+++ b/src/Authoring/Studio/images/Objects-DataInput-White.png
Binary files differ
diff --git a/src/Authoring/Studio/images/Objects-DataInput-White@2x.png b/src/Authoring/Studio/images/Objects-DataInput-White@2x.png
new file mode 100644
index 00000000..a5e1a406
--- /dev/null
+++ b/src/Authoring/Studio/images/Objects-DataInput-White@2x.png
Binary files differ