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

📄 qaccessiblemenu.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
字号:
#include "qaccessiblemenu.h"#include <qpopupmenu.h>#include <qmenubar.h>#include <qstyle.h>class MyPopupMenu : public QPopupMenu{    friend class QAccessiblePopup;};QAccessiblePopup::QAccessiblePopup( QObject *o ): QAccessibleWidget( o ){    Q_ASSERT( o->inherits("QPopupMenu") );}QPopupMenu *QAccessiblePopup::popupMenu() const{    return (QPopupMenu*)object();}int QAccessiblePopup::childCount() const{    return popupMenu()->count();}QRESULT QAccessiblePopup::queryChild( int /*control*/, QAccessibleInterface **iface ) const{    *iface = 0;    return QS_FALSE;}QRect QAccessiblePopup::rect( int control ) const{    if ( !control )	return QAccessibleWidget::rect( control );    QRect r = popupMenu()->itemGeometry( control - 1 );    QPoint tlp = popupMenu()->mapToGlobal( QPoint( 0,0 ) );    return QRect( tlp.x() + r.x(), tlp.y() + r.y(), r.width(), r.height() );}int QAccessiblePopup::controlAt( int x, int y ) const{    QPoint p = popupMenu()->mapFromGlobal( QPoint( x,y ) );    MyPopupMenu *mp = (MyPopupMenu*)popupMenu();    return mp->itemAtPos( p, FALSE ) + 1;}int QAccessiblePopup::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 QAccessiblePopup::text( Text t, int control ) const{    QString tx = QAccessibleWidget::text( t, control );    if ( !!tx )	return tx;    int id;    QMenuItem *item = 0;    if ( control ) {	id = popupMenu()->idAt( control - 1 );	item = popupMenu()->findItem( id );    }    switch ( t ) {    case Name:	if ( !control )	    return popupMenu()->caption();	return stripAmp( popupMenu()->text( id ) );    case Help:	return popupMenu()->whatsThis( id );    case Accelerator:	return hotKey( popupMenu()->text( id ) );    case DefaultAction:	if ( !item || item->isSeparator() || !item->isEnabled() )	    break;	if ( item->popup() )	    return QPopupMenu::tr("Open");	return QPopupMenu::tr("Execute");    default:	break;    }    return tx;}QAccessible::Role QAccessiblePopup::role( int control ) const{    if ( !control )	return PopupMenu;        QMenuItem *item = popupMenu()->findItem( popupMenu()->idAt( control -1 ) );    if ( item && item->isSeparator() )	return Separator;    return MenuItem;}QAccessible::State QAccessiblePopup::state( int control ) const{    int s = QAccessibleWidget::state( control );    if ( !control )	return (State)s;    int id = popupMenu()->idAt( control -1 );    QMenuItem *item = popupMenu()->findItem( id );    if ( !item )	return (State)s;    if ( popupMenu()->style().styleHint( QStyle::SH_PopupMenu_MouseTracking ) )	s |= HotTracked;    if ( item->isSeparator() || !item->isEnabled() )	s |= Unavailable;    if ( popupMenu()->isCheckable() && item->isChecked() )	s |= Checked;    if ( popupMenu()->isItemActive( id ) )	s |= Focused;    return (State)s;}bool QAccessiblePopup::doDefaultAction( int control ){    if ( !control )	return FALSE;    int id = popupMenu()->idAt( control -1 );    QMenuItem *item = popupMenu()->findItem( id );    if ( !item || !item->isEnabled() )	return FALSE;    popupMenu()->activateItemAt( control - 1);    return TRUE;}bool QAccessiblePopup::setFocus( int control ){    if ( !control )	return FALSE;    int id = popupMenu()->idAt( control -1 );    QMenuItem *item = popupMenu()->findItem( id );    if ( !item || !item->isEnabled() )	return FALSE;    popupMenu()->setActiveItem( control - 1 );    return TRUE;}class MyMenuBar : public QMenuBar{    friend class QAccessibleMenuBar;};QAccessibleMenuBar::QAccessibleMenuBar( QObject *o ): QAccessibleWidget( o ){    Q_ASSERT( o->inherits( "QMenuBar" ) );}QMenuBar *QAccessibleMenuBar::menuBar() const{    return (QMenuBar*)object();}int QAccessibleMenuBar::childCount() const{    return menuBar()->count();}QRESULT QAccessibleMenuBar::queryChild( int /*control*/, QAccessibleInterface **iface ) const{    *iface = 0;    return QS_FALSE;}QRect QAccessibleMenuBar::rect( int control ) const{    if ( !control )	return QAccessibleWidget::rect( control );    MyMenuBar *mb = (MyMenuBar*)menuBar();    QRect r = mb->itemRect( control - 1 );    QPoint tlp = mb->mapToGlobal( QPoint( 0,0 ) );    return QRect( tlp.x() + r.x(), tlp.y() + r.y(), r.width(), r.height() );}int QAccessibleMenuBar::controlAt( int x, int y ) const{    MyMenuBar *mb = (MyMenuBar*)menuBar();    QPoint p = mb->mapFromGlobal( QPoint( x,y ) );    return mb->itemAtPos( 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 control ) const{    QString tx = QAccessibleWidget::text( t, control );    if ( !!tx )	return tx;    if ( !control )	return tx;    int id = menuBar()->idAt( control - 1 );    switch ( t ) {    case Name:	return stripAmp( menuBar()->text( id ) );    case Accelerator:	tx = hotKey( menuBar()->text( id ) );	if ( !!tx )	    return "Alt + "+tx;	break;    case DefaultAction:	return QMenuBar::tr("Open");    default:	break;    }    return tx;}QAccessible::Role QAccessibleMenuBar::role( int control ) const{    if ( !control )	return MenuBar;    QMenuItem *item = menuBar()->findItem( menuBar()->idAt( control -1 ) );    if ( item && item->isSeparator() )	return Separator;    return MenuItem;}QAccessible::State QAccessibleMenuBar::state( int control ) const{    int s = QAccessibleWidget::state( control );    if ( !control )	return (State)s;    int id = menuBar()->idAt( control -1 );    QMenuItem *item = menuBar()->findItem( id );    if ( !item )	return (State)s;    if ( menuBar()->style().styleHint( QStyle::SH_PopupMenu_MouseTracking ) )	s |= HotTracked;    if ( item->isSeparator() || !item->isEnabled() )	s |= Unavailable;    if ( menuBar()->isItemActive( id ) )	s |= Focused;    return (State)s;}bool QAccessibleMenuBar::doDefaultAction( int control ){    if ( !control )	return FALSE;    int id = menuBar()->idAt( control -1 );    QMenuItem *item = menuBar()->findItem( id );    if ( !item || !item->isEnabled() )	return FALSE;    menuBar()->activateItemAt( control - 1);    return TRUE;}bool QAccessibleMenuBar::setFocus( int control ){    if ( !control )	return FALSE;    int id = menuBar()->idAt( control -1 );    QMenuItem *item = menuBar()->findItem( id );    if ( !item || !item->isEnabled() )	return FALSE;    return TRUE;}

⌨️ 快捷键说明

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