1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Designer of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29//
30// W A R N I N G
31// -------------
32//
33// This file is not part of the Qt API. It exists for the convenience
34// of Qt Designer. This header
35// file may change from version to version without notice, or even be removed.
36//
37// We mean it.
38//
39
40#ifndef _SIGNALSLOTDIALOG_H
41#define _SIGNALSLOTDIALOG_H
42
43#include "shared_global_p.h"
44#include <QtCore/qstringlist.h>
45#include <QtWidgets/qdialog.h>
46#include <QtGui/qstandarditemmodel.h>
47
48QT_BEGIN_NAMESPACE
49
50class QDesignerFormEditorInterface;
51class QDesignerFormWindowInterface;
52class QDesignerDialogGuiInterface;
53class QDesignerMemberSheet;
54class QListView;
55class QToolButton;
56class QItemSelection;
57
58namespace Ui {
59 class SignalSlotDialogClass;
60}
61
62namespace qdesigner_internal {
63
64// Dialog data
65struct SignalSlotDialogData {
66 void clear();
67 QStringList m_existingMethods;
68 QStringList m_fakeMethods;
69};
70
71// Internal helper class: A model for signatures that allows for verifying duplicates
72// (checking signals versus slots and vice versa).
73class SignatureModel : public QStandardItemModel {
74 Q_OBJECT
75
76public:
77 SignatureModel(QObject *parent = nullptr);
78 bool setData (const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
79
80signals:
81 void checkSignature(const QString &signature, bool *ok);
82};
83
84// Internal helper class: Panel for editing method signatures. List view with validator,
85// add and remove button
86class SignaturePanel : public QObject {
87 Q_OBJECT
88
89public:
90 SignaturePanel(QObject *parent, QListView *listView, QToolButton *addButton, QToolButton *removeButton, const QString &newPrefix);
91
92 QStringList fakeMethods() const;
93 void setData(const SignalSlotDialogData &d);
94 int count(const QString &signature) const;
95
96signals:
97 void checkSignature(const QString &signature, bool *ok);
98
99private slots:
100 void slotAdd();
101 void slotRemove();
102 void slotSelectionChanged(const QItemSelection &, const QItemSelection &);
103
104private:
105 void closeEditor();
106
107 const QString m_newPrefix;
108 SignatureModel *m_model;
109 QListView *m_listView;
110 QToolButton *m_removeButton;
111};
112
113// Dialog for editing signals and slots.
114// Provides static convenience function
115// to modify fake signals and slots. They are
116// handled in 2 ways:
117// 1) For the MainContainer: Fake signals and slots are stored
118// in the meta database (per-instance)
119// 2) For promoted widgets: Fake signals and slots are stored
120// in the widget database (per-class)
121// Arguably, we could require the MainContainer to be promoted for that, too,
122// but that would require entering a header.
123
124class QDESIGNER_SHARED_EXPORT SignalSlotDialog : public QDialog {
125 Q_OBJECT
126
127public:
128 enum FocusMode { FocusSlots, FocusSignals };
129
130 explicit SignalSlotDialog(QDesignerDialogGuiInterface *dialogGui, QWidget *parent = nullptr, FocusMode m = FocusSlots);
131 ~SignalSlotDialog() override;
132
133 DialogCode showDialog(SignalSlotDialogData &slotData, SignalSlotDialogData &signalData);
134
135 // Edit fake methods stored in MetaDataBase (per instance, used for main containers)
136 static bool editMetaDataBase(QDesignerFormWindowInterface *fw, QObject *object, QWidget *parent = nullptr, FocusMode m = FocusSlots);
137
138 // Edit fake methods of a promoted class stored in WidgetDataBase (synthesizes a widget to obtain existing members).
139 static bool editPromotedClass(QDesignerFormEditorInterface *core, const QString &promotedClassName, QWidget *parent = nullptr, FocusMode m = FocusSlots);
140 // Edit fake methods of a promoted class stored in WidgetDataBase on a base class instance.
141 static bool editPromotedClass(QDesignerFormEditorInterface *core, QObject *baseObject, QWidget *parent = nullptr, FocusMode m = FocusSlots);
142
143private slots:
144 void slotCheckSignature(const QString &signature, bool *ok);
145
146private:
147 // Edit fake methods of a promoted class stored in WidgetDataBase using an instance of the base class.
148 static bool editPromotedClass(QDesignerFormEditorInterface *core, const QString &promotedClassName, QObject *baseObject, QWidget *parent, FocusMode m);
149
150 const FocusMode m_focusMode;
151 Ui::SignalSlotDialogClass *m_ui;
152 QDesignerDialogGuiInterface *m_dialogGui;
153 SignaturePanel *m_slotPanel;
154 SignaturePanel *m_signalPanel;
155};
156}
157
158QT_END_NAMESPACE
159
160#endif
161

source code of qttools/src/designer/src/lib/shared/signalslotdialog_p.h