diff --git a/src/libs/tracing/qml/CategoryLabel.qml b/src/libs/tracing/qml/CategoryLabel.qml index bbb4e2735ad..171c92400e4 100644 --- a/src/libs/tracing/qml/CategoryLabel.qml +++ b/src/libs/tracing/qml/CategoryLabel.qml @@ -121,6 +121,8 @@ Item { sourceComponent: RowLabel { label: labels[index]; onSelectBySelectionId: { + if (labelContainer.model.hasMixedTypesInExpandedState) + return; if (labelContainer.reverseSelect) { labelContainer.selectPrevBySelectionId(label.id); } else { diff --git a/src/libs/tracing/timelinemodel.cpp b/src/libs/tracing/timelinemodel.cpp index 528d8abc256..b045c15817d 100644 --- a/src/libs/tracing/timelinemodel.cpp +++ b/src/libs/tracing/timelinemodel.cpp @@ -135,8 +135,8 @@ int TimelineModel::row(int index) const } TimelineModel::TimelineModelPrivate::TimelineModelPrivate(int modelId) : - modelId(modelId), categoryColor(Qt::transparent), expanded(false), - hidden(false), expandedRowCount(1), collapsedRowCount(1) + modelId(modelId), categoryColor(Qt::transparent), hasMixedTypesInExpandedState(false), + expanded(false), hidden(false), expandedRowCount(1), collapsedRowCount(1) { } @@ -536,6 +536,17 @@ void TimelineModel::setCategoryColor(const QColor &color) emit categoryColorChanged(); } +bool TimelineModel::hasMixedTypesInExpandedState() const +{ + return d->hasMixedTypesInExpandedState; +} + +void TimelineModel::setHasMixedTypesInExpandedState(bool value) +{ + d->hasMixedTypesInExpandedState = value; + emit hasMixedTypesInExpandedStateChanged(); +} + QRgb TimelineModel::color(int index) const { Q_UNUSED(index) diff --git a/src/libs/tracing/timelinemodel.h b/src/libs/tracing/timelinemodel.h index 1068e7c08e5..53b8835017d 100644 --- a/src/libs/tracing/timelinemodel.h +++ b/src/libs/tracing/timelinemodel.h @@ -42,6 +42,7 @@ class TRACING_EXPORT TimelineModel : public QObject Q_PROPERTY(QString displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged) Q_PROPERTY(QString tooltip READ tooltip NOTIFY tooltipChanged) Q_PROPERTY(QColor categoryColor READ categoryColor NOTIFY categoryColorChanged) + Q_PROPERTY(bool hasMixedTypesInExpandedState READ hasMixedTypesInExpandedState NOTIFY hasMixedTypesInExpandedStateChanged) Q_PROPERTY(bool empty READ isEmpty NOTIFY contentChanged) Q_PROPERTY(bool hidden READ hidden WRITE setHidden NOTIFY hiddenChanged) Q_PROPERTY(bool expanded READ expanded WRITE setExpanded NOTIFY expandedChanged) @@ -100,6 +101,10 @@ public: QColor categoryColor() const; void setCategoryColor(const QColor &color); + // if this is disabled, a click on the row label will select the single type it contains + bool hasMixedTypesInExpandedState() const; + void setHasMixedTypesInExpandedState(bool value); + // Methods which can optionally be implemented by child models. Q_INVOKABLE virtual QRgb color(int index) const; virtual QVariantList labels() const; @@ -135,6 +140,7 @@ signals: void displayNameChanged(); void tooltipChanged(); void categoryColorChanged(); + void hasMixedTypesInExpandedStateChanged(); void labelsChanged(); void detailsChanged(); diff --git a/src/libs/tracing/timelinemodel_p.h b/src/libs/tracing/timelinemodel_p.h index 306464a1197..98e7af20fef 100644 --- a/src/libs/tracing/timelinemodel_p.h +++ b/src/libs/tracing/timelinemodel_p.h @@ -140,6 +140,7 @@ public: QString displayName; QString tooltip; QColor categoryColor; + bool hasMixedTypesInExpandedState; bool expanded; bool hidden;