Compare commits

..

No commits in common. "1cdec64535126087d103f1e6cde168dfe757a3f9" and "74267a7dc49d85f30c48af92f14affb1c8ed0cc1" have entirely different histories.

13 changed files with 87 additions and 221 deletions

View file

@ -3,10 +3,6 @@ pragma Singleton
import Quickshell
Singleton {
property string batteryFull: "\u{E059}"
property string batteryMedium: "\u{E05b}"
property string batteryLow: "\u{E05a}"
property string batteryWarning: "\u{E3b0}"
property string bell: "\u{E05d}"
property string bellRing: "\u{E224}"
property string bluetooth: "\u{E060}"

View file

@ -1,6 +1,5 @@
import qs.config
import QtQuick
import QtQuick.Layouts
import Quickshell
import "components"
import "components/bluetooth"
@ -40,7 +39,7 @@ Scope {
}
}
RowLayout {
Row {
id: leftbar
anchors.left: parent.left
@ -53,15 +52,20 @@ Scope {
spacing: Dimensions.bar.spacing
SystemLogo {
anchors.verticalCenter: parent.verticalCenter
implicitSize: 22
}
Workspaces {}
Tray {}
Workspaces {
anchors.verticalCenter: parent.verticalCenter
}
RowLayout {
Tray {
anchors.verticalCenter: parent.verticalCenter
}
}
Row {
id: centerbar
anchors.horizontalCenter: parent.horizontalCenter
@ -72,10 +76,12 @@ Scope {
spacing: Dimensions.bar.spacing
Mpris {}
Mpris {
anchors.verticalCenter: parent.verticalCenter
}
}
RowLayout {
Row {
id: rightbar
anchors.right: parent.right
@ -87,27 +93,49 @@ Scope {
spacing: Dimensions.bar.spacing
Pywal {}
Pywal {
anchors.verticalCenter: parent.verticalCenter
}
Pipewire {}
Pipewire {
anchors.verticalCenter: parent.verticalCenter
}
Caffeine {}
Caffeine {
anchors.verticalCenter: parent.verticalCenter
}
Network {}
Network {
anchors.verticalCenter: parent.verticalCenter
}
Bluetooth {}
Bluetooth {
anchors.verticalCenter: parent.verticalCenter
}
Storage {}
Storage {
anchors.verticalCenter: parent.verticalCenter
}
Memory {}
Memory {
anchors.verticalCenter: parent.verticalCenter
}
Cpu {}
Cpu {
anchors.verticalCenter: parent.verticalCenter
}
Gpu {}
Gpu {
anchors.verticalCenter: parent.verticalCenter
}
Clock {}
Clock {
anchors.verticalCenter: parent.verticalCenter
}
Notifications {}
Notifications {
anchors.verticalCenter: parent.verticalCenter
}
}
}
}

View file

@ -1,8 +1,9 @@
pragma ComponentBehavior: Bound
import qs.config
import qs.constants
import qs.services
import qs.widgets
import qs.styled
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
@ -28,7 +29,6 @@ StyledPopupWindow {
}
Switch {
Layout.alignment: Qt.AlignRight
checked: Bluetooth.defaultAdapter.enabled
onClicked: Bluetooth.defaultAdapter.enabled = checked
}
@ -43,18 +43,12 @@ StyledPopupWindow {
spacing: 8
StyledText {
Layout.minimumWidth: 320
font.bold: true
text: "Connected Devices"
}
ColumnLayout {
Repeater {
model: Bluetooth.connectedDevices
delegate: ConnectedDevice {
Layout.fillWidth: true
}
}
DeviceList {
devices: Bluetooth.connectedDevices
}
StyledText {
@ -62,13 +56,8 @@ StyledPopupWindow {
text: "Paired Devices"
}
ColumnLayout {
Repeater {
model: Bluetooth.pairedDevices
delegate: PairedDevice {
Layout.fillWidth: true
}
}
DeviceList {
devices: Bluetooth.pairedDevices
}
StyledText {
@ -78,9 +67,6 @@ StyledPopupWindow {
DeviceList {
devices: Bluetooth.availableDevices
onDeviceActivated: device => {
device.pair();
}
}
}
}

View file

@ -1,94 +0,0 @@
pragma ComponentBehavior: Bound
import qs.config
import qs.constants
import qs.widgets
import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Bluetooth
import Quickshell.Widgets
StyledLabel {
id: device
required property BluetoothDevice modelData
RowLayout {
id: row
spacing: 8
Loader {
active: modelData.icon != undefined
sourceComponent: IconImage {
implicitSize: 18
source: Quickshell.iconPath(modelData.icon)
}
}
StyledText {
text: device.modelData.deviceName
}
Loader {
active: device.modelData.batteryAvailable
sourceComponent: RowLayout {
StyledText {
id: icon
font.family: Theme.lucide.font.family
font.pixelSize: Dimensions.cpu.iconSize
font.bold: true
text: Icons.batteryFull
states: [
State {
name: "full"
when: device.modelData.battery > 0.66
},
State {
name: "medium"
when: device.modelData.battery > 0.33
PropertyChanges {
icon {
text: Icons.batteryFull
}
}
},
State {
name: "low"
when: device.modelData.battery > 0.10
PropertyChanges {
icon {
text: Icons.batteryFull
}
}
},
State {
name: "critical"
when: device.modelData.battery > 0.10
PropertyChanges {
icon {
text: Icons.batteryWarning
color: Theme.palette.error
}
}
}
]
}
}
}
StyledButton {
Layout.alignment: Qt.AlignRight
color: containsMouse ? Theme.palette.error : Theme.palette.base200
content: StyledText {
text: 'Disconnect'
}
onClicked: {
if (modelData.state != BluetoothDeviceState.Connected) {
return;
}
modelData.disconnect();
}
}
}
}

View file

@ -1,18 +1,16 @@
pragma ComponentBehavior: Bound
import qs.config
import qs.constants
import qs.services
import qs.styled
import QtQuick
import QtQuick.Layouts
import Quickshell.Bluetooth
ColumnLayout {
id: root
required property var devices
signal deviceActivated(device: BluetoothDevice)
Repeater {
model: root.devices
model: devices
delegate: Clickable {
id: device
required property var modelData
@ -20,9 +18,6 @@ ColumnLayout {
implicitWidth: row.width
implicitHeight: row.height
Layout.fillWidth: true
onClicked: {
root.deviceActivated(modelData);
}
RowLayout {
id: row

View file

@ -1,64 +0,0 @@
pragma ComponentBehavior: Bound
import qs.config
import qs.constants
import qs.widgets
import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Bluetooth
import Quickshell.Widgets
StyledLabel {
id: device
required property BluetoothDevice modelData
RowLayout {
id: row
spacing: 8
Loader {
active: modelData.icon != undefined
sourceComponent: IconImage {
implicitSize: 18
source: Quickshell.iconPath(device.modelData.icon)
}
}
StyledText {
text: device.modelData.deviceName
}
RowLayout {
Layout.alignment: Qt.AlignRight
StyledButton {
hoverEnabled: device.modelData.state == BluetoothDeviceState.Disconnected
color: containsMouse ? Theme.palette.info : Theme.palette.base200
content: StyledText {
text: 'Connect'
}
onClicked: {
if (!hoverEnabled) {
return;
}
device.modelData.connect();
}
}
StyledButton {
hoverEnabled: device.modelData.state == BluetoothDeviceState.Disconnected
color: containsMouse ? Theme.palette.error : Theme.palette.base200
content: StyledText {
text: 'Unpair'
}
onClicked: {
if (!hoverEnabled) {
return;
}
device.modelData.forget();
}
}
}
}
}

View file

@ -8,6 +8,8 @@ Item {
property int currentIndex: 0
property var players: Mpris.players
anchors.horizontalCenter: parent.horizontalCenter
Repeater {
id: players
model: Mpris.players.values.filter(item => item != null)

View file

@ -1,16 +1,16 @@
pragma ComponentBehavior: Bound
import qs.config
import qs.widgets
import QtQuick
import QtQuick.Layouts
import Quickshell
import "../../../../../config/"
import "../../../../../styled/"
StyledPopupWindow {
id: window
backgroundColor: Theme.palette.base300
margins: 14
margins: 8
radius: 8
property QsMenuOpener menuOpener
@ -25,7 +25,7 @@ StyledPopupWindow {
active: true
Layout.fillWidth: true
Layout.minimumWidth: 160
Layout.minimumWidth: 120
sourceComponent: modelData.isSeparator ? menuSeperator : menuItem
property Component menuSeperator: Rectangle {

View file

@ -1,12 +1,28 @@
import qs.widgets
import Quickshell
import "../../../../../config/"
import "../../../../../styled/"
StyledButton {
id: root
Clickable {
id: item
property QsMenuEntry menuEntry
implicitWidth: text.width
implicitHeight: 30
onClicked: menuEntry.triggered()
content: StyledText {
font.pixelSize: 14
text: root.menuEntry.text
StyledText {
id: text
opacity: item.opacity
font.pixelSize: Dimensions.clock.fontSize
anchors.verticalCenter: parent.verticalCenter
topPadding: Dimensions.clock.verticalPadding
bottomPadding: Dimensions.clock.verticalPadding
leftPadding: Dimensions.clock.horizontalPadding
rightPadding: Dimensions.clock.horizontalPadding
text: item.menuEntry.text
}
}

View file

@ -8,7 +8,7 @@ Singleton {
property BluetoothAdapter defaultAdapter: Bluetooth.defaultAdapter
property list<BluetoothDevice> connectedDevices: defaultAdapter.devices.values.filter(device => device.connected)
property list<BluetoothDevice> pairedDevices: defaultAdapter.devices.values.filter(device => device.paired && !device.connected)
property list<BluetoothDevice> pairedDevices: defaultAdapter.devices.values.filter(device => device.paired)
property list<BluetoothDevice> availableDevices: defaultAdapter.devices.values.filter(device => !device.paired)
function isConnected(BluetoothDevice: device) {

View file

@ -60,7 +60,7 @@ PopupWindow {
Loader {
active: root.visible
sourceComponent: root.content
sourceComponent: content
}
}
}

View file

@ -26,7 +26,7 @@ WrapperMouseArea {
}
Loader {
active: true
sourceComponent: root.content
sourceComponent: content
}
}
}

View file

@ -4,6 +4,7 @@ import Quickshell.Widgets
WrapperRectangle {
id: root
required property Component content
margin: 8
radius: 8
color: Theme.palette.base100