Implemented battery, power profile and brightness all in one menu

This commit is contained in:
Jas-SinghFSU
2024-07-01 23:26:45 -07:00
parent d1facf15aa
commit 63b5302fe0
13 changed files with 301 additions and 21 deletions

View File

@@ -0,0 +1,53 @@
import brightness from "../../../../services/Brightness.js";
import icons from "../../../icons/index.js";
const Brightness = () => {
return Widget.Box({
class_name: "menu-section-container brightness",
vertical: true,
children: [
Widget.Box({
class_name: "menu-label-container",
hpack: "fill",
child: Widget.Label({
class_name: "menu-label",
hexpand: true,
hpack: "start",
label: "Brightness",
}),
}),
Widget.Box({
class_name: "menu-items-section",
vpack: "fill",
vexpand: true,
vertical: true,
child: Widget.Box({
class_name: "brightness-container",
children: [
Widget.Icon({
class_name: "brightness-slider-icon",
icon: icons.brightness.screen,
}),
Widget.Slider({
value: brightness.bind("screen_value"),
class_name: "menu-active-slider menu-slider brightness",
draw_value: false,
hexpand: true,
min: 0,
max: 1,
onChange: ({ value }) => (brightness.screen_value = value),
}),
Widget.Label({
class_name: "brightness-slider-label",
label: brightness
.bind("screen_value")
.as((b) => `${Math.floor(b * 100)}%`),
}),
],
}),
}),
],
});
};
export { Brightness };

View File

@@ -0,0 +1,25 @@
import DropdownMenu from "../DropdownMenu.js";
import { EnergyProfiles } from "./profiles/index.js";
import { Brightness } from "./brightness/index.js";
export default () => {
return DropdownMenu({
name: "energymenu",
transition: "crossfade",
child: Widget.Box({
class_name: "menu-items",
hpack: "fill",
hexpand: true,
child: Widget.Box({
vertical: true,
hpack: "fill",
hexpand: true,
class_name: "menu-items-container energy",
children: [
Brightness(),
EnergyProfiles(),
],
}),
}),
});
};

View File

@@ -0,0 +1,58 @@
const powerProfiles = await Service.import("powerprofiles");
import icons from "../../../icons/index.js";
const EnergyProfiles = () => {
return Widget.Box({
class_name: "menu-section-container",
vertical: true,
children: [
Widget.Box({
class_name: "menu-label-container",
hpack: "fill",
child: Widget.Label({
class_name: "menu-label",
hexpand: true,
hpack: "start",
label: "Power Profile",
}),
}),
Widget.Box({
class_name: "menu-items-section",
vpack: "fill",
vexpand: true,
vertical: true,
children: powerProfiles.bind("profiles").as((profiles) => {
return profiles.map((prof) => {
const ProfileLabels = {
"power-saver": "Power Saver",
balanced: "Balanced",
performance: "Performance",
};
return Widget.Button({
on_primary_click: () => {
powerProfiles.active_profile = prof.Profile;
},
class_name: powerProfiles.bind("active_profile").as((active) => {
return `power-profile-item ${active === prof.Profile ? "active" : ""}`;
}),
child: Widget.Box({
children: [
Widget.Icon({
class_name: "power-profile-icon",
icon: icons.powerprofile[prof.Profile],
}),
Widget.Label({
class_name: "power-profile-label",
label: ProfileLabels[prof.Profile],
}),
],
}),
});
});
}),
}),
],
});
};
export { EnergyProfiles };

View File

@@ -6,5 +6,15 @@ import BluetoothMenu from "./bluetooth/index.js";
import MediaMenu from "./media/index.js";
import NotificationsMenu from "./notifications/index.js";
import CalendarMenu from "./calendar/index.js";
export default [PowerMenu(), Verification(), AudioMenu(), NetworkMenu(), BluetoothMenu(), MediaMenu(), NotificationsMenu(), CalendarMenu()];
import EnergyMenu from "./energy/index.js";
export default [
PowerMenu(),
Verification(),
AudioMenu(),
NetworkMenu(),
BluetoothMenu(),
MediaMenu(),
NotificationsMenu(),
CalendarMenu(),
EnergyMenu(),
];

View File

@@ -41,7 +41,7 @@ const Ethernet = () => {
hpack: "start",
truncate: "end",
wrap: true,
label: `Ethernet Connection ${typeof wired.speed === "number" ? `(${wired.speed / 1000} Gbps)` : ""}`,
label: `Ethernet Connection ${wired.state !== "unknown" && typeof wired?.speed === "number" ? `(${wired?.speed / 1000} Gbps)` : ""}`,
}),
Widget.Label({
hpack: "start",