diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineconstants.h b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineconstants.h index 8c796466907..40e4900442d 100644 --- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineconstants.h +++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineconstants.h @@ -69,6 +69,8 @@ const char C_CURVE_PICKER[] = "QmlDesigner.CurvePicker"; const char C_ZOOM_IN[] = "QmlDesigner.ZoomIn"; const char C_ZOOM_OUT[] = "QmlDesigner.ZoomOut"; +const char C_BAR_ITEM_OVERRIDE[] = "Timeline.OverrideColor"; + const int keyFrameSize = 17; const int keyFrameMargin = 2; } // namespace TimelineConstants diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp index 9e73bfaad6c..41b428661bf 100644 --- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp +++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp @@ -44,6 +44,7 @@ #include #include +#include #include #include #include @@ -200,6 +201,11 @@ bool TimelineSectionItem::isSelected() const return m_targetNode.isValid() && m_targetNode.isSelected(); } +ModelNode TimelineSectionItem::targetNode() const +{ + return m_targetNode; +} + QVector TimelineSectionItem::keyframePositions() const { QVector out; @@ -841,17 +847,24 @@ void TimelineBarItem::scrollOffsetChanged() sectionItem()->invalidateBar(); } -void TimelineBarItem::paint(QPainter *painter, - const QStyleOptionGraphicsItem *option, - QWidget *widget) +void TimelineBarItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); - const QColor brushColorSelected = Theme::getColor(Theme::QmlDesigner_HighlightColor); - const QColor brushColor = Theme::getColor(Theme::QmlDesigner_HighlightColor).darker(120); + QColor brushColorSelected = Theme::getColor(Theme::QmlDesigner_HighlightColor); + QColor brushColor = Theme::getColor(Theme::QmlDesigner_HighlightColor).darker(120); const QColor indicatorColor = Theme::getColor(Theme::PanelTextColorLight); + ModelNode target = sectionItem()->targetNode(); + if (target.isValid()) { + QColor overrideColor = target.auxiliaryData(TimelineConstants::C_BAR_ITEM_OVERRIDE).value(); + if (overrideColor.isValid()) { + brushColorSelected = overrideColor; + brushColor = brushColorSelected.darker(120); + } + } + const QRectF itemRect = rect(); painter->save(); @@ -902,6 +915,34 @@ void TimelineBarItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event) } } +void TimelineBarItem::contextMenuEvent(QGraphicsSceneContextMenuEvent* event) +{ + QMenu menu; + QAction* overrideColor = menu.addAction(tr("Override Color")); + + auto setColor = [this] () { + ModelNode target = sectionItem()->targetNode(); + if (target.isValid()) { + QColor current = target.auxiliaryData(TimelineConstants::C_BAR_ITEM_OVERRIDE).value(); + QColor color = QColorDialog::getColor(current, nullptr); + if (color.isValid()) + target.setAuxiliaryData(TimelineConstants::C_BAR_ITEM_OVERRIDE, color); + } + }; + + QObject::connect(overrideColor, &QAction::triggered, setColor); + + QAction* resetColor = menu.addAction(tr("Reset Color")); + auto reset = [this]() { + ModelNode target = sectionItem()->targetNode(); + if (target.isValid()) + target.removeAuxiliaryData(TimelineConstants::C_BAR_ITEM_OVERRIDE); + }; + QObject::connect(resetColor, &QAction::triggered, reset); + + menu.exec(event->screenPos()); +} + TimelineSectionItem *TimelineBarItem::sectionItem() const { /* The parentItem is always a TimelineSectionItem. See constructor */ diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.h b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.h index 92a79559b41..3c34ba39299 100644 --- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.h +++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.h @@ -54,7 +54,7 @@ protected: const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; void hoverMoveEvent(QGraphicsSceneHoverEvent *) override; - + void contextMenuEvent(QGraphicsSceneContextMenuEvent * event) override; private: TimelineSectionItem *sectionItem() const; @@ -105,6 +105,7 @@ public: AbstractView *view() const; bool isSelected() const; + ModelNode targetNode() const; QVector keyframePositions() const; protected: