# HG changeset patch # User Chris Cannam # Date 1417704499 0 # Node ID 509b4649b172bf7460f9b89238f6006fa48d024d # Parent 966dc61430f8fd494d208cd29d67df6092b3ecbf Quick hack at a multiplex option for transform input (see #1108) diff -r 966dc61430f8 -r 509b4649b172 main/MainWindow.cpp --- a/main/MainWindow.cpp Tue Dec 02 17:53:17 2014 +0000 +++ b/main/MainWindow.cpp Thu Dec 04 14:48:19 2014 +0000 @@ -24,6 +24,7 @@ #include "data/model/SparseOneDimensionalModel.h" #include "data/model/RangeSummarisableTimeValueModel.h" #include "data/model/NoteModel.h" +#include "data/model/AggregateWaveModel.h" #include "data/model/Labeller.h" #include "data/osc/OSCQueue.h" #include "framework/Document.h" @@ -3705,22 +3706,46 @@ m_document->getTransformInputModels(); Model *defaultInputModel = 0; + for (int j = 0; j < pane->getLayerCount(); ++j) { + Layer *layer = pane->getLayer(j); if (!layer) continue; + if (LayerFactory::getInstance()->getLayerType(layer) != LayerFactory::Waveform && !layer->isLayerOpaque()) continue; + Model *model = layer->getModel(); if (!model) continue; + for (size_t k = 0; k < candidateInputModels.size(); ++k) { if (candidateInputModels[k] == model) { defaultInputModel = model; break; } } + if (defaultInputModel) break; } + + if (candidateInputModels.size() > 1) { + // Add an aggregate model as another option + AggregateWaveModel::ChannelSpecList sl; + foreach (Model *m, candidateInputModels) { + RangeSummarisableTimeValueModel *r = + qobject_cast(m); + if (r) { + sl.push_back(AggregateWaveModel::ModelChannelSpec(r, -1)); + } + } + if (!sl.empty()) { + AggregateWaveModel *aggregate = new AggregateWaveModel(sl); + aggregate->setObjectName(tr("Multiplex all of the above")); + candidateInputModels.push_back(aggregate); + //!!! but it leaks + } + } int startFrame = 0, duration = 0; int endFrame = 0;