⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qaccessiblemenu.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the plugins of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.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 GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qaccessiblemenu.h"#include <qmenu.h>#include <qmenubar.h>#include <qstyle.h>#ifndef QT_NO_ACCESSIBILITY#ifndef QT_NO_MENUQString Q_GUI_EXPORT qt_accStripAmp(const QString &text);QString Q_GUI_EXPORT qt_accHotKey(const QString &text);QAccessibleMenu::QAccessibleMenu(QWidget *w): QAccessibleWidget(w){    Q_ASSERT(menu());}QMenu *QAccessibleMenu::menu() const{    return qobject_cast<QMenu*>(object());}int QAccessibleMenu::childCount() const{    return menu()->actions().count();}QRect QAccessibleMenu::rect(int child) const{    if (!child || child > childCount())        return QAccessibleWidget::rect(child);    QRect r = menu()->actionGeometry(menu()->actions()[child - 1]);    QPoint tlp = menu()->mapToGlobal(QPoint(0,0));    return QRect(tlp.x() + r.x(), tlp.y() + r.y(), r.width(), r.height());}int QAccessibleMenu::childAt(int x, int y) const{    QAction *act = menu()->actionAt(menu()->mapFromGlobal(QPoint(x,y)));    if(act && act->isSeparator())        act = 0;    return menu()->actions().indexOf(act) + 1;}/*int QAccessibleMenu::navigate(NavDirection direction, int startControl) const{    if (direction != NavFirstChild && direction != NavLastChild && direction != NavFocusChild && !startControl)        return QAccessibleWidget::navigate(direction, startControl);    switch (direction) {    case NavFirstChild:        return 1;    case NavLastChild:        return childCount();    case NavNext:    case NavDown:        return (startControl + 1) > childCount() ? -1 : startControl + 1;    case NavPrevious:    case NavUp:        return (startControl - 1) < 1 ? -1 : startControl - 1;    default:        break;    }    return -1;}*/QString QAccessibleMenu::text(Text t, int child) const{    QString tx = QAccessibleWidget::text(t, child);    if (tx.size())        return tx;    switch (t) {    case Name:        if (!child)            return menu()->windowTitle();        return qt_accStripAmp(menu()->actions().at(child-1)->text());    case Help:        return child ? menu()->actions().at(child-1)->whatsThis() : tx;#ifndef QT_NO_SHORTCUT    case Accelerator:        return child ? static_cast<QString>(menu()->actions().at(child-1)->shortcut()) : tx;#endif    default:        break;    }    return tx;}QAccessible::Role QAccessibleMenu::role(int child) const{    if (!child)        return PopupMenu;    QAction *action = menu()->actions()[child-1];    if (action && action->isSeparator())        return Separator;    return MenuItem;}QAccessible::State QAccessibleMenu::state(int child) const{    State s = QAccessibleWidget::state(child);    if (!child)        return s;    QAction *action = menu()->actions()[child-1];    if (!action)        return s;    if (menu()->style()->styleHint(QStyle::SH_Menu_MouseTracking))        s |= HotTracked;    if (action->isSeparator() || !action->isEnabled())        s |= Unavailable;    if (action->isChecked())        s |= Checked;    if (menu()->activeAction() == action)        s |= Focused;    return s;}QString QAccessibleMenu::actionText(int action, QAccessible::Text text, int child) const{    if (action == QAccessible::DefaultAction && child && text == QAccessible::Name) {        QAction *a = menu()->actions().value(child-1, 0);        if (!a || a->isSeparator())            return QString();        if (a->menu()) {            if (a->menu()->isVisible())                return QMenu::tr("Close");            return QMenu::tr("Open");        }        return QMenu::tr("Execute");     }    return QAccessibleWidget::actionText(action, text, child);}bool QAccessibleMenu::doAction(int act, int child, const QVariantList &){    if (!child || act != QAccessible::DefaultAction)        return false;    QAction *action = menu()->actions().value(child-1, 0);    if (!action || !action->isEnabled())        return false;    if (action->menu() && action->menu()->isVisible())        action->menu()->hide();    else        menu()->setActiveAction(action);    return true;}/*bool QAccessibleMenu::setFocus(int child){    if (!child)        return false;    int id = menu()->idAt(child -1);    QMenuItem *item = menu()->findItem(id);    if (!item || !item->isEnabled())        return false;    menu()->setActiveItem(child - 1);    return true;}*/#endif // QT_NO_MENU#ifndef QT_NO_MENUBARQAccessibleMenuBar::QAccessibleMenuBar(QWidget *w): QAccessibleWidget(w){    Q_ASSERT(menuBar());}QMenuBar *QAccessibleMenuBar::menuBar() const{    return qobject_cast<QMenuBar*>(object());}int QAccessibleMenuBar::childCount() const{    return menuBar()->actions().count();}QRect QAccessibleMenuBar::rect(int child) const{    if (!child)        return QAccessibleWidget::rect(child);    QRect r = menuBar()->actionGeometry(menuBar()->actions()[child - 1]);    QPoint tlp = menuBar()->mapToGlobal(QPoint(0,0));    return QRect(tlp.x() + r.x(), tlp.y() + r.y(), r.width(), r.height());}int QAccessibleMenuBar::childAt(int x, int y) const{    QPoint p = menuBar()->mapFromGlobal(QPoint(x,y));    return menuBar()->actions().indexOf(menuBar()->actionAt(p)) + 1;}/*int QAccessibleMenuBar::navigate(NavDirection direction, int startControl) const{    if (direction != NavFirstChild && direction != NavLastChild && direction != NavFocusChild && !startControl)        return QAccessibleWidget::navigate(direction, startControl);    switch (direction) {    case NavFirstChild:        return 1;    case NavLastChild:        return childCount();    case NavNext:    case NavRight:        return (startControl + 1) > childCount() ? -1 : startControl + 1;    case NavPrevious:    case NavLeft:        return (startControl - 1) < 1 ? -1 : startControl - 1;    default:        break;    }    return -1;}*/QString QAccessibleMenuBar::text(Text t, int child) const{    QString str;    if(child) {        if (QAction *action = menuBar()->actions().value(child - 1, 0)) {            switch (t) {            case Name:                return qt_accStripAmp(action->text());            case Accelerator:                str = qt_accHotKey(action->text());                break;            default:                break;            }        }    }    if (str.isEmpty())        str = QAccessibleWidget::text(t, child);    return str;}QAccessible::Role QAccessibleMenuBar::role(int child) const{    if (!child)        return MenuBar;    QAction *action = menuBar()->actions()[child-1];    if (action && action->isSeparator())        return Separator;    return MenuItem;}QAccessible::State QAccessibleMenuBar::state(int child) const{    State s = QAccessibleWidget::state(child);    if (!child)        return s;    QAction *action = menuBar()->actions().value(child-1, 0);    if (!action)        return s;    if (menuBar()->style()->styleHint(QStyle::SH_Menu_MouseTracking))        s |= HotTracked;    if (action->isSeparator() || !action->isEnabled())        s |= Unavailable;    if (menuBar()->activeAction() == action)        s |= Focused;    return s;}QString QAccessibleMenuBar::actionText(int action, QAccessible::Text text, int child) const{    if (action == QAccessible::DefaultAction && child && text == QAccessible::Name) {        QAction *a = menuBar()->actions().value(child-1, 0);        if (!a || a->isSeparator())            return QString();        if (a->menu()) {            if (a->menu()->isVisible())                return QMenu::tr("Close");            return QMenu::tr("Open");        }        return QMenu::tr("Execute");    }    return QAccessibleWidget::actionText(action, text, child);}bool QAccessibleMenuBar::doAction(int act, int child, const QVariantList &){    if (act != !child)        return false;    QAction *action = menuBar()->actions().value(child-1, 0);    if (!action || !action->isEnabled())        return false;    if (action->menu() && action->menu()->isVisible())        action->menu()->hide();    else        menuBar()->setActiveAction(action);    return true;}/*bool QAccessibleMenuBar::setFocus(int child){    if (!child)        return false;    int id = menuBar()->idAt(child -1);    QMenuItem *item = menuBar()->findItem(id);    if (!item || !item->isEnabled())        return false;    return true;}*/#endif // QT_NO_MENUBAR#endif // QT_NO_ACCESSIBILITY

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -