Coverage Report

Created: 2025-12-08 09:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/include/vcl/IconThemeInfo.hxx
Line
Count
Source
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_ICONTHEMEINFO_HXX
11
#define INCLUDED_VCL_ICONTHEMEINFO_HXX
12
13
#include <vcl/dllapi.h>
14
#include <tools/gen.hxx>
15
#include <rtl/ustring.hxx>
16
17
#include <vector>
18
19
// forward declaration of unit test classes. Required for friend relationship.
20
class IconThemeInfoTest;
21
class IconThemeSelectorTest;
22
class IconThemeScannerTest;
23
24
namespace vcl
25
{
26
/** This class provides information about an icon theme.
27
 */
28
class VCL_DLLPUBLIC IconThemeInfo
29
{
30
public:
31
    /** The name of the icon theme to use for high contrast mode */
32
    static constexpr OUString HIGH_CONTRAST_ID_BRIGHT = u"sifr"_ustr;
33
    static constexpr OUString HIGH_CONTRAST_ID_DARK = u"sifr_dark"_ustr;
34
35
    /** Construct an IconThemeInfo from the URL to a file.
36
     * This method will throw a std::runtime_error if the URL cannot be properly parsed.
37
     * Check the URL with UrlCanBeParsed() first.
38
     */
39
    IconThemeInfo(const OUString& urlToFile);
40
41
0
    const OUString& GetDisplayName() const { return mDisplayName; }
42
43
0
    const OUString& GetThemeId() const { return mThemeId; }
44
45
0
    const OUString& GetUrlToFile() const { return mUrlToFile; }
46
47
    /** Obtain the icon size by theme name.
48
     * @internal
49
     * It is not clear where this information belongs to. The sizes were hard-coded before they moved here.
50
     * Maybe there is a way to determine the sizes from the icon theme packages.
51
     */
52
    static Size SizeByThemeName(std::u16string_view);
53
54
    /** Check whether an IconThemeInfo can be constructed from a URL */
55
    static bool UrlCanBeParsed(std::u16string_view url);
56
57
    /** Find an icon theme by its id in a vector.
58
     * Throws a runtime_error if the theme is not contained in the vector
59
     */
60
    static const vcl::IconThemeInfo&
61
    FindIconThemeById(const std::vector<vcl::IconThemeInfo>& themes, const OUString& themeId);
62
63
    /** Check whether a theme with a specified id is in a vector of IconThemeInfo */
64
    static bool IconThemeIsInVector(const std::vector<vcl::IconThemeInfo>& themes,
65
                                    const OUString& themeId);
66
67
private:
68
    /** private constructor for testing purposes only */
69
    IconThemeInfo();
70
71
    /** Determine the icon theme name from the filename
72
     * If the name has an underscore, the name is taken from the first underscore to the last dot,
73
     * e.g., images_oxygen.zip becomes oxygen
74
     * If the name does not have an underscore in it, the whole name until the last dot is returned,
75
     * e.g. default.zip becomes default
76
     */
77
    static OUString FileNameToThemeId(std::u16string_view);
78
79
    /** Creates the display name for the given id of a file.
80
     * Currently, we only uppercase the id.
81
     */
82
    static OUString ThemeIdToDisplayName(const OUString&);
83
84
    /** The name which is presented to the user */
85
    OUString mDisplayName;
86
    /** The theme id. This id is used in ... to determine the file name */
87
    OUString mThemeId;
88
    /** The url to the icon theme package */
89
    OUString mUrlToFile;
90
91
    friend class ::IconThemeInfoTest;
92
    friend class ::IconThemeScannerTest;
93
    friend class ::IconThemeSelectorTest;
94
};
95
96
} // namespace vcl
97
98
#endif // INCLUDED_VCL_ICONTHEMEINFO_HXX