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"
28 The class utl::detail::Options provides a kind of multiplexer. It implements a ConfigurationListener
29 that is usually registered at a ConfigItem class. At the same time it implements a ConfigurationBroadcaster
30 that allows further ("external") listeners to register.
31 Once the class deriving from Options is notified about
32 configuration changes by the ConfigItem if its content has been changed by calling some of its methods,
33 a call of the Options::NotifyListeners() method will send out notifications to all external listeners.
38 class ConfigurationBroadcaster
;
40 // interface for configuration listener
41 class UNOTOOLS_DLLPUBLIC ConfigurationListener
44 virtual ~ConfigurationListener();
46 virtual void ConfigurationChanged( ConfigurationBroadcaster
* p
, sal_uInt32 nHint
=0 ) = 0;
48 typedef ::std::vector
< ConfigurationListener
* > IMPL_ConfigurationListenerList
;
50 // complete broadcasting implementation
51 class UNOTOOLS_DLLPUBLIC ConfigurationBroadcaster
53 IMPL_ConfigurationListenerList
* mpList
;
54 sal_Int32 m_nBroadcastBlocked
; // broadcast only if this is 0
55 sal_uInt32 m_nBlockedHint
;
58 void AddListener( utl::ConfigurationListener
* pListener
);
59 void RemoveListener( utl::ConfigurationListener
* pListener
);
61 // notify listeners; nHint is an implementation detail of the particular class deriving from ConfigurationBroadcaster
62 void NotifyListeners( sal_uInt32 nHint
);
63 ConfigurationBroadcaster();
64 virtual ~ConfigurationBroadcaster();
65 virtual void BlockBroadcasts( bool bBlock
);
70 // A base class for the various option classes supported by
71 // unotools/source/config/itemholderbase.hxx (which must be public, as it is
72 // shared between unotools, svl and svt)
73 // It also provides an implementation for a Configuration Listener and inherits a broadcaster implementation
75 class UNOTOOLS_DLLPUBLIC SAL_WARN_UNUSED Options
76 : public utl::ConfigurationBroadcaster
, public utl::ConfigurationListener
81 virtual ~Options() = 0;
84 UNOTOOLS_DLLPRIVATE
Options(Options
&); // not defined
85 UNOTOOLS_DLLPRIVATE
void operator =(Options
&); // not defined
88 virtual void ConfigurationChanged( ::utl::ConfigurationBroadcaster
* p
, sal_uInt32 nHint
=0 );
95 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */