mumble-voip_mumble/src/mumble/ThemeInfo.h

90 lines
2.7 KiB
C++

// Copyright 2015-2023 The Mumble Developers. All rights reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file at the root of the
// Mumble source tree or at <https://www.mumble.info/LICENSE>.
#ifndef MUMBLE_MUMBLE_THEMEINFO_H_
#define MUMBLE_MUMBLE_THEMEINFO_H_
#include <QMetaType>
#include <QtCore/QFileInfo>
#include <QtCore/QMap>
#include <QtCore/QString>
#ifndef Q_MOC_RUN
# include <boost/optional.hpp>
#endif
class QSettings;
class QDir;
class ThemeInfo;
typedef QMap< QString, ThemeInfo > ThemeMap;
/// Description of a Mumble theme with multiple styles
class ThemeInfo {
public:
/// A specific style of a Mumble theme
///
/// Multiple styles can for example be used to differentiate light/dark
/// variants of a theme.
///
/// A single style can refer to multiple run-time platform specific qss
/// theme files.
class StyleInfo {
public:
/// Name of the theme containing this style
QString themeName;
/// Name for the style
QString name;
/// @return Returns platform specific qss or defaultQss if none available
QFileInfo getPlatformQss() const;
/// Default QSS file for the style
QFileInfo defaultQss;
/// Platform specific QSS files available
QMap< QString, QFileInfo > qssFiles;
};
typedef QMap< QString, StyleInfo > StylesMap;
/// Takes stock of all mumble themes in the given folders.
///
/// If a theme with the same name is available in multiple directories
/// only the last occurrence will be returned.
///
/// @param themesDirectories List of directories to search for theme directories.
/// @return Map of theme name to Theme
static ThemeMap scanDirectories(const QVector< QDir > &themesDirectories);
/// Takes stock of all mumble themes in the given folder
///
/// Uses loadThemeInfoFromDirectory on each directory in the folder
/// to find themes. Themes with the same names will override each other.
///
/// @param themesDirectory Directory to scan for theme directories
/// @return Map of theme name to Theme
static ThemeMap scanDirectory(const QDir &themesDirectory);
/// Loads the theme description from a given directory
///
/// @param themeDirectory
/// @return Theme if description was correctly loaded. boost::none if not.
static boost::optional< ThemeInfo > load(const QDir &themeDirectory);
/// @return Style with given name or default
StyleInfo getStyle(QString name_) const;
/// Ideally unique theme name. A theme with identical name can override.
QString name;
/// Style name to style mapping.
StylesMap styles;
/// Default style
QString defaultStyle;
};
Q_DECLARE_METATYPE(ThemeInfo)
Q_DECLARE_METATYPE(ThemeInfo::StyleInfo)
#endif // MUMBLE_MUMBLE_THEMEINFO_H_