File indexing completed on 2024-05-12 05:37:20
0001 /* 0002 SPDX-FileCopyrightText: 2007 Aaron Seigo <aseigo@kde.org> 0003 SPDX-FileCopyrightText: 2007-2008 Sebastian Kuegler <sebas@kde.org> 0004 SPDX-FileCopyrightText: 2008 Dario Freddi <drf54321@gmail.com> 0005 0006 SPDX-License-Identifier: LGPL-2.0-only 0007 */ 0008 0009 #pragma once 0010 0011 #include <Plasma5Support/DataEngine> 0012 0013 #include <solid/battery.h> 0014 0015 #include <QDBusConnection> 0016 #include <QHash> 0017 #include <QPair> 0018 0019 class SessionManagement; 0020 0021 using InhibitionInfo = QPair<QString, QString>; 0022 0023 /** 0024 * This class provides runtime information about the battery and AC status 0025 * for use in power management Plasma applets. 0026 */ 0027 class PowermanagementEngine : public Plasma5Support::DataEngine 0028 { 0029 Q_OBJECT 0030 0031 public: 0032 PowermanagementEngine(QObject *parent); 0033 ~PowermanagementEngine() override; 0034 QStringList sources() const override; 0035 Plasma5Support::Service *serviceForSource(const QString &source) override; 0036 0037 protected: 0038 bool sourceRequestEvent(const QString &name) override; 0039 bool updateSourceEvent(const QString &source) override; 0040 void init(); 0041 0042 private Q_SLOTS: 0043 void updateBatteryChargeState(int newState, const QString &udi); 0044 void updateBatteryPresentState(bool newState, const QString &udi); 0045 void updateBatteryChargePercent(int newValue, const QString &udi); 0046 void updateBatteryEnergy(double newValue, const QString &udi); 0047 void updateBatteryPowerSupplyState(bool newState, const QString &udi); 0048 void updateAcPlugState(bool onBattery); 0049 void updateBatteryNames(); 0050 void updateOverallBattery(); 0051 0052 void deviceRemoved(const QString &udi); 0053 void deviceAdded(const QString &udi); 0054 void batteryRemainingTimeChanged(qulonglong time); 0055 void smoothedBatteryRemainingTimeChanged(qulonglong time); 0056 void screenBrightnessChanged(int brightness); 0057 void maximumScreenBrightnessChanged(int maximumBrightness); 0058 void keyboardBrightnessChanged(int brightness); 0059 void maximumKeyboardBrightnessChanged(int maximumBrightness); 0060 void triggersLidActionChanged(bool triggers); 0061 void hasInhibitionChanged(bool inhibited); 0062 void inhibitionsChanged(const QList<InhibitionInfo> &added, const QStringList &removed); 0063 void chargeStopThresholdChanged(int threshold); 0064 0065 void updatePowerProfileDaemonInstalled(const bool &installed); 0066 void updatePowerProfileCurrentProfile(const QString &profile); 0067 void updatePowerProfileChoices(const QStringList &choices); 0068 void updatePowerProfilePerformanceInhibitedReason(const QString &reason); 0069 void updatePowerProfilePerformanceDegradedReason(const QString &reason); 0070 void updatePowerProfileHolds(const QList<QVariantMap> &holds); 0071 0072 private: 0073 template<typename ReplyType> 0074 inline void createPowerManagementDBusMethodCallAndNotifyChanged(const QString &method, std::function<void(ReplyType)> &&callback); 0075 0076 template<typename ReplyType> 0077 inline void createPowerProfileDBusMethodCallAndNotifyChanged(const QString &method, std::function<void(ReplyType)> &&callback); 0078 0079 void populateApplicationData(const QString &name, QString *prettyName, QString *icon); 0080 QString batteryTypeToString(const Solid::Battery *battery) const; 0081 QStringList basicSourceNames() const; 0082 QString batteryStateToString(int newState) const; 0083 0084 QStringList m_sources; 0085 0086 QHash<QString, QString> m_batterySources; // <udi, Battery0> 0087 QHash<QString, QPair<QString, QString>> m_applicationInfo; // <appname, <pretty name, icon>> 0088 0089 SessionManagement *m_session; 0090 };