/**************************************************************************** ** ** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:COMM$ ** ** 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. ** ** $QT_END_LICENSE$ ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ****************************************************************************/ #ifndef QMENUBAR_P_H #define QMENUBAR_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include "QtWidgets/qstyleoption.h" #include // Mac needs what in this file! #include QT_REQUIRE_CONFIG(menubar); QT_BEGIN_NAMESPACE class QMenuBarExtension; class QMenuBarPrivate : public QWidgetPrivate { Q_DECLARE_PUBLIC(QMenuBar) public: QMenuBarPrivate() : itemsDirty(0), currentAction(nullptr), mouseDown(0), closePopupMode(0), defaultPopDown(1), popupState(0), keyboardState(0), altPressed(0), doChildEffects(false), platformMenuBar(nullptr) { } ~QMenuBarPrivate() { delete platformMenuBar; } void init(); QAction *getNextAction(const int start, const int increment) const; //item calculations uint itemsDirty : 1; QVector shortcutIndexMap; mutable QVector actionRects; void calcActionRects(int max_width, int start) const; QRect actionRect(QAction *) const; void updateGeometries(); //selection QPointercurrentAction; uint mouseDown : 1, closePopupMode : 1, defaultPopDown; QAction *actionAt(QPoint p) const; void setCurrentAction(QAction *, bool =false, bool =false); void popupAction(QAction *, bool); //active popup state uint popupState : 1; QPointer activeMenu; //keyboard mode for keyboard navigation void focusFirstAction(); void setKeyboardMode(bool); uint keyboardState : 1, altPressed : 1; QPointer keyboardFocusWidget; //firing of events void activateAction(QAction *, QAction::ActionEvent); void _q_actionTriggered(); void _q_actionHovered(); void _q_internalShortcutActivated(int); void _q_updateLayout(); //extra widgets in the menubar QPointer leftWidget, rightWidget; QMenuBarExtension *extension; bool isVisible(QAction *action); //menu fading/scrolling effects bool doChildEffects; QRect menuRect(bool) const; // reparenting void handleReparent(); QVector > oldParents; QList hiddenActions; //default action QPointer defaultAction; QBasicTimer autoReleaseTimer; QPlatformMenuBar *platformMenuBar; QPlatformMenu *getPlatformMenu(const QAction *action); QPlatformMenu *findInsertionPlatformMenu(const QAction *action); void copyActionToPlatformMenu(const QAction *e, QPlatformMenu *menu); inline int indexOf(QAction *act) const { return q_func()->actions().indexOf(act); } }; QT_END_NAMESPACE #endif // QMENUBAR_P_H