Group nodes by app name

This commit is contained in:
Joey Yakimowich-Payne 2026-02-06 14:19:14 -07:00
commit 621d67ebab
3 changed files with 712 additions and 144 deletions

View file

@ -802,13 +802,13 @@ void GraphEditorWidget::onContextMenuRequested(const QPoint &pos) {
QPointF scenePos = m_view->mapToScene(pos);
m_lastContextMenuScenePos = scenePos;
bool hitNode = false;
uint32_t hitPwNodeId = 0;
QtNodes::NodeId hitQtNodeId = 0;
for (auto nodeId : m_model->allNodeIds()) {
const WarpNodeData *data = m_model->warpNodeData(nodeId);
if (!data) {
if (!data)
continue;
}
QPointF nodePos =
m_model->nodeData(nodeId, QtNodes::NodeRole::Position).toPointF();
QSize nodeSize =
@ -817,12 +817,13 @@ void GraphEditorWidget::onContextMenuRequested(const QPoint &pos) {
if (nodeRect.contains(scenePos)) {
hitPwNodeId = data->info.id.value;
hitQtNodeId = nodeId;
hitNode = true;
break;
}
}
QPoint screenPos = m_view->mapToGlobal(pos);
if (hitPwNodeId != 0) {
if (hitNode) {
showNodeContextMenu(screenPos, hitPwNodeId, hitQtNodeId);
} else {
showCanvasContextMenu(screenPos, scenePos);
@ -1673,13 +1674,29 @@ void GraphEditorWidget::updateMeters() {
const WarpNodeData *data = m_model->warpNodeData(nodeId);
if (!data || !row.meter)
continue;
auto peak = m_client->NodeMeterPeak(data->info.id);
if (peak.ok()) {
float level = std::max(peak.value.peak_left, peak.value.peak_right);
row.meter->setLevel(level);
m_model->setNodePeakLevel(nodeId, level);
if (level > 0.001f)
const AppGroupData *group = m_model->appGroupData(nodeId);
if (group) {
float maxLevel = 0.0f;
for (uint32_t memberPwId : group->memberPwIds) {
auto peak = m_client->NodeMeterPeak(warppipe::NodeId{memberPwId});
if (peak.ok())
maxLevel = std::max(maxLevel,
std::max(peak.value.peak_left, peak.value.peak_right));
}
row.meter->setLevel(maxLevel);
m_model->setNodePeakLevel(nodeId, maxLevel);
if (maxLevel > 0.001f)
anyActive = true;
} else {
auto peak = m_client->NodeMeterPeak(data->info.id);
if (peak.ok()) {
float level = std::max(peak.value.peak_left, peak.value.peak_right);
row.meter->setLevel(level);
m_model->setNodePeakLevel(nodeId, level);
if (level > 0.001f)
anyActive = true;
}
}
}
@ -1720,8 +1737,16 @@ void GraphEditorWidget::rebuildNodeMeters() {
if (!data)
continue;
new_pw_ids[data->info.id.value] = true;
m_client->EnsureNodeMeter(data->info.id);
const AppGroupData *group = m_model->appGroupData(nodeId);
if (group) {
for (uint32_t memberPwId : group->memberPwIds) {
new_pw_ids[memberPwId] = true;
m_client->EnsureNodeMeter(warppipe::NodeId{memberPwId});
}
} else {
new_pw_ids[data->info.id.value] = true;
m_client->EnsureNodeMeter(data->info.id);
}
auto *row = new QWidget();
auto *rowLayout = new QHBoxLayout(row);
@ -2299,8 +2324,21 @@ void GraphEditorWidget::updateNodeDetailsPanel(QtNodes::NodeId nodeId) {
QString::fromStdString(info.media_role));
}
addField(QStringLiteral("NODE ID"),
QString::number(info.id.value));
const AppGroupData *groupData = m_model->appGroupData(nodeId);
if (groupData) {
addField(QStringLiteral("STREAMS"),
QString::number(groupData->memberPwIds.size()));
QString memberIds;
for (uint32_t pwId : groupData->memberPwIds) {
if (!memberIds.isEmpty())
memberIds += QStringLiteral(", ");
memberIds += QString::number(pwId);
}
addField(QStringLiteral("MEMBER NODE IDS"), memberIds);
} else {
addField(QStringLiteral("NODE ID"),
QString::number(info.id.value));
}
if (!data->inputPorts.empty()) {
layout->addSpacing(8);