qmenubar.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:13k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QMENUBAR_H
  38. #define QMENUBAR_H
  39. #include <QtGui/qmenu.h>
  40. QT_BEGIN_HEADER
  41. QT_BEGIN_NAMESPACE
  42. QT_MODULE(Gui)
  43. #ifndef QT_NO_MENUBAR
  44. class QMenuBarPrivate;
  45. class QStyleOptionMenuItem;
  46. class QWindowsStyle;
  47. #ifdef QT3_SUPPORT
  48. class QMenuItem;
  49. #endif
  50. class Q_GUI_EXPORT QMenuBar : public QWidget
  51. {
  52.     Q_OBJECT
  53.     Q_PROPERTY(bool defaultUp READ isDefaultUp WRITE setDefaultUp)
  54. public:
  55.     explicit QMenuBar(QWidget *parent = 0);
  56.     ~QMenuBar();
  57. #ifdef Q_NO_USING_KEYWORD
  58.     void addAction(QAction *action) { QWidget::addAction(action); }
  59. #else
  60.     using QWidget::addAction;
  61. #endif
  62.     QAction *addAction(const QString &text);
  63.     QAction *addAction(const QString &text, const QObject *receiver, const char* member);
  64.     QAction *addMenu(QMenu *menu);
  65.     QMenu *addMenu(const QString &title);
  66.     QMenu *addMenu(const QIcon &icon, const QString &title);
  67.     QAction *addSeparator();
  68.     QAction *insertSeparator(QAction *before);
  69.     QAction *insertMenu(QAction *before, QMenu *menu);
  70.     void clear();
  71.     QAction *activeAction() const;
  72.     void setActiveAction(QAction *action);
  73.     void setDefaultUp(bool);
  74.     bool isDefaultUp() const;
  75.     QSize sizeHint() const;
  76.     QSize minimumSizeHint() const;
  77.     int heightForWidth(int) const;
  78.     QRect actionGeometry(QAction *) const;
  79.     QAction *actionAt(const QPoint &) const;
  80.     void setCornerWidget(QWidget *w, Qt::Corner corner = Qt::TopRightCorner);
  81.     QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const;
  82. #ifdef Q_WS_MAC
  83.     MenuRef macMenu();
  84. #endif
  85. #ifdef Q_OS_WINCE
  86.     void setDefaultAction(QAction *);
  87.     QAction *defaultAction() const;
  88.     static void wceCommands(uint command, HWND controlHandle);
  89.     static void wceRefresh();
  90. #endif
  91. public Q_SLOTS:
  92.     virtual void setVisible(bool visible);
  93. Q_SIGNALS:
  94.     void triggered(QAction *action);
  95.     void hovered(QAction *action);
  96. protected:
  97.     void changeEvent(QEvent *);
  98.     void keyPressEvent(QKeyEvent *);
  99.     void mouseReleaseEvent(QMouseEvent *);
  100.     void mousePressEvent(QMouseEvent *);
  101.     void mouseMoveEvent(QMouseEvent *);
  102.     void leaveEvent(QEvent *);
  103.     void paintEvent(QPaintEvent *);
  104.     void resizeEvent(QResizeEvent *);
  105.     void actionEvent(QActionEvent *);
  106.     void focusOutEvent(QFocusEvent *);
  107.     void focusInEvent(QFocusEvent *);
  108.     void timerEvent(QTimerEvent *);
  109.     bool eventFilter(QObject *, QEvent *);
  110.     bool event(QEvent *);
  111.     void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const;
  112. #ifdef QT3_SUPPORT
  113. public:
  114.     QT3_SUPPORT_CONSTRUCTOR QMenuBar(QWidget *parent, const char *name);
  115.     inline QT3_SUPPORT uint count() const { return actions().count(); }
  116.     inline QT3_SUPPORT int insertItem(const QString &text, const QObject *receiver, const char* member,
  117.                                     const QKeySequence& shortcut = 0, int id = -1, int index = -1) {
  118.         return insertAny(0, &text, receiver, member, &shortcut, 0, id, index);
  119.     }
  120.     inline QT3_SUPPORT int insertItem(const QIcon& icon, const QString &text,
  121.                                     const QObject *receiver, const char* member,
  122.                                     const QKeySequence& shortcut = 0, int id = -1, int index = -1) {
  123.         return insertAny(&icon, &text, receiver, member, &shortcut, 0, id, index);
  124.     }
  125.     inline QT3_SUPPORT int insertItem(const QPixmap &pixmap, const QObject *receiver, const char* member,
  126.                                     const QKeySequence& shortcut = 0, int id = -1, int index = -1) {
  127.         QIcon icon(pixmap);
  128.         return insertAny(&icon, 0, receiver, member, &shortcut, 0, id, index);
  129.     }
  130.     inline QT3_SUPPORT int insertItem(const QString &text, int id=-1, int index=-1) {
  131.         return insertAny(0, &text, 0, 0, 0, 0, id, index);
  132.     }
  133.     inline QT3_SUPPORT int insertItem(const QIcon& icon, const QString &text, int id=-1, int index=-1) {
  134.         return insertAny(&icon, &text, 0, 0, 0, 0, id, index);
  135.     }
  136.     inline QT3_SUPPORT int insertItem(const QString &text, QMenu *popup, int id=-1, int index=-1) {
  137.         return insertAny(0, &text, 0, 0, 0, popup, id, index);
  138.     }
  139.     inline QT3_SUPPORT int insertItem(const QIcon& icon, const QString &text, QMenu *popup, int id=-1, int index=-1) {
  140.         return insertAny(&icon, &text, 0, 0, 0, popup, id, index);
  141.     }
  142.     inline QT3_SUPPORT int insertItem(const QPixmap &pixmap, int id=-1, int index=-1) {
  143.         QIcon icon(pixmap);
  144.         return insertAny(&icon, 0, 0, 0, 0, 0, id, index);
  145.     }
  146.     inline QT3_SUPPORT int insertItem(const QPixmap &pixmap, QMenu *popup, int id=-1, int index=-1) {
  147.         QIcon icon(pixmap);
  148.         return insertAny(&icon, 0, 0, 0, 0, popup, id, index);
  149.     }
  150.     QT3_SUPPORT int insertSeparator(int index=-1);
  151.     inline QT3_SUPPORT void removeItem(int id) {
  152.         if(QAction *act = findActionForId(id))
  153.             removeAction(act); }
  154.     inline QT3_SUPPORT void removeItemAt(int index) {
  155.         if(QAction *act = actions().value(index))
  156.             removeAction(act); }
  157. #ifndef QT_NO_SHORTCUT
  158.     inline QT3_SUPPORT QKeySequence accel(int id) const {
  159.         if(QAction *act = findActionForId(id))
  160.             return act->shortcut();
  161.         return QKeySequence(); }
  162.     inline QT3_SUPPORT void setAccel(const QKeySequence& key, int id) {
  163.         if(QAction *act = findActionForId(id))
  164.             act->setShortcut(key);
  165.     }
  166. #endif
  167.     inline QT3_SUPPORT QIcon iconSet(int id) const {
  168.         if(QAction *act = findActionForId(id))
  169.             return act->icon();
  170.         return QIcon(); }
  171.     inline QT3_SUPPORT QString text(int id) const {
  172.         if(QAction *act = findActionForId(id))
  173.             return act->text();
  174.         return QString(); }
  175.     inline QT3_SUPPORT QPixmap pixmap(int id) const {
  176.         if(QAction *act = findActionForId(id))
  177.             return act->icon().pixmap(QSize(22,22));
  178.         return QPixmap(); }
  179.     inline QT3_SUPPORT void setWhatsThis(int id, const QString &w) {
  180.         if(QAction *act = findActionForId(id))
  181.             act->setWhatsThis(w); }
  182.     inline QT3_SUPPORT QString whatsThis(int id) const {
  183.         if(QAction *act = findActionForId(id))
  184.             return act->whatsThis();
  185.         return QString(); }
  186.     inline QT3_SUPPORT void changeItem(int id, const QString &text) {
  187.         if(QAction *act = findActionForId(id))
  188.             act->setText(text); }
  189.     inline QT3_SUPPORT void changeItem(int id, const QPixmap &pixmap) {
  190.         if(QAction *act = findActionForId(id))
  191.             act->setIcon(QIcon(pixmap)); }
  192.     inline QT3_SUPPORT void changeItem(int id, const QIcon &icon, const QString &text) {
  193.         if(QAction *act = findActionForId(id)) {
  194.             act->setIcon(icon);
  195.             act->setText(text);
  196.         }
  197.     }
  198.     inline QT3_SUPPORT bool isItemActive(int id) const { return findActionForId(id) == activeAction(); }
  199.     inline QT3_SUPPORT bool isItemEnabled(int id) const {
  200.         if(QAction *act = findActionForId(id))
  201.             return act->isEnabled();
  202.         return false; }
  203.     inline QT3_SUPPORT void setItemEnabled(int id, bool enable) {
  204.         if(QAction *act = findActionForId(id))
  205.             act->setEnabled(enable); }
  206.     inline QT3_SUPPORT bool isItemChecked(int id) const {
  207.         if(QAction *act = findActionForId(id))
  208.             return act->isChecked();
  209.         return false; }
  210.     inline QT3_SUPPORT void setItemChecked(int id, bool check) {
  211.         if(QAction *act = findActionForId(id))
  212.             act->setChecked(check); }
  213.     inline QT3_SUPPORT bool isItemVisible(int id) const {
  214.         if(QAction *act = findActionForId(id))
  215.             return act->isVisible();
  216.         return false; }
  217.     inline QT3_SUPPORT void setItemVisible(int id, bool visible) {
  218.         if(QAction *act = findActionForId(id))
  219.             act->setVisible(visible); }
  220.     inline QT3_SUPPORT int indexOf(int id) const { return actions().indexOf(findActionForId(id)); }
  221.     inline QT3_SUPPORT int idAt(int index) const {
  222.         return index >= 0 && index < actions().size()
  223.                         ? findIdForAction(actions().at(index))
  224.                         : -1;
  225.     }
  226.     inline QT3_SUPPORT void activateItemAt(int index) {
  227.         if(QAction *ret = actions().value(index))
  228.             setActiveAction(ret);
  229.     }
  230.     inline QT3_SUPPORT bool connectItem(int id, const QObject *receiver, const char* member) {
  231.         if(QAction *act = findActionForId(id)) {
  232.             QObject::connect(act, SIGNAL(triggered()), receiver, member);
  233.             return true;
  234.         }
  235.         return false;
  236.     }
  237.     inline QT3_SUPPORT bool disconnectItem(int id,const QObject *receiver, const char* member) {
  238.         if(QAction *act = findActionForId(id)) {
  239.             QObject::disconnect(act, SIGNAL(triggered()), receiver, member);
  240.             return true;
  241.         }
  242.         return false;
  243.     }
  244.     inline QT3_SUPPORT QMenuItem *findItem(int id) const {
  245.         return (QMenuItem*)findActionForId(id);
  246.     }
  247.     QT3_SUPPORT bool setItemParameter(int id, int param);
  248.     QT3_SUPPORT int itemParameter(int id) const;
  249.     //frame
  250.     QT3_SUPPORT int frameWidth() const;
  251.     QT3_SUPPORT void setFrameRect(QRect) {}
  252.     QT3_SUPPORT QRect frameRect() const { return QRect(); }
  253.     enum DummyFrame { Box, Sunken, Plain, Raised, MShadow, NoFrame, Panel, StyledPanel,
  254.                       HLine, VLine, GroupBoxPanel, WinPanel, ToolBarPanel, MenuBarPanel,
  255.                       PopupPanel, LineEditPanel, TabWidgetPanel, MShape };
  256.     QT3_SUPPORT void setFrameShadow(DummyFrame) {}
  257.     QT3_SUPPORT DummyFrame frameShadow() const { return Plain; }
  258.     QT3_SUPPORT void setFrameShape(DummyFrame) {}
  259.     QT3_SUPPORT DummyFrame frameShape() const { return NoFrame; }
  260.     QT3_SUPPORT void setFrameStyle(int) {}
  261.     QT3_SUPPORT int frameStyle() const  { return 0; }
  262.     QT3_SUPPORT void setLineWidth(int) {}
  263.     QT3_SUPPORT int lineWidth() const { return 0; }
  264.     QT3_SUPPORT void setMargin(int margin) { setContentsMargins(margin, margin, margin, margin); }
  265.     QT3_SUPPORT int margin() const
  266.     { int margin; int dummy; getContentsMargins(&margin, &dummy, &dummy, &dummy);  return margin; }
  267.     QT3_SUPPORT void setMidLineWidth(int) {}
  268.     QT3_SUPPORT int midLineWidth() const { return 0; }
  269.     //menubar
  270.     enum Separator { Never=0, InWindowsStyle=1 };
  271.     inline QT3_SUPPORT Separator separator() const { return InWindowsStyle; }
  272.     inline QT3_SUPPORT void setSeparator(Separator) { }
  273.     QT3_SUPPORT void setAutoGeometry(bool);
  274.     QT3_SUPPORT bool autoGeometry() const;
  275. Q_SIGNALS:
  276.     QT_MOC_COMPAT void activated(int itemId);
  277.     QT_MOC_COMPAT void highlighted(int itemId);
  278. protected:
  279.     inline QT3_SUPPORT QRect itemRect(int index) {
  280.         if(QAction *act = actions().value(index))
  281.             return actionGeometry(act);
  282.         return QRect();
  283.     }
  284.     inline QT3_SUPPORT int itemAtPos(const QPoint &p) {
  285.         return findIdForAction(actionAt(p));
  286.     }
  287. private:
  288.     QAction *findActionForId(int id) const;
  289.     int insertAny(const QIcon *icon, const QString *text, const QObject *receiver, const char *member,
  290.                   const QKeySequence *shorcut, const QMenu *popup, int id, int index);
  291.     int findIdForAction(QAction*) const;
  292. #endif
  293. private:
  294.     Q_DECLARE_PRIVATE(QMenuBar)
  295.     Q_DISABLE_COPY(QMenuBar)
  296.     Q_PRIVATE_SLOT(d_func(), void _q_actionTriggered())
  297.     Q_PRIVATE_SLOT(d_func(), void _q_actionHovered())
  298.     Q_PRIVATE_SLOT(d_func(), void _q_internalShortcutActivated(int))
  299.     Q_PRIVATE_SLOT(d_func(), void _q_updateLayout())
  300. #ifdef Q_OS_WINCE
  301.     Q_PRIVATE_SLOT(d_func(), void _q_updateDefaultAction())
  302. #endif
  303.     friend class QMenu;
  304.     friend class QMenuPrivate;
  305.     friend class QWindowsStyle;
  306. #ifdef Q_WS_MAC
  307.     friend class QApplicationPrivate;
  308.     friend class QWidgetPrivate;
  309.     static bool macUpdateMenuBar();
  310.     friend bool qt_mac_activate_action(MenuRef, uint, QAction::ActionEvent, bool);
  311. #endif
  312. };
  313. #endif // QT_NO_MENUBAR
  314. QT_END_NAMESPACE
  315. QT_END_HEADER
  316. #endif // QMENUBAR_H