// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists for the convenience // of Qt Designer. This header // file may change from version to version without notice, or even be removed. // // We mean it. // #ifndef PROMOTIONTASKMENU_H #define PROMOTIONTASKMENU_H #include "shared_global_p.h" #include #include #include QT_BEGIN_NAMESPACE class QDesignerFormWindowInterface; class QDesignerFormEditorInterface; class QAction; class QMenu; class QWidget; namespace qdesigner_internal { // A helper class for creating promotion context menus and handling promotion actions. class QDESIGNER_SHARED_EXPORT PromotionTaskMenu: public QObject { Q_OBJECT public: enum Mode { ModeSingleWidget, ModeManagedMultiSelection, ModeUnmanagedMultiSelection }; explicit PromotionTaskMenu(QWidget *widget,Mode mode = ModeManagedMultiSelection, QObject *parent = nullptr); Mode mode() const; void setMode(Mode m); void setWidget(QWidget *widget); // Set menu labels void setPromoteLabel(const QString &promoteLabel); void setEditPromoteToLabel(const QString &promoteEditLabel); // Defaults to "Demote to %1".arg(class). void setDemoteLabel(const QString &demoteLabel); using ActionList = QList; enum AddFlags { LeadingSeparator = 1, TrailingSeparator = 2, SuppressGlobalEdit = 4}; // Adds a list of promotion actions according to the current promotion state of the widget. void addActions(QDesignerFormWindowInterface *fw, unsigned flags, ActionList &actionList); // Convenience that finds the form window. void addActions(unsigned flags, ActionList &actionList); void addActions(QDesignerFormWindowInterface *fw, unsigned flags, QMenu *menu); void addActions(unsigned flags, QMenu *menu); // Pop up the editor in a global context. static void editPromotedWidgets(QDesignerFormEditorInterface *core, QWidget* parent); private slots: void slotPromoteToCustomWidget(const QString &customClassName); void slotDemoteFromCustomWidget(); void slotEditPromotedWidgets(); void slotEditPromoteTo(); void slotEditSignalsSlots(); private: void promoteTo(QDesignerFormWindowInterface *fw, const QString &customClassName); enum PromotionState { NotApplicable, NoHomogenousSelection, CanPromote, CanDemote }; PromotionState createPromotionActions(QDesignerFormWindowInterface *formWindow); QDesignerFormWindowInterface *formWindow() const; using PromotionSelectionList = QList >; PromotionSelectionList promotionSelectionList(QDesignerFormWindowInterface *formWindow) const; Mode m_mode; QPointer m_widget; // Per-Widget actions QList m_promotionActions; QAction *m_globalEditAction; QAction *m_EditPromoteToAction; QAction *m_EditSignalsSlotsAction; QString m_promoteLabel; QString m_demoteLabel; }; } // namespace qdesigner_internal QT_END_NAMESPACE #endif // PROMOTIONTASKMENU_H