summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2013-11-13 20:33:50 -0500
committerKohei Yoshida <kohei.yoshida@collabora.com>2013-11-14 23:53:50 -0500
commit18d07b2affbbbfb2ff9152d3ad8d1744fe75ab47 (patch)
tree49e285fe010f073c89f92f321397a495902f78a5 /include
parentd7867b28623e4220f62b8ed9259bed5d8878a3b3 (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.hxx27
-rw-r--r--include/svl/listener.hxx28
-rw-r--r--include/svl/listeneriter.hxx65
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: */