/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Designer of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ // // 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