diff options
Diffstat (limited to 'tqtinterface/qt4/plugins/src/accessible/widgets/qaccessiblemenu.cpp')
| -rw-r--r-- | tqtinterface/qt4/plugins/src/accessible/widgets/qaccessiblemenu.cpp | 323 | 
1 files changed, 323 insertions, 0 deletions
| diff --git a/tqtinterface/qt4/plugins/src/accessible/widgets/qaccessiblemenu.cpp b/tqtinterface/qt4/plugins/src/accessible/widgets/qaccessiblemenu.cpp new file mode 100644 index 0000000..21a99b1 --- /dev/null +++ b/tqtinterface/qt4/plugins/src/accessible/widgets/qaccessiblemenu.cpp @@ -0,0 +1,323 @@ +#include "tqaccessiblemenu.h" + +#include <tqpopupmenu.h> +#include <tqmenubar.h> +#include <tqstyle.h> + +class MyPopupMenu : public TQPopupMenu +{ +    friend class TQAccessiblePopup; +}; + +TQAccessiblePopup::TQAccessiblePopup( TQObject *o ) +: TQAccessibleWidget( o ) +{ +    TQ_ASSERT( o->inherits("TQPopupMenu") ); +} + +TQPopupMenu *TQAccessiblePopup::popupMenu() const +{ +    return (TQPopupMenu*)object(); +} + +int TQAccessiblePopup::childCount() const +{ +    return popupMenu()->count(); +} + +TQRESULT TQAccessiblePopup::queryChild( int /*control*/, TQAccessibleInterface **iface ) const +{ +    *iface = 0; +    return TQS_FALSE; +} + +TQRect TQAccessiblePopup::rect( int control ) const +{ +    if ( !control ) +	return TQAccessibleWidget::rect( control ); + +    TQRect r = popupMenu()->itemGeometry( control - 1 ); +    TQPoint tlp = popupMenu()->mapToGlobal( TQPoint( 0,0 ) ); + +    return TQRect( tlp.x() + r.x(), tlp.y() + r.y(), r.width(), r.height() ); +} + +int TQAccessiblePopup::controlAt( int x, int y ) const +{ +    TQPoint p = popupMenu()->mapFromGlobal( TQPoint( x,y ) ); +    MyPopupMenu *mp = (MyPopupMenu*)popupMenu(); +    return mp->itemAtPos( p, FALSE ) + 1; +} + +int TQAccessiblePopup::navigate( NavDirection direction, int startControl ) const +{ +    if ( direction != NavFirstChild && direction != NavLastChild && direction != NavFocusChild && !startControl ) +	return TQAccessibleWidget::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; +} + +TQString TQAccessiblePopup::text( Text t, int control ) const +{ +    TQString tx = TQAccessibleWidget::text( t, control ); +    if ( !!tx ) +	return tx; + +    int id; +    TQMenuItem *item = 0; +    if ( control ) { +	id = popupMenu()->idAt( control - 1 ); +	item = popupMenu()->tqfindItem( 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 TQPopupMenu::tr("Open"); +	return TQPopupMenu::tr("Execute"); +    default: +	break; +    } +    return tx; +} + +TQAccessible::Role TQAccessiblePopup::role( int control ) const +{ +    if ( !control ) +	return PopupMenu; +     +    TQMenuItem *item = popupMenu()->tqfindItem( popupMenu()->idAt( control -1 ) ); +    if ( item && item->isSeparator() ) +	return Separator; +    return MenuItem; +} + +TQAccessible::State TQAccessiblePopup::state( int control ) const +{ +    int s = TQAccessibleWidget::state( control ); +    if ( !control ) +	return (State)s; + +    int id = popupMenu()->idAt( control -1 ); +    TQMenuItem *item = popupMenu()->tqfindItem( id ); +    if ( !item ) +	return (State)s; + +    if ( popupMenu()->style().tqstyleHint( TQStyle::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 TQAccessiblePopup::doDefaultAction( int control ) +{ +    if ( !control ) +	return FALSE; + +    int id = popupMenu()->idAt( control -1 ); +    TQMenuItem *item = popupMenu()->tqfindItem( id ); +    if ( !item || !item->isEnabled() ) +	return FALSE; + +    popupMenu()->activateItemAt( control - 1); +    return TRUE; +} + +bool TQAccessiblePopup::setFocus( int control ) +{ +    if ( !control ) +	return FALSE; + +    int id = popupMenu()->idAt( control -1 ); +    TQMenuItem *item = popupMenu()->tqfindItem( id ); +    if ( !item || !item->isEnabled() ) +	return FALSE; + +    popupMenu()->setActiveItem( control - 1 ); +    return TRUE; +} + + +class MyMenuBar : public TQMenuBar +{ +    friend class TQAccessibleMenuBar; +}; + +TQAccessibleMenuBar::TQAccessibleMenuBar( TQObject *o ) +: TQAccessibleWidget( o ) +{ +    TQ_ASSERT( o->inherits( "TQMenuBar" ) ); +} + +TQMenuBar *TQAccessibleMenuBar::menuBar() const +{ +    return (TQMenuBar*)object(); +} + +int TQAccessibleMenuBar::childCount() const +{ +    return menuBar()->count(); +} + +TQRESULT TQAccessibleMenuBar::queryChild( int /*control*/, TQAccessibleInterface **iface ) const +{ +    *iface = 0; +    return TQS_FALSE; +} + +TQRect TQAccessibleMenuBar::rect( int control ) const +{ +    if ( !control ) +	return TQAccessibleWidget::rect( control ); + +    MyMenuBar *mb = (MyMenuBar*)menuBar(); +    TQRect r = mb->tqitemRect( control - 1 ); +    TQPoint tlp = mb->mapToGlobal( TQPoint( 0,0 ) ); + +    return TQRect( tlp.x() + r.x(), tlp.y() + r.y(), r.width(), r.height() ); +} + +int TQAccessibleMenuBar::controlAt( int x, int y ) const +{ +    MyMenuBar *mb = (MyMenuBar*)menuBar(); +    TQPoint p = mb->mapFromGlobal( TQPoint( x,y ) ); +    return mb->itemAtPos( p ) + 1; +} + +int TQAccessibleMenuBar::navigate( NavDirection direction, int startControl ) const +{ +    if ( direction != NavFirstChild && direction != NavLastChild && direction != NavFocusChild && !startControl ) +	return TQAccessibleWidget::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; +} + +TQString TQAccessibleMenuBar::text( Text t, int control ) const +{ +    TQString tx = TQAccessibleWidget::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 TQMenuBar::tr("Open"); +    default: +	break; +    } + +    return tx; +} + +TQAccessible::Role TQAccessibleMenuBar::role( int control ) const +{ +    if ( !control ) +	return MenuBar; + +    TQMenuItem *item = menuBar()->tqfindItem( menuBar()->idAt( control -1 ) ); +    if ( item && item->isSeparator() ) +	return Separator; +    return MenuItem; +} + +TQAccessible::State TQAccessibleMenuBar::state( int control ) const +{ +    int s = TQAccessibleWidget::state( control ); +    if ( !control ) +	return (State)s; + +    int id = menuBar()->idAt( control -1 ); +    TQMenuItem *item = menuBar()->tqfindItem( id ); +    if ( !item ) +	return (State)s; + +    if ( menuBar()->style().tqstyleHint( TQStyle::SH_PopupMenu_MouseTracking ) ) +	s |= HotTracked; +    if ( item->isSeparator() || !item->isEnabled() ) +	s |= Unavailable; +    if ( menuBar()->isItemActive( id ) ) +	s |= Focused; + +    return (State)s; +} + +bool TQAccessibleMenuBar::doDefaultAction( int control ) +{ +    if ( !control ) +	return FALSE; + +    int id = menuBar()->idAt( control -1 ); +    TQMenuItem *item = menuBar()->tqfindItem( id ); +    if ( !item || !item->isEnabled() ) +	return FALSE; + +    menuBar()->activateItemAt( control - 1); +    return TRUE; +} + +bool TQAccessibleMenuBar::setFocus( int control ) +{ +    if ( !control ) +	return FALSE; + +    int id = menuBar()->idAt( control -1 ); +    TQMenuItem *item = menuBar()->tqfindItem( id ); +    if ( !item || !item->isEnabled() ) +	return FALSE; + +    return TRUE; +} | 
