mirror of
https://github.com/kittywitch/nixfiles.git
synced 2026-02-09 04:19:19 -08:00
feat: battery, refactor
This commit is contained in:
parent
9ae22c832f
commit
1ba98534eb
15 changed files with 122 additions and 6 deletions
96
quickshell/Components/Battery.qml
Normal file
96
quickshell/Components/Battery.qml
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import Quickshell
|
||||
import Quickshell.Widgets
|
||||
import Quickshell.Services.UPower
|
||||
import "root:/DataSources"
|
||||
|
||||
Loader {
|
||||
property UPowerDevice mainBat: UPower.displayDevice
|
||||
active: mainBat.isLaptopBattery
|
||||
sourceComponent: batIcon
|
||||
|
||||
function findClosestIndex(percent) {
|
||||
return Math.round(percent/10)
|
||||
}
|
||||
|
||||
property list<string> percentIcons: [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
]
|
||||
|
||||
property string chargingIcon: ""
|
||||
|
||||
function getIcon(percent) {
|
||||
if (mainBat.timeToEmpty == 0) {
|
||||
return chargingIcon
|
||||
} else {
|
||||
var percentIcon = percentIcons[findClosestIndex(percent)];
|
||||
return percentIcon
|
||||
}
|
||||
}
|
||||
|
||||
function getTimeLeft(allSeconds, filling) {
|
||||
const hours = Math.floor(allSeconds / 3600)
|
||||
const minutes = Math.floor((allSeconds % 3600) / 60)
|
||||
const seconds = Math.floor((allSeconds % 3600) / 60) / 60
|
||||
const fillString = filling ? "full" : "empty"
|
||||
|
||||
return `${hours}h${minutes}m${seconds}s remain until ${fillString}`
|
||||
}
|
||||
|
||||
function getTimeLeftT() {
|
||||
if (mainBat.timeToEmpty == 0) {
|
||||
return getTimeLeft(mainBat.timeToEmpty, false)
|
||||
} else if (mainBat.timeToFull == 0) {
|
||||
return getTimeLeft(mainBat.timeToFull, true)
|
||||
}
|
||||
}
|
||||
|
||||
function changeRate() {
|
||||
return `${Math.round(mainBat.changeRate)}W`
|
||||
}
|
||||
|
||||
function energyLeft() {
|
||||
return `${Math.round(mainBat.energy)}Wh`
|
||||
}
|
||||
|
||||
function getTooltip() {
|
||||
return `${getTimeLeftT()}, ${energyLeft()}, ${changeRate()}`
|
||||
}
|
||||
|
||||
Component {
|
||||
id: batIcon
|
||||
Item {
|
||||
MarginWrapperManager { margin: 10 }
|
||||
Text {
|
||||
color: Stylix.base05
|
||||
text: `${getIcon(mainBat.percentage)} ${Math.round(mainBat.percentage)} %`
|
||||
|
||||
ToolTip {
|
||||
id: dismissTooltip
|
||||
visible: false
|
||||
delay: 500
|
||||
timeout: 1000
|
||||
text: getTooltip()
|
||||
}
|
||||
|
||||
HoverHandler {
|
||||
id: dismissHover
|
||||
onHoveredChanged: {
|
||||
dismissTooltip.visible = hovered
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -33,16 +33,15 @@ Item {
|
|||
property real clicky
|
||||
id: wrapperPopup
|
||||
anchor.window: root.QsWindow.window
|
||||
anchor.rect.y: parentWindow.height
|
||||
anchor.rect.y: parentWindow?.height ?? 0
|
||||
anchor.rect.x: clicky
|
||||
implicitWidth: systray.width + 10
|
||||
implicitHeight: systray.height + 10
|
||||
implicitHeight: systray?.height + 10
|
||||
color: "transparent"
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: Stylix.base01
|
||||
bottomLeftRadius: 5
|
||||
bottomRightRadius: 5
|
||||
radius: 5
|
||||
SystemTray {
|
||||
id: systray
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue