1/* This file is part of the KDE libraries
2 Copyright (C) 1997, 1998, 1999, 2000 Sven Radej (radej@kde.org)
3 Copyright (C) 1997, 1998, 1999, 2000 Matthias Ettrich (ettrich@kde.org)
4 Copyright (C) 1999, 2000 Daniel "Mosfet" Duley (mosfet@kde.org)
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA.
20*/
21
22#ifndef KMENUBAR_H
23#define KMENUBAR_H
24
25#include <kdeui_export.h>
26
27#include <QtGui/QMenuBar>
28
29/**
30 * %KDE Style-able menubar.
31 *
32 * This is required since QMenuBar is currently not handled by
33 * QStyle.
34 *
35 * @author Daniel "Mosfet" Duley.
36 */
37
38class KDEUI_EXPORT KMenuBar : public QMenuBar
39{
40 Q_OBJECT
41 Q_PROPERTY( bool topLevelMenu READ isTopLevelMenu WRITE setTopLevelMenu )
42
43public:
44
45 explicit KMenuBar (QWidget *parent=0);
46 ~KMenuBar ();
47
48 /**
49 * This controls whether or not this menubar will be a top-level
50 * bar similar to the way Macintosh handles menubars. This
51 * overrides any global config settings.
52 *
53 * Keep in mind that it is probably a really bad idea to use this
54 * unless you really know what you're doing. A feature like a
55 * top-level menubar is one that should really be shared by all
56 * applications. If your app is the only one with a top-level
57 * bar, then things might look very... odd.
58 *
59 * This is included only for those people that @p do know that
60 * they need to use it.
61 *
62 * @param top_level If set to true, then this menubar will be a
63 * top-level menu
64 */
65 void setTopLevelMenu(bool top_level = true);
66
67 /**
68 * Is our menubar a top-level (Macintosh style) menubar?
69 *
70 * @return True if it is top-level.
71 */
72 bool isTopLevelMenu() const;
73
74 // TT are overloading virtuals :(
75 virtual void setGeometry( const QRect &r );
76 virtual void setGeometry( int x, int y, int w, int h );
77 virtual void resize( int w, int h );
78 void resize( const QSize& s );
79
80 virtual void setFrameStyle( int );
81 virtual void setLineWidth( int );
82 virtual void setMargin( int );
83 virtual QSize sizeHint() const;
84protected Q_SLOTS:
85 void slotReadConfig();
86protected:
87 virtual void resizeEvent( QResizeEvent* );
88 virtual bool eventFilter(QObject *, QEvent *);
89#ifdef Q_WS_X11
90 virtual bool x11Event( XEvent* );
91#endif
92 virtual void closeEvent( QCloseEvent* );
93 virtual void paintEvent( QPaintEvent* );
94private Q_SLOTS:
95 void updateFallbackSize();
96 void selectionTimeout();
97private:
98 void setTopLevelMenuInternal(bool top_level);
99 void updateMenuBarSize();
100 void checkSize( int& w, int& h );
101private:
102 class KMenuBarPrivate;
103 KMenuBarPrivate * const d;
104};
105
106#endif
107