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();
134 QPointer<const Process::NodeItem> item;
142 , m_context{m_context}
147 void createPreset(
const QByteArray& presetData)
151 auto& old = item->model();
153 if(
auto preset = Process::Preset::fromJson(procs, presetData))
155 if(preset->key.key == old.concreteKey())
157 if(old.effect() == preset->data)
160 auto& load_preset_ifaces
163 auto cmd = load_preset_ifaces.
make(
164 &Process::LoadPresetCommandFactory::make, old, *preset, m_context);
173 if(
auto p = m.loadProcessFromPreset(*m_interval, *preset, old.position()))
175 linkNewProcess(p, m);
176 m.removeProcess(*m_interval, old.id());
186 auto& old = item->model();
190 if(
auto p = m.createProcessInNewSlot(*m_interval, proc.creation, old.position()))
193 proc.setup(*p, disp);
196 linkNewProcess(p, m);
199 m.removeProcess(*m_interval, old.id());
209 auto& old = item->model();
210 if(p->inlets().size() > 0)
212 const auto dst = p->inlets()[0];
213 const auto type = dst->type();
215 if(old.inlets().size() > 0)
217 auto& old_dst = old.inlets()[0];
218 if(old_dst->type() == type && !qobject_cast<Process::ControlInlet*>(dst)
219 && !qobject_cast<Process::ControlInlet*>(old_dst))
221 for(
auto& edge : old.inlets()[0]->cables())
223 auto& cable = edge.find(m_context);
224 auto& src = cable.source().find(m_context);
225 if(src.type() == type)
227 m.createCable(sm, src, *dst);
230 m.setProperty<Process::Port::p_address>(*dst, old_dst->address());
235 if(p->outlets().size() > 0)
237 const auto src = p->outlets()[0];
238 const auto type = src->type();
240 if(old.outlets().size() > 0)
242 auto& old_src = old.outlets()[0];
243 if(old_src->type() == type && !qobject_cast<Process::ControlInlet*>(src)
244 && !qobject_cast<Process::ControlInlet*>(old_src))
246 for(
auto& edge : old.outlets()[0]->cables())
248 auto& cable = edge.find(m_context);
249 auto& dst = cable.sink().find(m_context);
250 if(dst.type() == type)
252 m.createCable(sm, *src, dst);
255 m.setProperty<Process::Port::p_address>(*src, old_src->address());
256 if(type == Process::PortType::Audio)
258 auto old_audio_src = safe_cast<Process::AudioOutlet*>(old_src);
259 auto audio_src = safe_cast<Process::AudioOutlet*>(src);
260 m.setProperty<Process::AudioOutlet::p_propagate>(
261 *audio_src, old_audio_src->propagate());
264 src->setAddress(old_src->address());
270 void drop(
const QMimeData& mime)
275 auto& model = item->model();
276 m_interval = qobject_cast<Scenario::IntervalModel*>(model.parent());
286 if(mime.hasFormat(score::mime::layerdata()))
290 else if(mime.hasFormat(score::mime::processpreset()))
292 const auto presetData = mime.data(score::mime::processpreset());
293 QMetaObject::invokeMethod(
this, [presetData,
this]() {
294 createPreset(presetData);
295 }, Qt::QueuedConnection);
297 else if(
auto res = handlers.getDrop(mime, m_context); !res.empty())
301 QMetaObject::invokeMethod(
this, [proc = res.front(),
this]() {
303 }, Qt::QueuedConnection);
306 else if(mime.hasUrls())
Definition ProcessContext.hpp:12
Definition DocumentContext.hpp:18