#include <QEvent>
#include <QToolTip>
#include <QDebug>
+#include <QAction>
#include <KLocalizedString>
#include <KColorScheme>
m_view->viewport()->installEventFilter(this);
m_view->viewport()->setMouseTracking(true);
m_view->setFont(QFont(QStringLiteral("monospace")));
+ m_view->setContextMenuPolicy(Qt::ActionsContextMenu);
+ auto bottomUpViewAction = new QAction(i18n("Bottom-Down View"), this);
+ bottomUpViewAction->setCheckable(true);
+ connect(bottomUpViewAction, &QAction::toggled, this, [this, bottomUpViewAction] {
+ m_showBottomUpData = bottomUpViewAction->isChecked();
+ showData();
+ });
+ m_view->addAction(bottomUpViewAction);
layout()->addWidget(m_view);
}
selectItem(static_cast<FrameGraphicsItem*>(m_view->itemAt(mouseEvent->pos())));
}
} else if (event->type() == QEvent::Resize || event->type() == QEvent::Show) {
- selectItem(m_selectedItem);
+ if (!m_rootItem) {
+ showData();
+ } else {
+ selectItem(m_selectedItem);
+ }
+ } else if (event->type() == QEvent::Hide) {
+ setData(nullptr);
}
return ret;
}
-void FlameGraph::showEvent(QShowEvent* event)
+void FlameGraph::setTopDownData(const TreeData& topDownData)
{
- setData(parseData(m_topDownData));
- QWidget::showEvent(event);
+ m_topDownData = topDownData;
+
+ if (isVisible()) {
+ showData();
+ }
}
-void FlameGraph::hideEvent(QHideEvent* event)
+void FlameGraph::setBottomUpData(const TreeData& bottomUpData)
{
- setData(nullptr);
- QWidget::hideEvent(event);
+ m_bottomUpData = bottomUpData;
}
-void FlameGraph::setTopDownData(const TreeData& topDownData)
+void FlameGraph::showData()
{
- m_topDownData = topDownData;
- if (isVisible()) {
- setData(parseData(topDownData));
- }
+ setData(nullptr);
+ setData(parseData(m_showBottomUpData ? m_bottomUpData : m_topDownData));
}
void FlameGraph::setData(FrameGraphicsItem* rootItem)
~FlameGraph();
void setTopDownData(const TreeData& topDownData);
+ void setBottomUpData(const TreeData& bottomUpData);
protected:
bool eventFilter(QObject* object, QEvent* event) override;
- void showEvent(QShowEvent* event) override;
- void hideEvent(QHideEvent* event) override;
private:
+ void showData();
void setData(FrameGraphicsItem* rootItem);
void selectItem(FrameGraphicsItem* item);
TreeData m_topDownData;
+ TreeData m_bottomUpData;
QGraphicsScene* m_scene;
QGraphicsView* m_view;
FrameGraphicsItem* m_rootItem;
FrameGraphicsItem* m_selectedItem;
int m_minRootWidth;
+ bool m_showBottomUpData = false;
};
#endif // FLAMEGRAPH_H
m_ui->summary, &QLabel::setText);
connect(m_parser, &Parser::topDownDataAvailable,
m_ui->flameGraphTab, &FlameGraph::setTopDownData);
+ connect(m_parser, &Parser::bottomUpDataAvailable,
+ m_ui->flameGraphTab, &FlameGraph::setBottomUpData);
connect(m_parser, &Parser::finished,
this, [&] { m_ui->pages->setCurrentWidget(m_ui->resultsPage); });