diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2013-11-13 20:33:50 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2013-11-14 23:53:50 -0500 |
commit | 18d07b2affbbbfb2ff9152d3ad8d1744fe75ab47 (patch) | |
tree | 49e285fe010f073c89f92f321397a495902f78a5 /include | |
parent | d7867b28623e4220f62b8ed9259bed5d8878a3b3 (diff) |
Rework SvtListener and SvtBroadcaster internals.
The old code was simply awkward.
Change-Id: I1a58a9af86c100be238d306570b40f70c5100314
Diffstat (limited to 'include')
-rw-r--r-- | include/svl/broadcast.hxx | 27 | ||||
-rw-r--r-- | include/svl/listener.hxx | 28 | ||||
-rw-r--r-- | include/svl/listeneriter.hxx | 65 |
3 files changed, 28 insertions, 92 deletions
diff --git a/include/svl/broadcast.hxx b/include/svl/broadcast.hxx index 0b533ba28568..ab62d488cce6 100644 --- a/include/svl/broadcast.hxx +++ b/include/svl/broadcast.hxx @@ -20,36 +20,41 @@ #define INCLUDED_SVL_BROADCAST_HXX #include <svl/svldllapi.h> -#include <tools/rtti.hxx> + +#include <boost/unordered_set.hpp> class SvtListener; class SfxHint; -class SvtListenerBase; - -//------------------------------------------------------------------------- class SVL_DLLPUBLIC SvtBroadcaster { -friend class SvtListener; -friend class SvtListenerBase; -friend class SvtListenerIter; - SvtListenerBase* pRoot; +public: + friend class SvtListener; + + typedef boost::unordered_set<SvtListener*> ListenersType; +private: const SvtBroadcaster& operator=(const SvtBroadcaster &); // verboten + void Add( SvtListener* p ); + void Remove( SvtListener* p ); + protected: virtual void ListenersGone(); public: - TYPEINFO(); - SvtBroadcaster(); SvtBroadcaster( const SvtBroadcaster &rBC ); virtual ~SvtBroadcaster(); void Broadcast( const SfxHint &rHint ); - sal_Bool HasListeners() const { return 0 != pRoot; } + ListenersType& GetAllListeners(); + + bool HasListeners() const; + +private: + ListenersType maListeners; }; diff --git a/include/svl/listener.hxx b/include/svl/listener.hxx index 4204b2b33d69..c8710230c9a7 100644 --- a/include/svl/listener.hxx +++ b/include/svl/listener.hxx @@ -20,34 +20,30 @@ #define INCLUDED_SVL_LISTENER_HXX #include <svl/svldllapi.h> -#include <tools/rtti.hxx> + +#include <boost/unordered_set.hpp> class SvtBroadcaster; class SfxHint; -class SvtListenerBase; - -//------------------------------------------------------------------------- class SVL_DLLPUBLIC SvtListener { - friend class SvtListenerBase; - SvtListenerBase *pBrdCastLst; + typedef boost::unordered_set<SvtBroadcaster*> BroadcastersType; + BroadcastersType maBroadcasters; const SvtListener& operator=(const SvtListener &); // n.i., ist verboten public: - TYPEINFO(); - - SvtListener(); - SvtListener( const SvtListener &rCopy ); - virtual ~SvtListener(); + SvtListener(); + SvtListener( const SvtListener &r ); + virtual ~SvtListener(); - sal_Bool StartListening( SvtBroadcaster& rBroadcaster ); - sal_Bool EndListening( SvtBroadcaster& rBroadcaster ); - void EndListeningAll(); - sal_Bool IsListening( SvtBroadcaster& rBroadcaster ) const; + bool StartListening( SvtBroadcaster& rBroadcaster ); + bool EndListening( SvtBroadcaster& rBroadcaster ); + void EndListeningAll(); + bool IsListening( SvtBroadcaster& rBroadcaster ) const; - sal_Bool HasBroadcaster() const { return 0 != pBrdCastLst; } + bool HasBroadcaster() const; virtual void Notify( SvtBroadcaster& rBC, const SfxHint& rHint ); }; diff --git a/include/svl/listeneriter.hxx b/include/svl/listeneriter.hxx deleted file mode 100644 index 7d91fa33a524..000000000000 --- a/include/svl/listeneriter.hxx +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- 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 . - */ -#ifndef INCLUDED_SVL_LISTENERITER_HXX -#define INCLUDED_SVL_LISTENERITER_HXX - -#include <svl/svldllapi.h> -#include <tools/rtti.hxx> - -class SvtListener; -class SvtListenerBase; -class SvtBroadcaster; - -//------------------------------------------------------------------------- - -class SVL_DLLPUBLIC SvtListenerIter -{ - friend class SvtListenerBase; - - SvtBroadcaster& rRoot; - SvtListenerBase *pAkt, *pDelNext; - - // for the update of all iterator's, if a listener is added or removed - // at the same time. - static SvtListenerIter *pListenerIters; - SvtListenerIter *pNxtIter; - - SVL_DLLPRIVATE static void RemoveListener( SvtListenerBase& rDel, - SvtListenerBase* pNext ); - -public: - SvtListenerIter( SvtBroadcaster& ); - ~SvtListenerIter(); - - const SvtBroadcaster& GetBroadcaster() const { return rRoot; } - SvtBroadcaster& GetBroadcaster() { return rRoot; } - - SvtListener* GoNext(); // to the next - - SvtListener* GoStart(); // to the start of the list - - SvtListener* GetCurr() const; // returns the current - - int IsChanged() const { return pDelNext != pAkt; } -}; - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |