/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** 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, Nokia gives you certain additional ** rights. These rights are described in the Nokia 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. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** $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 // platformMenuBarementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #ifndef QMAC_Q3MENUBAR_CPP_FILE #include "QtGui/qstyleoption.h" #include // Mac needs what in this file! #ifdef Q_WS_WINCE #include "qguifunctions_wince.h" #endif #ifdef Q_WS_X11 #include "qabstractplatformmenubar_p.h" #endif #ifndef QT_NO_MENUBAR #ifdef Q_WS_S60 class CCoeControl; class CEikMenuBar; #endif #endif QT_BEGIN_NAMESPACE #ifndef QT_NO_MENUBAR class QToolBar; 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) #ifndef Q_WS_X11 , nativeMenuBar(-1) #endif , doChildEffects(false) #ifdef QT3_SUPPORT , doAutoResize(false) #endif #ifdef Q_WS_MAC , mac_menubar(0) #endif #ifdef Q_WS_X11 , platformMenuBar(0) #endif #ifdef Q_WS_WINCE , wce_menubar(0), wceClassicMenu(false) #endif #ifdef Q_WS_S60 , symbian_menubar(0) #endif { } ~QMenuBarPrivate() { #ifdef Q_WS_X11 delete platformMenuBar; #endif #ifdef Q_WS_MAC delete mac_menubar; #endif #ifdef Q_WS_WINCE delete wce_menubar; #endif #ifdef Q_WS_S60 delete symbian_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; #ifndef Q_WS_X11 int nativeMenuBar : 3; // Only has values -1, 0, and 1 #endif //firing of events void activateAction(QAction *, QAction::ActionEvent); void _q_actionTriggered(); void _q_actionHovered(); void _q_internalShortcutActivated(int); void _q_updateLayout(); #ifdef Q_WS_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; #ifdef QT3_SUPPORT bool doAutoResize; #endif #ifdef Q_WS_X11 QAbstractPlatformMenuBar *platformMenuBar; #endif #ifdef Q_WS_MAC //mac menubar binding struct QMacMenuBarPrivate { QList actionItems; OSMenuRef menu, apple_menu; QMacMenuBarPrivate(); ~QMacMenuBarPrivate(); void addAction(QAction *, QAction* =0); void addAction(QMacMenuAction *, QMacMenuAction* =0); void syncAction(QMacMenuAction *); inline void syncAction(QAction *a) { syncAction(findAction(a)); } void removeAction(QMacMenuAction *); inline void removeAction(QAction *a) { removeAction(findAction(a)); } inline QMacMenuAction *findAction(QAction *a) { for(int i = 0; i < actionItems.size(); i++) { QMacMenuAction *act = actionItems[i]; if(a == act->action) return act; } return 0; } } *mac_menubar; static bool macUpdateMenuBarImmediatly(); bool macWidgetHasNativeMenubar(QWidget *widget); void macCreateMenuBar(QWidget *); void macDestroyMenuBar(); OSMenuRef macMenu(); #endif #ifdef Q_WS_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* =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 #ifdef Q_WS_S60 void symbianCreateMenuBar(QWidget *); void symbianDestroyMenuBar(); void reparentMenuBar(QWidget *oldParent, QWidget *newParent); struct QSymbianMenuBarPrivate { QList actionItems; QMenuBarPrivate *d; QSymbianMenuBarPrivate(QMenuBarPrivate *menubar); ~QSymbianMenuBarPrivate(); void addAction(QAction *, QAction* =0); void addAction(QSymbianMenuAction *, QSymbianMenuAction* =0); void syncAction(QSymbianMenuAction *); inline void syncAction(QAction *a) { syncAction(findAction(a)); } void removeAction(QSymbianMenuAction *); void rebuild(); inline void removeAction(QAction *a) { removeAction(findAction(a)); } inline QSymbianMenuAction *findAction(QAction *a) { for(int i = 0; i < actionItems.size(); i++) { QSymbianMenuAction *act = actionItems[i]; if(a == act->action) return act; } return 0; } void insertNativeMenuItems(const QList &actions); } *symbian_menubar; static int symbianCommands(int command); #endif #ifdef QT_SOFTKEYS_ENABLED QAction *menuBarAction; #endif #ifdef Q_WS_X11 void updateCornerWidgetToolBar(); QToolBar *cornerWidgetToolBar; QWidget *cornerWidgetContainer; #endif }; #endif #endif // QT_NO_MENUBAR QT_END_NAMESPACE #endif // QMENUBAR_P_H