diff options
author | Thomas Benisch <tbe@openoffice.org> | 2002-05-22 12:15:17 +0000 |
---|---|---|
committer | Thomas Benisch <tbe@openoffice.org> | 2002-05-22 12:15:17 +0000 |
commit | 1bc0f1420b4e4474537bc42bffc45d001e82e443 (patch) | |
tree | 9a8695141f7bd2169f9817269b0784ea763aaa11 /vcl/source/window | |
parent | c4b0e95982d554d0073f5492e077702622aaaec0 (diff) |
#98573# added IsItemVisible, SelectItem, DeSelect, IsMenuVisible
Diffstat (limited to 'vcl/source/window')
-rw-r--r-- | vcl/source/window/menu.cxx | 65 |
1 files changed, 54 insertions, 11 deletions
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index 1e0bb03dfa7c..8092ba80f271 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -2,9 +2,9 @@ * * $RCSfile: menu.cxx,v $ * - * $Revision: 1.45 $ + * $Revision: 1.46 $ * - * last change: $Author: tbe $ $Date: 2002-05-17 09:57:15 $ + * last change: $Author: tbe $ $Date: 2002-05-22 13:15:17 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -1564,7 +1564,9 @@ BOOL Menu::ImplIsVisible( USHORT nPos ) const if ( !bIsMenuBar && ( nMenuFlags & MENU_FLAG_HIDEDISABLEDENTRIES ) ) { MenuItemData* pData = pItemList->GetDataFromPos( nPos ); - if ( pData->eType != MENUITEM_SEPARATOR ) + if( !pData ) // e.g. nPos == ITEMPOS_INVALID + bVisible = FALSE; + else if ( pData->eType != MENUITEM_SEPARATOR ) { // bVisible = pData->bEnabled && ( !pData->pSubMenu || pData->pSubMenu->HasValidEntries( TRUE ) ); bVisible = pData->bEnabled; // SubMenus nicht pruefen, weil sie ggf. erst im Activate() gefuellt werden. @@ -1601,6 +1603,24 @@ BOOL Menu::ImplIsVisible( USHORT nPos ) const return bVisible; } +BOOL Menu::IsItemVisible( USHORT nItemId ) const +{ + return ImplIsVisible( GetItemPos( nItemId ) ); +} + +BOOL Menu::IsMenuVisible() const +{ + return pWindow && pWindow->IsReallyVisible(); +} + +void Menu::SelectItem( USHORT nItemId ) +{ + if( bIsMenuBar ) + static_cast<MenuBar*>(this)->SelectEntry( nItemId ); + else + static_cast<PopupMenu*>(this)->SelectEntry( nItemId ); +} + Size Menu::ImplCalcSize( Window* pWin ) { // | Checked| Image| Text| Accel/Popup| @@ -2262,12 +2282,30 @@ void PopupMenu::SelectEntry( USHORT nId ) { if ( ImplGetWindow() ) { - USHORT nPos; - MenuItemData* pData = GetItemList()->GetData( nId, nPos ); - if ( pData->pSubMenu ) - ImplGetFloatingWindow()->ChangeHighlightItem( nPos, TRUE ); + if( nId != ITEMPOS_INVALID ) + { + USHORT nPos; + MenuItemData* pData = GetItemList()->GetData( nId, nPos ); + if ( pData->pSubMenu ) + ImplGetFloatingWindow()->ChangeHighlightItem( nPos, TRUE ); + else + ImplGetFloatingWindow()->EndExecute( nId ); + } else - ImplGetFloatingWindow()->EndExecute( nId ); + { + MenuFloatingWindow* pFloat = ImplGetFloatingWindow(); + pFloat->GrabFocus(); + USHORT nPos; + for( nPos = 0; nPos < GetItemList()->Count(); nPos++ ) + { + MenuItemData* pData = (MenuItemData*)GetItemList()->GetObject( nPos ); + if( pData->pSubMenu ) + { + pFloat->KillActivePopup(); + } + } + pFloat->ChangeHighlightItem( ITEMPOS_INVALID, FALSE ); + } } } @@ -3103,9 +3141,14 @@ void MenuFloatingWindow::ChangeHighlightItem( USHORT n, BOOL bStartPopupTimer ) HighlightItem( nHighlightedItem, FALSE ); nHighlightedItem = (USHORT)n; - DBG_ASSERT( ( nHighlightedItem == ITEMPOS_INVALID ) || pMenu->ImplIsVisible( nHighlightedItem ), "ChangeHighlightItem: Not visible!" ); - HighlightItem( nHighlightedItem, TRUE ); - pMenu->ImplCallHighlight( nHighlightedItem ); + DBG_ASSERT( pMenu->ImplIsVisible( nHighlightedItem ) || nHighlightedItem == ITEMPOS_INVALID, "ChangeHighlightItem: Not visible!" ); + if( nHighlightedItem != ITEMPOS_INVALID ) + { + HighlightItem( nHighlightedItem, TRUE ); + pMenu->ImplCallHighlight( nHighlightedItem ); + } + else + pMenu->nSelectedId = 0; if ( bStartPopupTimer ) aHighlightChangedTimer.Start(); |