summaryrefslogtreecommitdiff
path: root/src/plugins/ctfvisualizer/ctfvisualizertool.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/ctfvisualizer/ctfvisualizertool.cpp')
-rw-r--r--src/plugins/ctfvisualizer/ctfvisualizertool.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/plugins/ctfvisualizer/ctfvisualizertool.cpp b/src/plugins/ctfvisualizer/ctfvisualizertool.cpp
index 96b1489978..2c7a38b7b7 100644
--- a/src/plugins/ctfvisualizer/ctfvisualizertool.cpp
+++ b/src/plugins/ctfvisualizer/ctfvisualizertool.cpp
@@ -29,6 +29,7 @@
#include "ctfstatisticsmodel.h"
#include "ctfstatisticsview.h"
+#include "ctftimelinemodel.h"
#include "ctfvisualizertraceview.h"
#include <coreplugin/actionmanager/actioncontainer.h>
@@ -36,6 +37,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <debugger/analyzer/analyzerconstants.h>
+#include <utils/utilsicons.h>
#include <QAction>
#include <QApplication>
@@ -62,6 +64,8 @@ CtfVisualizerTool::CtfVisualizerTool()
, m_statisticsModel(new CtfStatisticsModel(this))
, m_statisticsView(nullptr)
, m_traceManager(new CtfTraceManager(this, m_modelAggregator.get(), m_statisticsModel.get()))
+ , m_restrictToThreadsButton(new QToolButton)
+ , m_restrictToThreadsMenu(new QMenu(m_restrictToThreadsButton))
{
ActionContainer *menu = ActionManager::actionContainer(Debugger::Constants::M_DEBUG_ANALYZER);
ActionContainer *options = ActionManager::createMenu(Constants::CtfVisualizerMenuId);
@@ -78,6 +82,16 @@ CtfVisualizerTool::CtfVisualizerTool()
options->addAction(command);
m_perspective.setAboutToActivateCallback([this]() { createViews(); });
+
+ m_restrictToThreadsButton->setIcon(Utils::Icons::FILTER.icon());
+ m_restrictToThreadsButton->setToolTip(tr("Restrict to threads"));
+ m_restrictToThreadsButton->setPopupMode(QToolButton::InstantPopup);
+ m_restrictToThreadsButton->setProperty("noArrow", true);
+ m_restrictToThreadsButton->setMenu(m_restrictToThreadsMenu);
+ connect(m_restrictToThreadsMenu, &QMenu::triggered,
+ this, &CtfVisualizerTool::toggleThreadRestriction);
+
+ m_perspective.addToolBarWidget(m_restrictToThreadsButton);
}
CtfVisualizerTool::~CtfVisualizerTool() = default;
@@ -116,6 +130,24 @@ void CtfVisualizerTool::createViews()
m_perspective.setAboutToActivateCallback(Utils::Perspective::Callback());
}
+void CtfVisualizerTool::setAvailableThreads(const QList<CtfTimelineModel *> &threads)
+{
+ m_restrictToThreadsMenu->clear();
+
+ for (auto timelineModel : threads) {
+ QAction *action = m_restrictToThreadsMenu->addAction(timelineModel->displayName());
+ action->setCheckable(true);
+ action->setData(timelineModel->tid());
+ action->setChecked(m_traceManager->isRestrictedTo(timelineModel->tid()));
+ }
+}
+
+void CtfVisualizerTool::toggleThreadRestriction(QAction *action)
+{
+ const int tid = action->data().toInt();
+ m_traceManager->setThreadRestriction(tid, action->isChecked());
+}
+
Timeline::TimelineModelAggregator *CtfVisualizerTool::modelAggregator() const
{
return m_modelAggregator.get();
@@ -169,6 +201,7 @@ void CtfVisualizerTool::loadJson()
zoomControl()->setTrace(m_traceManager->traceBegin(), m_traceManager->traceEnd() + m_traceManager->traceDuration() / 20);
zoomControl()->setRange(m_traceManager->traceBegin(), m_traceManager->traceEnd() + m_traceManager->traceDuration() / 20);
}
+ setAvailableThreads(m_traceManager->getSortedThreads());
thread->deleteLater();
delete task;
delete futureInterface;