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 INCLUDED_VCL_ICONTHEMESELECTOR_HXX 11 #define INCLUDED_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 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&, bool bDarkIconTheme); 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 which is used as fallback */ 80 static constexpr OUStringLiteral FALLBACK_ICON_THEME_ID = u"colibre"; 81 82 83 static OUString 84 GetIconThemeForDesktopEnvironment(const OUString& desktopEnvironment); 85 86 OUString mPreferredIconTheme; 87 bool mUseHighContrastTheme; 88 bool mPreferDarkIconTheme; 89 90 friend class ::IconThemeSelectorTest; 91 }; 92 93 } /* namespace vcl */ 94 95 #endif // INCLUDED_VCL_ICONTHEMESELECTOR_HXX 96 97 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 98