diff options
Diffstat (limited to 'bf_svtools/source/notify/svt_listener.cxx')
-rw-r--r-- | bf_svtools/source/notify/svt_listener.cxx | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/bf_svtools/source/notify/svt_listener.cxx b/bf_svtools/source/notify/svt_listener.cxx new file mode 100644 index 000000000..6b6e2df5b --- /dev/null +++ b/bf_svtools/source/notify/svt_listener.cxx @@ -0,0 +1,158 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <tools/debug.hxx> + +#include "broadcast.hxx" +#include "listener.hxx" +#include "listenerbase.hxx" +#include "listeneriter.hxx" + +namespace binfilter +{ + +//==================================================================== +TYPEINIT0(SvtListener); + +//==================================================================== +// simple ctor of class SvtListener + +SvtListener::SvtListener() + : pBrdCastLst( 0 ) +{ +} +//-------------------------------------------------------------------- + +// copy ctor of class SvtListener + +SvtListener::SvtListener( const SvtListener &rListener ) + : pBrdCastLst( 0 ) +{ + SvtListenerBase* pLst = rListener.pBrdCastLst; + while( pLst ) + { + new SvtListenerBase( *this, *pLst->GetBroadcaster() ); + pLst = pLst->GetNext(); + } +} +//-------------------------------------------------------------------- + +// unregisteres the SvtListener from its SvtBroadcasters + +SvtListener::~SvtListener() +{ + EndListeningAll(); +} + +//-------------------------------------------------------------------- + +// registeres at a specific SvtBroadcaster + +BOOL SvtListener::StartListening( SvtBroadcaster& rBroadcaster ) +{ + const SvtListenerBase* pLst = pBrdCastLst; + while( pLst ) + { + if( &rBroadcaster == pLst->GetBroadcaster() ) + { + // double, than return + return FALSE; + } + pLst = pLst->GetNext(); + } + new SvtListenerBase( *this, rBroadcaster ); + return TRUE; +} + +//-------------------------------------------------------------------- + +// unregisteres at a specific SvtBroadcaster + +BOOL SvtListener::EndListening( SvtBroadcaster& rBroadcaster ) +{ + SvtListenerBase *pLst = pBrdCastLst, *pPrev = pLst; + while( pLst ) + { + if( &rBroadcaster == pLst->GetBroadcaster() ) + { + if( pBrdCastLst == pLst ) + pBrdCastLst = pLst->GetNext(); + else + pPrev->SetNext( pLst->GetNext() ); + + delete pLst; + return TRUE; + } + pPrev = pLst; + pLst = pLst->GetNext(); + } + return FALSE; +} + +//-------------------------------------------------------------------- + +// unregisteres all Broadcasters + +void SvtListener::EndListeningAll() +{ + SvtListenerBase *pLst = pBrdCastLst; + while( pLst ) + { + SvtListenerBase *pDel = pLst; + pLst = pLst->GetNext(); + + delete pDel; + } + pBrdCastLst = 0; +} + +#ifdef DBG_UTIL + +BOOL SvtListener::IsListening( SvtBroadcaster& rBroadcaster ) const +{ + const SvtListenerBase *pLst = pBrdCastLst; + while( pLst ) + { + if( &rBroadcaster == pLst->GetBroadcaster() ) + break; + pLst = pLst->GetNext(); + } + return 0 != pLst; +} + +#endif + +//-------------------------------------------------------------------- + +// base implementation of notification handler + +void SvtListener::Notify( SvtBroadcaster& +#ifdef DBG_UTIL +rBC +#endif +, const SfxHint& ) +{ + DBG_ASSERT( IsListening( rBC ), + "notification from unregistered broadcaster" ); +} + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |