42 , m_context{m_context}
47 void createPreset(QPointF pos,
const QByteArray& presetData)
50 if(
auto preset = Process::Preset::fromJson(procs, presetData))
52 Scenario::loadPresetInCable(m_context, sm, *preset, cable);
58 Scenario::createProcessInCable(
59 m_context, sm, proc.creation, proc.duration, proc.setup, cable);
62 void drop(
const QPointF& pos,
const QMimeData& mime)
65 auto source_itv = Scenario::closestParentInterval(&source);
70 m_interval = source_itv;
78 if(mime.hasFormat(score::mime::layerdata()))
82 else if(mime.hasFormat(score::mime::processpreset()))
84 const auto presetData = mime.data(score::mime::processpreset());
86 QMetaObject::invokeMethod(
this, [pos, presetData,
this]() {
87 createPreset(pos, presetData);
88 }, Qt::QueuedConnection);
90 else if(
auto res = handlers.getDrop(mime, m_context); !res.empty())
94 QMetaObject::invokeMethod(
this, [pos, proc = res.front(),
this]() {
95 createProcess(pos, proc);
96 }, Qt::QueuedConnection);
99 else if(mime.hasUrls())
119 , m_context{m_context}
124 void createPreset(
const QByteArray& presetData)
126 auto& old = item.model();
128 if(
auto preset = Process::Preset::fromJson(procs, presetData))
130 if(preset->key.key == old.concreteKey())
132 auto& load_preset_ifaces
135 auto cmd = load_preset_ifaces.
make(
136 &Process::LoadPresetCommandFactory::make, old, *preset, m_context);
145 if(
auto p = m.loadProcessFromPreset(*m_interval, *preset, old.position()))
147 linkNewProcess(p, m);
148 m.removeProcess(*m_interval, old.id());
157 auto& old = item.model();
161 if(
auto p = m.createProcessInNewSlot(*m_interval, proc.creation, old.position()))
164 proc.setup(*p, disp);
167 linkNewProcess(p, m);
170 m.removeProcess(*m_interval, old.id());
178 auto& old = item.model();
179 if(p->inlets().size() > 0)
181 const auto dst = p->inlets()[0];
182 const auto type = dst->type();
184 if(old.inlets().size() > 0)
186 auto& old_dst = old.inlets()[0];
187 if(old_dst->type() == type && !qobject_cast<Process::ControlInlet*>(dst)
188 && !qobject_cast<Process::ControlInlet*>(old_dst))
190 for(
auto& edge : old.inlets()[0]->cables())
192 auto& cable = edge.find(m_context);
193 auto& src = cable.source().find(m_context);
194 if(src.type() == type)
196 m.createCable(sm, src, *dst);
199 m.setProperty<Process::Port::p_address>(*dst, old_dst->address());
204 if(p->outlets().size() > 0)
206 const auto src = p->outlets()[0];
207 const auto type = src->type();
209 if(old.outlets().size() > 0)
211 auto& old_src = old.outlets()[0];
212 if(old_src->type() == type && !qobject_cast<Process::ControlInlet*>(src)
213 && !qobject_cast<Process::ControlInlet*>(old_src))
215 for(
auto& edge : old.outlets()[0]->cables())
217 auto& cable = edge.find(m_context);
218 auto& dst = cable.sink().find(m_context);
219 if(dst.type() == type)
221 m.createCable(sm, *src, dst);
224 m.setProperty<Process::Port::p_address>(*src, old_src->address());
225 if(type == Process::PortType::Audio)
227 auto old_audio_src = safe_cast<Process::AudioOutlet*>(old_src);
228 auto audio_src = safe_cast<Process::AudioOutlet*>(src);
229 m.setProperty<Process::AudioOutlet::p_propagate>(
230 *audio_src, old_audio_src->propagate());
233 src->setAddress(old_src->address());
239 void drop(
const QMimeData& mime)
242 auto& model = item.model();
243 m_interval = qobject_cast<Scenario::IntervalModel*>(model.parent());
253 if(mime.hasFormat(score::mime::layerdata()))
257 else if(mime.hasFormat(score::mime::processpreset()))
259 const auto presetData = mime.data(score::mime::processpreset());
260 QMetaObject::invokeMethod(
this, [presetData,
this]() {
261 createPreset(presetData);
262 }, Qt::QueuedConnection);
264 else if(
auto res = handlers.getDrop(mime, m_context); !res.empty())
268 QMetaObject::invokeMethod(
this, [proc = res.front(),
this]() {
270 }, Qt::QueuedConnection);
273 else if(mime.hasUrls())
Definition ProcessContext.hpp:12