Line data Source code
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 :
10 : #ifndef VCL_ICONTHEMESELECTOR_HXX_
11 : #define VCL_ICONTHEMESELECTOR_HXX_
12 :
13 : #include <rtl/ustring.hxx>
14 :
15 : #include <vcl/dllapi.h>
16 :
17 : #include <vector>
18 :
19 : // forward declaration of unit test class. Required for friend relationship.
20 : class IconThemeSelectorTest;
21 :
22 : namespace vcl {
23 : class IconThemeInfo;
24 :
25 : /** This class helps to choose an icon theme from a list of installed themes.
26 : *
27 : * The following factors influence the selection:
28 : * -# When high contrast mode is enabled, the high contrast icon theme is selected (if it is installed).
29 : * -# When a preferred theme has been set (e.g., in the gnome desktop settings), that theme is selected.
30 : */
31 0 : class VCL_DLLPUBLIC IconThemeSelector {
32 : public:
33 : IconThemeSelector();
34 :
35 : /** Select an icon theme from the list of installed themes.
36 : *
37 : * If high contrast mode has been enabled, the highcontrast theme will be selected (if it is available).
38 : *
39 : * @pre
40 : * @p installedThemes must not be empty
41 : */
42 : OUString
43 : SelectIconTheme(
44 : const std::vector<IconThemeInfo>& installedThemes,
45 : const OUString& theme
46 : ) const;
47 :
48 : /** Select the standard icon theme for a desktop environment from a list of installed themes.
49 : *
50 : * If a preferred theme has been set, this one will take precedence.
51 : *
52 : * The same logic as in SelectIconTheme() will apply.
53 : *
54 : * @pre
55 : * @p installedThemes must not be empty
56 : */
57 : OUString
58 : SelectIconThemeForDesktopEnvironment(
59 : const std::vector<IconThemeInfo>& installedThemes,
60 : const OUString& desktopEnvironment) const;
61 :
62 : void
63 : SetUseHighContrastTheme(bool);
64 :
65 : void
66 : SetPreferredIconTheme(const OUString&);
67 :
68 : bool
69 : operator==(const vcl::IconThemeSelector&) const;
70 :
71 : bool
72 : operator!=(const vcl::IconThemeSelector&) const;
73 :
74 : private:
75 : /** Return the first element of the themes, or the fallback if the vector is empty */
76 : static OUString
77 : ReturnFallback(const std::vector<IconThemeInfo>& installedThemes);
78 :
79 : /** The name of the icon theme to use for high contrast mode */
80 : static const OUString
81 : HIGH_CONTRAST_ICON_THEME_ID;
82 :
83 : /** The name of the icon theme which is used as fallback */
84 : static const OUString
85 : FALLBACK_ICON_THEME_ID;
86 :
87 :
88 : static OUString
89 : GetIconThemeForDesktopEnvironment(const OUString& desktopEnvironment);
90 :
91 : OUString mPreferredIconTheme;
92 : bool mUseHighContrastTheme;
93 :
94 : friend class ::IconThemeSelectorTest;
95 : };
96 :
97 : } /* namespace vcl */
98 :
99 : #endif /* VCL_ICONTHEMESELECTOR_HXX_ */
100 :
101 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|