44 DomConnection *result =
new DomConnection;
46 result->setElementSender(sender());
47 result->setElementSignal(signal());
48 result->setElementReceiver(receiver());
49 result->setElementSlot(slot());
51 DomConnectionHints *hints =
new DomConnectionHints;
52 QList<DomConnectionHint *> list;
54 QPoint sp = endPointPos(EndPoint::Source);
55 QPoint tp = endPointPos(EndPoint::Target);
57 DomConnectionHint *hint =
new DomConnectionHint;
58 hint->setAttributeType(u"sourcelabel"_s);
59 hint->setElementX(sp.x());
60 hint->setElementY(sp.y());
63 hint =
new DomConnectionHint;
64 hint->setAttributeType(u"destinationlabel"_s);
65 hint->setElementX(tp.x());
66 hint->setElementY(tp.y());
69 hints->setElementHint(list);
70 result->setElementHints(hints);
125 const QObject *source = object(EndPoint::Source);
129 const QObject *target = object(EndPoint::Target);
133 if (m_slot.isEmpty() || m_signal.isEmpty())
136 if (
const QWidget *sourceWidget = qobject_cast<
const QWidget*>(source))
137 if (!background->isAncestorOf(sourceWidget))
140 if (
const QWidget *targetWidget = qobject_cast<
const QWidget*>(target))
141 if (!background->isAncestorOf(targetWidget))
261 sigslot_con->widget(EndPoint::Source),
262 sigslot_con->widget(EndPoint::Target),
263 m_form_window->core()->topLevel());
265 dialog.setSignalSlot(sigslot_con->signal(), sigslot_con->slot());
268 if (dialog.exec() == QDialog::Accepted) {
269 const QString newSignal = dialog.signal();
270 const QString newSlot = dialog.slot();
271 if (sigslot_con->signal() != newSignal || sigslot_con->slot() != newSlot) {
273 m_form_window->commandHistory()->push(cmd);
284 Q_ASSERT(source !=
nullptr);
285 Q_ASSERT(destination !=
nullptr);
287 ConnectDialog dialog(m_form_window, source, destination, m_form_window->core()->topLevel());
290 if (dialog.exec() == QDialog::Accepted) {
292 con->setSignal(dialog.signal());
293 con->setSlot(dialog.slot());
352 if (connections ==
nullptr)
363 QStringList existingSlots, existingSignals;
364 SignalSlotDialog::existingMethodsFromMemberSheet(m_form_window->core(), parent,
365 existingSlots, existingSignals);
366 QStringList fakeSlots, fakeSignals;
367 SignalSlotDialog::fakeMethodsFromMetaDataBase(m_form_window->core(), parent,
368 fakeSlots, fakeSignals);
370 setBackground(parent);
372 const auto &list = connections->elementConnection();
373 for (
const DomConnection *dom_con : list) {
374 QObject *source = objectByName(parent, dom_con->elementSender());
375 if (source ==
nullptr) {
376 qDebug(
"SignalSlotEditor::fromUi(): no source widget called \"%s\"",
377 dom_con->elementSender().toUtf8().constData());
380 QObject *destination = objectByName(parent, dom_con->elementReceiver());
381 if (destination ==
nullptr) {
382 qDebug(
"SignalSlotEditor::fromUi(): no destination widget called \"%s\"",
383 dom_con->elementReceiver().toUtf8().constData());
387 QPoint sp = QPoint(20, 20), tp = QPoint(20, 20);
388 const DomConnectionHints *dom_hints = dom_con->elementHints();
389 if (dom_hints !=
nullptr) {
390 const auto &hints = dom_hints->elementHint();
391 for (DomConnectionHint *hint : hints) {
392 QString attr_type = hint->attributeType();
393 QPoint p = QPoint(hint->elementX(), hint->elementY());
394 if (attr_type ==
"sourcelabel"_L1)
396 else if (attr_type ==
"destinationlabel"_L1)
401 const QString sourceSignal = dom_con->elementSignal();
402 if (source == parent && !existingSignals.contains(sourceSignal)
403 && !fakeSignals.contains(sourceSignal)) {
404 fakeSignals.append(sourceSignal);
407 const QString destSlot = dom_con->elementSlot();
408 if (destination == parent && !existingSlots.contains(destSlot)
409 && !fakeSlots.contains(destSlot)) {
410 fakeSlots.append(destSlot);
414 SignalSlotConnection *con =
new SignalSlotConnection(
this);
416 con->setEndPoint(EndPoint::Source, source, sp);
417 con->setEndPoint(EndPoint::Target, destination, tp);
418 con->setSignal(sourceSignal);
419 con->setSlot(destSlot);
422 SignalSlotDialog::fakeMethodsToMetaDataBase(m_form_window->core(), parent,
423 fakeSlots, fakeSignals);
461 if (member == con->signal())
464 m_form_window->beginCommand(QApplication::translate(
"Command",
"Change signal"));
465 undoStack()->push(
new SetMemberCommand(con, EndPoint::Source, member,
this));
466 if (!signalMatchesSlot(m_form_window->core(), member, con->slot()))
467 undoStack()->push(
new SetMemberCommand(con, EndPoint::Target, QString(),
this));
468 m_form_window->endCommand();
473 if (member == con->slot())
476 m_form_window->beginCommand(QApplication::translate(
"Command",
"Change slot"));
477 undoStack()->push(
new SetMemberCommand(con, EndPoint::Target, member,
this));
478 if (!signalMatchesSlot(m_form_window->core(), con->signal(), member))
479 undoStack()->push(
new SetMemberCommand(con, EndPoint::Source, QString(),
this));
480 m_form_window->endCommand();
487 if (con->sender() == obj_name)
490 m_form_window->beginCommand(QApplication::translate(
"Command",
"Change sender"));
491 ConnectionEdit::setSource(con, obj_name);
493 QObject *sourceObject = con->object(EndPoint::Source);
495 if (!memberFunctionListContains(m_form_window->core(), sourceObject, SignalMember, con->signal()))
496 undoStack()->push(
new SetMemberCommand(con, EndPoint::Source, QString(),
this));
498 m_form_window->endCommand();
505 if (con->receiver() == obj_name)
508 m_form_window->beginCommand(QApplication::translate(
"Command",
"Change receiver"));
509 ConnectionEdit::setTarget(con, obj_name);
511 QObject *targetObject = con->object(EndPoint::Target);
512 if (!memberFunctionListContains(m_form_window->core(), targetObject, SlotMember, con->slot()))
513 undoStack()->push(
new SetMemberCommand(con, EndPoint::Target, QString(),
this));
515 m_form_window->endCommand();