/**************************************************************************** ** ** Copyright (C) 2016 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:LGPL$ ** 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 Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** 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-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $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(0), mouseDown(0), closePopupMode(0), defaultPopDown(1), popupState(0), keyboardState(0), altPressed(0), doChildEffects(false), platformMenuBar(0) { } ~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