Provide an interface to battery percentage

pull/7/head
reionwong 4 years ago
parent 6abf4d7149
commit 1698ca721f

@ -91,7 +91,12 @@ qt_add_dbus_adaptor(appmenu_SRCS src/appmenu/com.canonical.AppMenu.Registrar.xml
qt_add_dbus_adaptor(appmenu_SRCS src/appmenu/org.cutefish.cappmenu.xml
src/appmenu/appmenudbus.h AppmenuDBus appmenuadaptor AppmenuAdaptor)
add_executable(cutefish-statusbar ${SRCS} ${appmenu_SRCS})
## statusbar dbus
qt5_add_dbus_adaptor(DBUS_SOURCES
src/org.cutefish.Statusbar.xml
src/statusbar.h StatusBar)
add_executable(cutefish-statusbar ${SRCS} ${appmenu_SRCS} ${DBUS_SOURCES})
target_include_directories(cutefish-statusbar PUBLIC ${XCB_LIBS_INCLUDE_DIRS})
target_link_libraries(cutefish-statusbar

@ -361,10 +361,6 @@ Item {
id: volume
}
Battery {
id: battery
}
NM.ActiveConnection {
id: activeConnection
}

@ -18,11 +18,22 @@
*/
#include "battery.h"
#include <QSettings>
static const QString s_sServer = "org.cutefish.Settings";
static const QString s_sPath = "/PrimaryBattery";
static const QString s_sInterface = "org.cutefish.PrimaryBattery";
static Battery *SELF = nullptr;
Battery *Battery::self()
{
if (!SELF)
SELF = new Battery;
return SELF;
}
Battery::Battery(QObject *parent)
: QObject(parent)
, m_upowerInterface("org.freedesktop.UPower",
@ -35,10 +46,15 @@ Battery::Battery(QObject *parent)
QDBusConnection::sessionBus())
, m_available(false)
, m_onBattery(false)
, m_showPercentage(false)
{
m_available = m_interface.isValid() && !m_interface.lastError().isValid();
if (m_available) {
QSettings settings("cutefishos", "statusbar");
settings.setDefaultFormat(QSettings::IniFormat);
m_showPercentage = settings.value("BatteryPercentage", true).toBool();
QDBusConnection::sessionBus().connect(s_sServer, s_sPath, s_sInterface, "chargeStateChanged", this, SLOT(chargeStateChanged(int)));
QDBusConnection::sessionBus().connect(s_sServer, s_sPath, s_sInterface, "chargePercentChanged", this, SLOT(chargePercentChanged(int)));
QDBusConnection::sessionBus().connect(s_sServer, s_sPath, s_sInterface, "lastChargedPercentChanged", this, SLOT(lastChargedPercentChanged()));
@ -76,8 +92,21 @@ bool Battery::onBattery() const
bool Battery::showPercentage() const
{
// TODO
return true;
return m_showPercentage;
}
void Battery::setShowPercentage(bool enabled)
{
if (enabled == m_showPercentage)
return;
m_showPercentage = enabled;
QSettings settings("cutefishos", "statusbar");
settings.setDefaultFormat(QSettings::IniFormat);
settings.setValue("BatteryPercentage", m_showPercentage);
emit showPercentageChanged();
}
int Battery::chargeState() const

@ -37,11 +37,14 @@ class Battery : public QObject
Q_PROPERTY(QString iconSource READ iconSource NOTIFY iconSourceChanged)
public:
static Battery *self();
explicit Battery(QObject *parent = nullptr);
bool available() const;
bool onBattery() const;
bool showPercentage() const;
void setShowPercentage(bool enabled);
int chargeState() const;
int chargePercent() const;
@ -70,6 +73,7 @@ private:
QDBusInterface m_interface;
bool m_available;
bool m_onBattery;
bool m_showPercentage;
};
#endif // BATTERY_H

@ -37,16 +37,6 @@ int main(int argc, char *argv[])
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
QString qmFilePath = QString("%1/%2.qm").arg("/usr/share/cutefish-statusbar/translations/").arg(QLocale::system().name());
if (QFile::exists(qmFilePath)) {
QTranslator *translator = new QTranslator(QApplication::instance());
if (translator->load(qmFilePath)) {
QGuiApplication::installTranslator(translator);
} else {
translator->deleteLater();
}
}
const char *uri = "Cutefish.StatusBar";
qmlRegisterType<SystemTrayModel>(uri, 1, 0, "SystemTrayModel");
qmlRegisterType<ControlCenterDialog>(uri, 1, 0, "ControlCenterDialog");
@ -59,5 +49,23 @@ int main(int argc, char *argv[])
StatusBar bar;
if (!QDBusConnection::sessionBus().registerService("org.cutefish.Statusbar")) {
return -1;
}
if (!QDBusConnection::sessionBus().registerObject("/Statusbar", &bar)) {
return -1;
}
QString qmFilePath = QString("%1/%2.qm").arg("/usr/share/cutefish-statusbar/translations/").arg(QLocale::system().name());
if (QFile::exists(qmFilePath)) {
QTranslator *translator = new QTranslator(QApplication::instance());
if (translator->load(qmFilePath)) {
QGuiApplication::installTranslator(translator);
} else {
translator->deleteLater();
}
}
return app.exec();
}

@ -0,0 +1,8 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.cutefish.Statusbar">
<method name="setBatteryPercentage">
<arg name="batteryPercentage" type="b" direction="in"/>
</method>
</interface>
</node>

@ -18,12 +18,15 @@
*/
#include "statusbar.h"
#include "battery.h"
#include "processprovider.h"
#include "appmenu/appmenu.h"
#include "statusbaradaptor.h"
#include <QQmlEngine>
#include <QQmlContext>
#include <QDBusConnection>
#include <QApplication>
#include <QScreen>
@ -42,10 +45,12 @@ StatusBar::StatusBar(QQuickView *parent)
KWindowSystem::setType(winId(), NET::Dock);
KWindowEffects::slideWindow(winId(), KWindowEffects::TopEdge);
new StatusbarAdaptor(this);
new AppMenu(this);
engine()->rootContext()->setContextProperty("acticity", m_acticity);
engine()->rootContext()->setContextProperty("process", new ProcessProvider);
engine()->rootContext()->setContextProperty("battery", Battery::self());
setSource(QUrl(QStringLiteral("qrc:/qml/main.qml")));
setResizeMode(QQuickView::SizeRootObjectToView);
@ -57,6 +62,11 @@ StatusBar::StatusBar(QQuickView *parent)
connect(qApp->primaryScreen(), &QScreen::geometryChanged, this, &StatusBar::updateGeometry);
}
void StatusBar::setBatteryPercentage(bool enabled)
{
Battery::self()->setShowPercentage(enabled);
}
void StatusBar::updateGeometry()
{
const QRect rect = qApp->primaryScreen()->geometry();

@ -30,6 +30,8 @@ class StatusBar : public QQuickView
public:
explicit StatusBar(QQuickView *parent = nullptr);
void setBatteryPercentage(bool enabled);
void updateGeometry();
void updateViewStruts();

Loading…
Cancel
Save