diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-06-13 17:31:07 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-06-15 14:56:55 +0000 |
commit | d3fcd1ee39895a1eaae9fc728ddb00232333dfc3 (patch) | |
tree | 48eec6cdf043c427f9a0d955f013c4534067c588 /src/designer/src/lib/shared/signalslotdialog.cpp | |
parent | aa20eefca427123e591ff05af452b3c0c4805589 (diff) |
Designer: Add a code for legacy custom signals/slots
For a very old form that was generated pre Qt 4 times,
there was no signals/slots section containing custom
signals/slots of the form. Generate it now when it seems
missing.
Fixes: QTBUG-99421
Change-Id: Ib9e373a65bf7e96cb98b549a81d00fba25de6982
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
(cherry picked from commit efc959e96695a49a0763a6a307e656e664c1e943)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/designer/src/lib/shared/signalslotdialog.cpp')
-rw-r--r-- | src/designer/src/lib/shared/signalslotdialog.cpp | 101 |
1 files changed, 55 insertions, 46 deletions
diff --git a/src/designer/src/lib/shared/signalslotdialog.cpp b/src/designer/src/lib/shared/signalslotdialog.cpp index 65297030d..28cf2703e 100644 --- a/src/designer/src/lib/shared/signalslotdialog.cpp +++ b/src/designer/src/lib/shared/signalslotdialog.cpp @@ -58,14 +58,14 @@ QT_BEGIN_NAMESPACE static const char *signatureRegExp = "^[\\w+_]+\\(([\\w+:]\\*?,?)*\\)$"; static const char *methodNameRegExp = "^[\\w+_]+$"; -static QStandardItem *createEditableItem(const QString &text) +static QStandardItem *createEditableItem(const QString &text) { QStandardItem *rc = new QStandardItem(text); rc->setFlags(Qt::ItemIsEnabled|Qt::ItemIsEditable|Qt::ItemIsSelectable); return rc; } -static QStandardItem *createDisabledItem(const QString &text) +static QStandardItem *createDisabledItem(const QString &text) { QStandardItem *rc = new QStandardItem(text); Qt::ItemFlags flags = rc->flags(); @@ -73,48 +73,6 @@ static QStandardItem *createDisabledItem(const QString &text) return rc; } -static void fakeMethodsFromMetaDataBase(QDesignerFormEditorInterface *core, QObject *o, QStringList &slotList, QStringList &signalList) -{ - slotList.clear(); - signalList.clear(); - if (qdesigner_internal::MetaDataBase *metaDataBase = qobject_cast<qdesigner_internal::MetaDataBase *>(core->metaDataBase())) - if (const qdesigner_internal::MetaDataBaseItem *item = metaDataBase->metaDataBaseItem(o)) { - slotList = item->fakeSlots(); - signalList = item->fakeSignals(); - } -} - -static void fakeMethodsToMetaDataBase(QDesignerFormEditorInterface *core, QObject *o, const QStringList &slotList, const QStringList &signalList) -{ - if (qdesigner_internal::MetaDataBase *metaDataBase = qobject_cast<qdesigner_internal::MetaDataBase *>(core->metaDataBase())) { - qdesigner_internal::MetaDataBaseItem *item = metaDataBase->metaDataBaseItem(o); - Q_ASSERT(item); - item->setFakeSlots(slotList); - item->setFakeSignals(signalList); - } -} - -static void existingMethodsFromMemberSheet(QDesignerFormEditorInterface *core, - QObject *o, - QStringList &slotList, QStringList &signalList) -{ - slotList.clear(); - signalList.clear(); - - QDesignerMemberSheetExtension *msheet = qt_extension<QDesignerMemberSheetExtension*>(core->extensionManager(), o); - if (!msheet) - return; - - for (int i = 0, count = msheet->count(); i < count; ++i) - if (msheet->isVisible(i)) { - if (msheet->isSlot(i)) - slotList += msheet->signature(i); - else - if (msheet->isSignal(i)) - signalList += msheet->signature(i); - } -} - namespace { // Internal helper class: A Delegate that validates using RegExps and additionally checks // on closing (adds missing parentheses). @@ -175,9 +133,15 @@ namespace { const QStringList &newFakeSlots, const QStringList &newFakeSignals); void undo() override - { fakeMethodsToMetaDataBase(core(), m_object, m_oldFakeSlots, m_oldFakeSignals); } + { + qdesigner_internal::SignalSlotDialog::fakeMethodsToMetaDataBase(core(), m_object, + m_oldFakeSlots, m_oldFakeSignals); + } void redo() override - { fakeMethodsToMetaDataBase(core(), m_object, m_newFakeSlots, m_newFakeSignals); } + { + qdesigner_internal::SignalSlotDialog::fakeMethodsToMetaDataBase(core(), m_object, + m_newFakeSlots, m_newFakeSignals); + } private: QObject *m_object; @@ -512,6 +476,51 @@ bool SignalSlotDialog::editPromotedClass(QDesignerFormEditorInterface *core, con return true; } +void SignalSlotDialog::fakeMethodsFromMetaDataBase(QDesignerFormEditorInterface *core, QObject *o, + QStringList &slotList, QStringList &signalList) +{ + slotList.clear(); + signalList.clear(); + if (auto *metaDB = qobject_cast<qdesigner_internal::MetaDataBase *>(core->metaDataBase())) { + if (const auto *item = metaDB->metaDataBaseItem(o)) { + slotList = item->fakeSlots(); + signalList = item->fakeSignals(); + } + } +} + +void SignalSlotDialog::fakeMethodsToMetaDataBase(QDesignerFormEditorInterface *core, QObject *o, + const QStringList &slotList, + const QStringList &signalList) +{ + if (auto *metaDB = qobject_cast<qdesigner_internal::MetaDataBase *>(core->metaDataBase())) { + if (auto *item = metaDB->metaDataBaseItem(o)) { + item->setFakeSlots(slotList); + item->setFakeSignals(signalList); + } + } +} + +void SignalSlotDialog::existingMethodsFromMemberSheet(QDesignerFormEditorInterface *core, QObject *o, + QStringList &slotList, QStringList &signalList) +{ + slotList.clear(); + signalList.clear(); + + auto *msheet = qt_extension<QDesignerMemberSheetExtension*>(core->extensionManager(), o); + if (!msheet) + return; + + for (qsizetype i = 0, count = msheet->count(); i < count; ++i) { + if (msheet->isVisible(i)) { + if (msheet->isSlot(i)) + slotList += msheet->signature(i); + else if (msheet->isSignal(i)) + signalList += msheet->signature(i); + } + } +} + } QT_END_NAMESPACE |