1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_accessibility.hxx" 30 #include <accessibility/extended/listboxaccessible.hxx> 31 #include <svtools/svtreebx.hxx> 32 33 //........................................................................ 34 namespace accessibility 35 { 36 //........................................................................ 37 38 //==================================================================== 39 //= ListBoxAccessibleBase 40 //==================================================================== 41 //-------------------------------------------------------------------- 42 ListBoxAccessibleBase::ListBoxAccessibleBase( SvTreeListBox& _rWindow ) 43 :m_pWindow( &_rWindow ) 44 { 45 m_pWindow->AddEventListener( LINK( this, ListBoxAccessibleBase, WindowEventListener ) ); 46 } 47 48 //-------------------------------------------------------------------- 49 ListBoxAccessibleBase::~ListBoxAccessibleBase( ) 50 { 51 if ( m_pWindow ) 52 { 53 // cannot call "dispose" here, as it is abstract, so the VTABLE of the derived class 54 // is not intact anymore 55 // so we call our "disposing" only 56 disposing(); 57 } 58 } 59 60 //-------------------------------------------------------------------- 61 IMPL_LINK( ListBoxAccessibleBase, WindowEventListener, VclSimpleEvent*, pEvent ) 62 { 63 DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "ListBoxAccessibleBase::WindowEventListener: unexpected WindowEvent!" ); 64 if ( pEvent && pEvent->ISA( VclWindowEvent ) ) 65 { 66 DBG_ASSERT( static_cast< VclWindowEvent* >( pEvent )->GetWindow() , "ListBoxAccessibleBase::WindowEventListener: no event window!" ); 67 DBG_ASSERT( static_cast< VclWindowEvent* >( pEvent )->GetWindow() == m_pWindow, "ListBoxAccessibleBase::WindowEventListener: where did this come from?" ); 68 69 ProcessWindowEvent( *static_cast< VclWindowEvent* >( pEvent ) ); 70 } 71 return 0; 72 } 73 74 // ----------------------------------------------------------------------------- 75 void ListBoxAccessibleBase::disposing() 76 { 77 if ( m_pWindow ) 78 m_pWindow->RemoveEventListener( LINK( this, ListBoxAccessibleBase, WindowEventListener ) ); 79 m_pWindow = NULL; 80 } 81 82 // ----------------------------------------------------------------------------- 83 void ListBoxAccessibleBase::ProcessWindowEvent( const VclWindowEvent& _rVclWindowEvent ) 84 { 85 if ( isAlive() ) 86 { 87 switch ( _rVclWindowEvent.GetId() ) 88 { 89 case VCLEVENT_OBJECT_DYING : 90 { 91 if ( m_pWindow ) 92 m_pWindow->RemoveEventListener( LINK( this, ListBoxAccessibleBase, WindowEventListener ) ); 93 m_pWindow = NULL; 94 dispose(); 95 break; 96 } 97 } 98 } 99 } 100 101 //........................................................................ 102 } // namespace accessibility 103 //........................................................................ 104