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 if(old.effect() == preset->data)
135 auto& load_preset_ifaces
138 auto cmd = load_preset_ifaces.
make(
139 &Process::LoadPresetCommandFactory::make, old, *preset, m_context);
148 if(
auto p = m.loadProcessFromPreset(*m_interval, *preset, old.position()))
150 linkNewProcess(p, m);
151 m.removeProcess(*m_interval, old.id());
159 auto& old = item.model();
163 if(
auto p = m.createProcessInNewSlot(*m_interval, proc.creation, old.position()))
166 proc.setup(*p, disp);
169 linkNewProcess(p, m);
172 m.removeProcess(*m_interval, old.id());
180 auto& old = item.model();
181 if(p->inlets().size() > 0)
183 const auto dst = p->inlets()[0];
184 const auto type = dst->type();
186 if(old.inlets().size() > 0)
188 auto& old_dst = old.inlets()[0];
189 if(old_dst->type() == type && !qobject_cast<Process::ControlInlet*>(dst)
190 && !qobject_cast<Process::ControlInlet*>(old_dst))
192 for(
auto& edge : old.inlets()[0]->cables())
194 auto& cable = edge.find(m_context);
195 auto& src = cable.source().find(m_context);
196 if(src.type() == type)
198 m.createCable(sm, src, *dst);
201 m.setProperty<Process::Port::p_address>(*dst, old_dst->address());
206 if(p->outlets().size() > 0)
208 const auto src = p->outlets()[0];
209 const auto type = src->type();
211 if(old.outlets().size() > 0)
213 auto& old_src = old.outlets()[0];
214 if(old_src->type() == type && !qobject_cast<Process::ControlInlet*>(src)
215 && !qobject_cast<Process::ControlInlet*>(old_src))
217 for(
auto& edge : old.outlets()[0]->cables())
219 auto& cable = edge.find(m_context);
220 auto& dst = cable.sink().find(m_context);
221 if(dst.type() == type)
223 m.createCable(sm, *src, dst);
226 m.setProperty<Process::Port::p_address>(*src, old_src->address());
227 if(type == Process::PortType::Audio)
229 auto old_audio_src = safe_cast<Process::AudioOutlet*>(old_src);
230 auto audio_src = safe_cast<Process::AudioOutlet*>(src);
231 m.setProperty<Process::AudioOutlet::p_propagate>(
232 *audio_src, old_audio_src->propagate());
235 src->setAddress(old_src->address());
241 void drop(
const QMimeData& mime)
244 auto& model = item.model();
245 m_interval = qobject_cast<Scenario::IntervalModel*>(model.parent());
255 if(mime.hasFormat(score::mime::layerdata()))
259 else if(mime.hasFormat(score::mime::processpreset()))
261 const auto presetData = mime.data(score::mime::processpreset());
262 QMetaObject::invokeMethod(
this, [presetData,
this]() {
263 createPreset(presetData);
264 }, Qt::QueuedConnection);
266 else if(
auto res = handlers.getDrop(mime, m_context); !res.empty())
270 QMetaObject::invokeMethod(
this, [proc = res.front(),
this]() {
272 }, Qt::QueuedConnection);
275 else if(mime.hasUrls())
Definition ProcessContext.hpp:12