Coverage Report

Created: 2025-12-31 10:39

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/include/svl/lstner.hxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
#ifndef INCLUDED_SVL_LSTNER_HXX
20
#define INCLUDED_SVL_LSTNER_HXX
21
22
#include <svl/svldllapi.h>
23
#include <map>
24
#include <memory>
25
#include <vector>
26
#ifdef DBG_UTIL
27
#include <sal/backtrace.hxx>
28
#endif
29
30
class SfxBroadcaster;
31
class SfxHint;
32
33
//StartListening duplicate handling options
34
//Prevent only adds the listener if it's not already added
35
//Allow allows duplicate listeners
36
//Unexpected, the default, is for the usual case where the
37
//listener should only be added once and duplicates are
38
//unexpected. In dbgutil mode this tracks where the original
39
//listener was added from and reports the duplicate addition
40
//as an error
41
enum class DuplicateHandling { Unexpected, Prevent, Allow };
42
43
class SVL_DLLPUBLIC SfxListener
44
{
45
    std::vector<SfxBroadcaster*> maBCs;
46
#ifdef DBG_UTIL
47
    std::map<SfxBroadcaster*, std::unique_ptr<sal::BacktraceState>>
48
        maCallStacks;
49
#endif
50
51
private:
52
    const SfxListener&  operator=(const SfxListener &) = delete;
53
54
public:
55
56
14.4M
                        SfxListener() {}
57
                        SfxListener( const SfxListener &rCopy );
58
    virtual             ~SfxListener() COVERITY_NOEXCEPT_FALSE;
59
60
    void                StartListening(SfxBroadcaster& rBroadcaster, DuplicateHandling eDuplicateHanding = DuplicateHandling::Unexpected);
61
    void                EndListening( SfxBroadcaster& rBroadcaster, bool bRemoveAllDuplicates = false );
62
    void                EndListeningAll();
63
    bool                IsListening( SfxBroadcaster& rBroadcaster ) const;
64
65
    sal_uInt16          GetBroadcasterCount() const;
66
    SfxBroadcaster*     GetBroadcasterJOE( sal_uInt16 nNo ) const;
67
68
    virtual void        Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
69
70
    void                RemoveBroadcaster_Impl( SfxBroadcaster& rBC );
71
72
    /// Used to avoid cost of dynamic_cast in SdrViewIter::ImpFindView
73
125k
    virtual bool        IsSdrView() const { return false; }
74
    /// Used to avoid cost of dynamic_cast in SwXStyleFamily::FindStyle
75
2.17M
    virtual bool        IsSwXStyle() const { return false; }
76
};
77
78
#endif
79
80
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */