/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtGui 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 Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.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 "QtWidgets/qstyleoption.h" #include // Mac needs what in this file! #include QT_BEGIN_NAMESPACE #ifndef QT_NO_MENUBAR 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), nativeMenuBar(-1), doChildEffects(false), platformMenuBar(0) #ifdef Q_OS_WINCE , wce_menubar(0), wceClassicMenu(false) #endif { } ~QMenuBarPrivate() { delete platformMenuBar; #ifdef Q_OS_WINCE delete wce_menubar; #endif } 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; int nativeMenuBar : 3; // Only has values -1, 0, and 1 //firing of events void activateAction(QAction *, QAction::ActionEvent); void _q_actionTriggered(); void _q_actionHovered(); void _q_internalShortcutActivated(int); void _q_updateLayout(); #ifdef Q_OS_WINCE void _q_updateDefaultAction(); #endif //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(); QWidget *oldParent; QWidget *oldWindow; QList hiddenActions; //default action QPointer defaultAction; QBasicTimer autoReleaseTimer; QPlatformMenuBar *platformMenuBar; inline int indexOf(QAction *act) const { return q_func()->actions().indexOf(act); } #ifdef Q_OS_WINCE void wceCreateMenuBar(QWidget *); void wceDestroyMenuBar(); struct QWceMenuBarPrivate { QList actionItems; QList actionItemsLeftButton; QList> actionItemsClassic; HMENU menuHandle; HMENU leftButtonMenuHandle; HWND menubarHandle; HWND parentWindowHandle; bool leftButtonIsMenu; QPointer leftButtonAction; QMenuBarPrivate *d; int leftButtonCommand; QWceMenuBarPrivate(QMenuBarPrivate *menubar); ~QWceMenuBarPrivate(); void addAction(QAction *, QAction *); void addAction(QAction *, QWceMenuAction* =0); void addAction(QWceMenuAction *, QWceMenuAction* =0); void syncAction(QWceMenuAction *); inline void syncAction(QAction *a) { syncAction(findAction(a)); } void removeAction(QWceMenuAction *); void rebuild(); inline void removeAction(QAction *a) { removeAction(findAction(a)); } inline QWceMenuAction *findAction(QAction *a) { for(int i = 0; i < actionItems.size(); i++) { QWceMenuAction *act = actionItems[i]; if(a == act->action) return act; } return 0; } } *wce_menubar; bool wceClassicMenu; void wceCommands(uint command); void wceRefresh(); bool wceEmitSignals(QList actions, uint command); #endif }; #endif // QT_NO_MENUBAR QT_END_NAMESPACE #endif // QMENUBAR_P_H