1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_UNOTOOLS_OPTIONS_HXX
21 #define INCLUDED_UNOTOOLS_OPTIONS_HXX
23 #include <sal/config.h>
24 #include <unotools/unotoolsdllapi.h>
25 #include <o3tl/typed_flags_set.hxx>
29 // bits for broadcasting hints of changes in ConfigurationListener::ConfigurationChanged, may be combined
30 enum class ConfigurationHints
{
36 DatePatterns
= 0x0010,
38 CtlSettingsChanged
= 0x2000,
41 template<> struct typed_flags
<ConfigurationHints
> : is_typed_flags
<ConfigurationHints
, 0x203f> {};
45 The class utl::detail::Options provides a kind of multiplexer. It implements a ConfigurationListener
46 that is usually registered at a ConfigItem class. At the same time it implements a ConfigurationBroadcaster
47 that allows further ("external") listeners to register.
48 Once the class deriving from Options is notified about
49 configuration changes by the ConfigItem if its content has been changed by calling some of its methods,
50 a call of the Options::NotifyListeners() method will send out notifications to all external listeners.
55 class ConfigurationBroadcaster
;
57 // interface for configuration listener
58 class UNOTOOLS_DLLPUBLIC ConfigurationListener
61 virtual ~ConfigurationListener();
63 virtual void ConfigurationChanged( ConfigurationBroadcaster
* p
, ConfigurationHints nHint
) = 0;
65 typedef ::std::vector
< ConfigurationListener
* > IMPL_ConfigurationListenerList
;
67 // complete broadcasting implementation
68 class UNOTOOLS_DLLPUBLIC ConfigurationBroadcaster
70 std::unique_ptr
<IMPL_ConfigurationListenerList
> mpList
;
71 sal_Int32 m_nBroadcastBlocked
; // broadcast only if this is 0
72 ConfigurationHints m_nBlockedHint
;
75 void AddListener( utl::ConfigurationListener
* pListener
);
76 void RemoveListener( utl::ConfigurationListener
const * pListener
);
78 // notify listeners; nHint is an implementation detail of the particular class deriving from ConfigurationBroadcaster
79 void NotifyListeners( ConfigurationHints nHint
);
80 ConfigurationBroadcaster();
81 ConfigurationBroadcaster(ConfigurationBroadcaster
const & );
82 virtual ~ConfigurationBroadcaster();
83 ConfigurationBroadcaster
& operator =(ConfigurationBroadcaster
const & other
);
84 virtual void BlockBroadcasts( bool bBlock
);
89 // A base class for the various option classes supported by
90 // unotools/source/config/itemholderbase.hxx (which must be public, as it is
91 // shared between unotools, svl and svt)
92 // It also provides an implementation for a Configuration Listener and inherits a broadcaster implementation
94 class SAL_WARN_UNUSED UNOTOOLS_DLLPUBLIC Options
95 : public utl::ConfigurationBroadcaster
, public utl::ConfigurationListener
100 virtual ~Options() override
= 0;
103 Options(Options
const &) = delete;
104 Options
& operator =(Options
const &) = delete;
107 virtual void ConfigurationChanged( ::utl::ConfigurationBroadcaster
* p
, ConfigurationHints nHint
) override
;
114 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */