try to avoid scaling bitmaps twice in Skia when drawing
[LibreOffice.git] / include / unotools / options.hxx
blob4e0206ace01736ef5e90d8f5ba8c968417553982
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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>
26 #include <vector>
27 #include <memory>
29 // bits for broadcasting hints of changes in ConfigurationListener::ConfigurationChanged, may be combined
30 enum class ConfigurationHints {
31 NONE = 0x0000,
32 Locale = 0x0001,
33 Currency = 0x0002,
34 UiLocale = 0x0004,
35 DecSep = 0x0008,
36 DatePatterns = 0x0010,
37 IgnoreLang = 0x0020,
38 CtlSettingsChanged = 0x2000,
40 namespace o3tl {
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.
53 namespace utl {
55 class ConfigurationBroadcaster;
57 // interface for configuration listener
58 class UNOTOOLS_DLLPUBLIC ConfigurationListener
60 public:
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;
74 public:
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 );
87 namespace detail {
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
97 public:
98 Options();
100 virtual ~Options() override = 0;
102 private:
103 Options(Options const &) = delete;
104 Options& operator =(Options const &) = delete;
106 protected:
107 virtual void ConfigurationChanged( ::utl::ConfigurationBroadcaster* p, ConfigurationHints nHint ) override;
112 #endif
114 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */