~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to src/gui/widgets/qmenubar_p.h

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-08-24 04:09:09 UTC
  • Revision ID: james.westby@ubuntu.com-20050824040909-xmxe9jfr4a0w5671
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
 
4
**
 
5
** This file is part of the widgets module of the Qt Toolkit.
 
6
**
 
7
** This file may be distributed under the terms of the Q Public License
 
8
** as defined by Trolltech AS of Norway and appearing in the file
 
9
** LICENSE.QPL included in the packaging of this file.
 
10
**
 
11
** This file may be distributed and/or modified under the terms of the
 
12
** GNU General Public License version 2 as published by the Free Software
 
13
** Foundation and appearing in the file LICENSE.GPL included in the
 
14
** packaging of this file.
 
15
**
 
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
 
17
**   information about Qt Commercial License Agreements.
 
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
 
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
 
20
**
 
21
** Contact info@trolltech.com if any conditions of this licensing are
 
22
** not clear to you.
 
23
**
 
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
26
**
 
27
****************************************************************************/
 
28
 
 
29
#ifndef QMENUBAR_P_H
 
30
#define QMENUBAR_P_H
 
31
 
 
32
//
 
33
//  W A R N I N G
 
34
//  -------------
 
35
//
 
36
// This file is not part of the Qt API.  It exists purely as an
 
37
// implementation detail.  This header file may change from version to
 
38
// version without notice, or even be removed.
 
39
//
 
40
// We mean it.
 
41
//
 
42
 
 
43
#ifndef QMAC_Q3MENUBAR_CPP_FILE
 
44
#include "qstyleoption.h"
 
45
 
 
46
class QMenuBarPrivate : public QWidgetPrivate
 
47
{
 
48
    Q_DECLARE_PUBLIC(QMenuBar)
 
49
public:
 
50
    QMenuBarPrivate() : itemsDirty(0), itemsWidth(0), itemsStart(-1), currentAction(0), mouseDown(0),
 
51
                         closePopupMode(0), defaultPopDown(1), popupState(0), keyboardState(0), altPressed(0)
 
52
#ifdef Q_WS_MAC
 
53
                         , mac_menubar(0)
 
54
#endif
 
55
    { }
 
56
    ~QMenuBarPrivate()
 
57
        {
 
58
#ifdef Q_WS_MAC
 
59
            delete mac_menubar;
 
60
#endif
 
61
        }
 
62
 
 
63
    void init();
 
64
    QStyleOptionMenuItem getStyleOption(const QAction *action) const;
 
65
 
 
66
    //item calculations
 
67
    uint itemsDirty : 1;
 
68
    int itemsWidth, itemsStart;
 
69
 
 
70
    QVector<int> shortcutIndexMap;
 
71
    mutable QMap<QAction*, QRect> actionRects;
 
72
    mutable QList<QAction*> actionList;
 
73
    void calcActionRects(int max_width, int start, QMap<QAction*, QRect> &actionRects, QList<QAction*> &actionList) const;
 
74
    QRect actionRect(QAction *) const;
 
75
    void updateGeometries();
 
76
 
 
77
    //selection
 
78
    QPointer<QAction>currentAction;
 
79
    uint mouseDown : 1, closePopupMode : 1, defaultPopDown;
 
80
    QAction *actionAt(QPoint p) const;
 
81
    void setCurrentAction(QAction *, bool =false, bool =false);
 
82
    void popupAction(QAction *, bool);
 
83
 
 
84
    //active popup state
 
85
    uint popupState : 1;
 
86
    QPointer<QMenu> activeMenu;
 
87
 
 
88
    //keyboard mode for keyboard navigation
 
89
    void setKeyboardMode(bool);
 
90
    uint keyboardState : 1, altPressed : 1;
 
91
    QPointer<QWidget> keyboardFocusWidget;
 
92
 
 
93
    //firing of events
 
94
    void activateAction(QAction *, QAction::ActionEvent);
 
95
 
 
96
    void actionTriggered();
 
97
    void actionHovered();
 
98
    void internalShortcutActivated(int);
 
99
    void updateLayout();
 
100
 
 
101
    //extra widgets in the menubar
 
102
    QPointer<QWidget> leftWidget, rightWidget;
 
103
 
 
104
    //menu fading/scrolling effects
 
105
    bool doChildEffects;
 
106
 
 
107
    // reparenting
 
108
    void handleReparent();
 
109
    QWidget *oldParent;
 
110
    QWidget *oldWindow;
 
111
#ifdef QT3_SUPPORT
 
112
    bool doAutoResize;
 
113
#endif
 
114
#ifdef Q_WS_MAC
 
115
    //mac menubar binding
 
116
    struct QMacMenuBarPrivate {
 
117
        QList<QMacMenuAction*> actionItems;
 
118
        MenuRef menu, apple_menu;
 
119
        QMacMenuBarPrivate();
 
120
        ~QMacMenuBarPrivate();
 
121
 
 
122
        void addAction(QAction *, QMacMenuAction* =0);
 
123
        void addAction(QMacMenuAction *, QMacMenuAction* =0);
 
124
        void syncAction(QMacMenuAction *);
 
125
        inline void syncAction(QAction *a) { syncAction(findAction(a)); }
 
126
        void removeAction(QMacMenuAction *);
 
127
        inline void removeAction(QAction *a) { removeAction(findAction(a)); }
 
128
        inline QMacMenuAction *findAction(QAction *a) {
 
129
            for(int i = 0; i < actionItems.size(); i++) {
 
130
                QMacMenuAction *act = actionItems[i];
 
131
                if(a == act->action)
 
132
                    return act;
 
133
            }
 
134
            return 0;
 
135
        }
 
136
    } *mac_menubar;
 
137
    void macCreateMenuBar(QWidget *);
 
138
    void macDestroyMenuBar();
 
139
    MenuRef macMenu();
 
140
#endif
 
141
};
 
142
#endif
 
143
 
 
144
#endif // QMENUBAR_P_H