File indexing completed on 2024-05-19 05:38:25
0001 /* 0002 SPDX-FileCopyrightText: 2023 Ismael Asensio <isma.af@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <KQuickManagedConfigModule> 0010 0011 #include "soundthemesettings.h" 0012 0013 class SoundThemeData; 0014 struct ca_context; 0015 0016 class ThemeInfo : public QObject 0017 { 0018 Q_OBJECT 0019 QML_ANONYMOUS 0020 0021 Q_PROPERTY(QString id MEMBER id CONSTANT) 0022 Q_PROPERTY(QString name MEMBER name CONSTANT) 0023 Q_PROPERTY(QString comment MEMBER comment CONSTANT) 0024 Q_PROPERTY(QStringList inherits MEMBER inherits CONSTANT) 0025 Q_PROPERTY(QStringList directories MEMBER directories CONSTANT) 0026 Q_PROPERTY(bool hidden MEMBER isHidden CONSTANT) 0027 Q_PROPERTY(QString example MEMBER example CONSTANT) 0028 0029 public: 0030 explicit ThemeInfo(const QString &themeId, QObject *parent = nullptr); 0031 0032 public: 0033 // Properties provided by index.theme 0034 QString id; 0035 QString name; 0036 QString comment; 0037 QStringList inherits; 0038 QStringList directories; 0039 bool isHidden; 0040 QString example; 0041 // Validation 0042 bool isValid = false; 0043 }; 0044 0045 class KCMSoundTheme : public KQuickManagedConfigModule 0046 { 0047 Q_OBJECT 0048 0049 Q_PROPERTY(SoundThemeSettings *settings READ settings CONSTANT); 0050 Q_PROPERTY(QList<ThemeInfo *> themes MEMBER m_themes NOTIFY themesLoaded); 0051 Q_PROPERTY(int currentIndex READ currentIndex NOTIFY themeChanged); 0052 Q_PROPERTY(QString playingTheme MEMBER m_playingTheme NOTIFY playingChanged); 0053 Q_PROPERTY(QString playingSound MEMBER m_playingSound NOTIFY playingChanged); 0054 0055 public: 0056 KCMSoundTheme(QObject *parent, const KPluginMetaData &data); 0057 ~KCMSoundTheme() override; 0058 0059 SoundThemeSettings *settings() const; 0060 int currentIndex() const; 0061 0062 Q_INVOKABLE int indexOf(const QString &themeId) const; 0063 Q_INVOKABLE QString nameFor(const QString &themeId) const; 0064 0065 Q_INVOKABLE int playSound(const QString &themeId, const QStringList &soundList); 0066 Q_SLOT void cancelSound(); 0067 0068 Q_INVOKABLE static QString errorString(int errorCode); 0069 0070 virtual void load() override; 0071 0072 Q_SIGNALS: 0073 void themesLoaded(); 0074 void themeChanged(); 0075 void playingChanged(); 0076 0077 private: 0078 ca_context *canberraContext(); 0079 static void ca_finish_callback(ca_context *c, uint32_t id, int error_code, void *userdata); 0080 Q_SLOT void onPlayingFinished(); 0081 0082 void loadThemes(); 0083 0084 private: 0085 ca_context *m_canberraContext = nullptr; 0086 SoundThemeData *m_data = nullptr; 0087 0088 QList<ThemeInfo *> m_themes; 0089 QString m_playingTheme; 0090 QString m_playingSound; 0091 };