50 , m_context{m_context}
55 void createPreset(QPointF pos,
const QByteArray& presetData)
58 if(
auto preset = Process::Preset::fromJson(procs, presetData))
60 Scenario::loadPresetInCable(m_context, sm, *preset, cable);
66 Scenario::createProcessInCable(
67 m_context, sm, proc.creation, proc.duration, proc.setup, cable);
70 void drop(
const QPointF& pos,
const QMimeData& mime)
73 auto source_itv = Scenario::closestParentInterval(&source);
78 m_interval = source_itv;
86 if(mime.hasFormat(score::mime::layerdata()))
90 else if(mime.hasFormat(score::mime::processpreset()))
92 const auto presetData = mime.data(score::mime::processpreset());
94 QMetaObject::invokeMethod(
this, [pos, presetData,
this]() {
95 createPreset(pos, presetData);
96 }, Qt::QueuedConnection);
98 else if(
auto res = handlers.getDrop(mime, m_context); !res.empty())
102 QMetaObject::invokeMethod(
this, [pos, proc = res.front(),
this]() {
103 createProcess(pos, proc);
104 }, Qt::QueuedConnection);
107 else if(mime.hasFormat(score::mime::port()))
109 auto base_port = Dataflow::PortItem::clickedPort;
112 auto& new_port = base_port->port();
113 QMetaObject::invokeMethod(
this, [&new_port,
this]() {
114 Dataflow::replaceCable(this->m_context, cable, new_port);
115 }, Qt::QueuedConnection);
118 else if(mime.hasUrls())
124 qDebug()<<mime.formats();
142 , m_context{m_context}
147 void createPreset(
const QByteArray& presetData)
149 auto& old = item.model();
151 if(
auto preset = Process::Preset::fromJson(procs, presetData))
153 if(preset->key.key == old.concreteKey())
155 if(old.effect() == preset->data)
158 auto& load_preset_ifaces
161 auto cmd = load_preset_ifaces.
make(
162 &Process::LoadPresetCommandFactory::make, old, *preset, m_context);
171 if(
auto p = m.loadProcessFromPreset(*m_interval, *preset, old.position()))
173 linkNewProcess(p, m);
174 m.removeProcess(*m_interval, old.id());
182 auto& old = item.model();
186 if(
auto p = m.createProcessInNewSlot(*m_interval, proc.creation, old.position()))
189 proc.setup(*p, disp);
192 linkNewProcess(p, m);
195 m.removeProcess(*m_interval, old.id());
203 auto& old = item.model();
204 if(p->inlets().size() > 0)
206 const auto dst = p->inlets()[0];
207 const auto type = dst->type();
209 if(old.inlets().size() > 0)
211 auto& old_dst = old.inlets()[0];
212 if(old_dst->type() == type && !qobject_cast<Process::ControlInlet*>(dst)
213 && !qobject_cast<Process::ControlInlet*>(old_dst))
215 for(
auto& edge : old.inlets()[0]->cables())
217 auto& cable = edge.find(m_context);
218 auto& src = cable.source().find(m_context);
219 if(src.type() == type)
221 m.createCable(sm, src, *dst);
224 m.setProperty<Process::Port::p_address>(*dst, old_dst->address());
229 if(p->outlets().size() > 0)
231 const auto src = p->outlets()[0];
232 const auto type = src->type();
234 if(old.outlets().size() > 0)
236 auto& old_src = old.outlets()[0];
237 if(old_src->type() == type && !qobject_cast<Process::ControlInlet*>(src)
238 && !qobject_cast<Process::ControlInlet*>(old_src))
240 for(
auto& edge : old.outlets()[0]->cables())
242 auto& cable = edge.find(m_context);
243 auto& dst = cable.sink().find(m_context);
244 if(dst.type() == type)
246 m.createCable(sm, *src, dst);
249 m.setProperty<Process::Port::p_address>(*src, old_src->address());
250 if(type == Process::PortType::Audio)
252 auto old_audio_src = safe_cast<Process::AudioOutlet*>(old_src);
253 auto audio_src = safe_cast<Process::AudioOutlet*>(src);
254 m.setProperty<Process::AudioOutlet::p_propagate>(
255 *audio_src, old_audio_src->propagate());
258 src->setAddress(old_src->address());
264 void drop(
const QMimeData& mime)
267 auto& model = item.model();
268 m_interval = qobject_cast<Scenario::IntervalModel*>(model.parent());
278 if(mime.hasFormat(score::mime::layerdata()))
282 else if(mime.hasFormat(score::mime::processpreset()))
284 const auto presetData = mime.data(score::mime::processpreset());
285 QMetaObject::invokeMethod(
this, [presetData,
this]() {
286 createPreset(presetData);
287 }, Qt::QueuedConnection);
289 else if(
auto res = handlers.getDrop(mime, m_context); !res.empty())
293 QMetaObject::invokeMethod(
this, [proc = res.front(),
this]() {
295 }, Qt::QueuedConnection);
298 else if(mime.hasUrls())
Definition ProcessContext.hpp:12
Definition DocumentContext.hpp:18