mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-05 23:09:26 -05:00
296 lines
9.5 KiB
QML
296 lines
9.5 KiB
QML
import qs
|
|
import qs.services
|
|
import qs.modules.common
|
|
import qs.modules.common.widgets
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import Quickshell.Bluetooth
|
|
import Quickshell.Hyprland
|
|
|
|
import qs.modules.sidebarRight.quickToggles
|
|
import qs.modules.sidebarRight.quickToggles.classicStyle
|
|
import qs.modules.sidebarRight.wifiNetworks
|
|
import qs.modules.sidebarRight.bluetoothDevices
|
|
import qs.modules.sidebarRight.volumeMixer
|
|
|
|
Item {
|
|
id: root
|
|
property int sidebarWidth: Appearance.sizes.sidebarWidth
|
|
property int sidebarPadding: 10
|
|
property string settingsQmlPath: Quickshell.shellPath("settings.qml")
|
|
property bool showWifiDialog: false
|
|
property bool showBluetoothDialog: false
|
|
property bool showAudioOutputDialog: false
|
|
property bool showAudioInputDialog: false
|
|
property bool editMode: false
|
|
|
|
Connections {
|
|
target: GlobalStates
|
|
function onSidebarRightOpenChanged() {
|
|
if (!GlobalStates.sidebarRightOpen) {
|
|
root.showWifiDialog = false;
|
|
root.showBluetoothDialog = false;
|
|
root.showAudioOutputDialog = false;
|
|
root.showAudioInputDialog = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
implicitHeight: sidebarRightBackground.implicitHeight
|
|
implicitWidth: sidebarRightBackground.implicitWidth
|
|
|
|
StyledRectangularShadow {
|
|
target: sidebarRightBackground
|
|
}
|
|
Rectangle {
|
|
id: sidebarRightBackground
|
|
|
|
anchors.fill: parent
|
|
implicitHeight: parent.height - Appearance.sizes.hyprlandGapsOut * 2
|
|
implicitWidth: sidebarWidth - Appearance.sizes.hyprlandGapsOut * 2
|
|
color: Appearance.colors.colLayer0
|
|
border.width: 1
|
|
border.color: Appearance.colors.colLayer0Border
|
|
radius: Appearance.rounding.screenRounding - Appearance.sizes.hyprlandGapsOut + 1
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
anchors.margins: sidebarPadding
|
|
spacing: sidebarPadding
|
|
|
|
SystemButtonRow {
|
|
Layout.fillHeight: false
|
|
Layout.fillWidth: true
|
|
// Layout.margins: 10
|
|
Layout.topMargin: 5
|
|
Layout.bottomMargin: 0
|
|
}
|
|
|
|
Loader {
|
|
id: slidersLoader
|
|
Layout.fillWidth: true
|
|
visible: active
|
|
active: {
|
|
const configQuickSliders = Config.options.sidebar.quickSliders
|
|
if (!configQuickSliders.enable) return false
|
|
if (!configQuickSliders.showMic && !configQuickSliders.showVolume && !configQuickSliders.showBrightness) return false;
|
|
return true;
|
|
}
|
|
sourceComponent: QuickSliders {}
|
|
}
|
|
|
|
LoaderedQuickPanelImplementation {
|
|
styleName: "classic"
|
|
sourceComponent: ClassicQuickPanel {}
|
|
}
|
|
|
|
LoaderedQuickPanelImplementation {
|
|
styleName: "android"
|
|
sourceComponent: AndroidQuickPanel {
|
|
editMode: root.editMode
|
|
}
|
|
}
|
|
|
|
CenterWidgetGroup {
|
|
Layout.alignment: Qt.AlignHCenter
|
|
Layout.fillHeight: true
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
BottomWidgetGroup {
|
|
Layout.alignment: Qt.AlignHCenter
|
|
Layout.fillHeight: false
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: implicitHeight
|
|
}
|
|
}
|
|
}
|
|
|
|
ToggleDialog {
|
|
id: wifiDialogLoader
|
|
shownPropertyString: "showWifiDialog"
|
|
dialog: WifiDialog {}
|
|
onShownChanged: {
|
|
if (!shown) return;
|
|
Network.enableWifi();
|
|
Network.rescanWifi();
|
|
}
|
|
}
|
|
|
|
ToggleDialog {
|
|
id: bluetoothDialogLoader
|
|
shownPropertyString: "showBluetoothDialog"
|
|
dialog: BluetoothDialog {}
|
|
onShownChanged: {
|
|
if (!shown) {
|
|
Bluetooth.defaultAdapter.discovering = false;
|
|
} else {
|
|
Bluetooth.defaultAdapter.enabled = true;
|
|
Bluetooth.defaultAdapter.discovering = true;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
ToggleDialog {
|
|
id: audioOutputDialogLoader
|
|
shownPropertyString: "showAudioOutputDialog"
|
|
dialog: VolumeDialog {
|
|
isSink: true
|
|
}
|
|
}
|
|
|
|
ToggleDialog {
|
|
id: audioInputDialogLoader
|
|
shownPropertyString: "showAudioInputDialog"
|
|
dialog: VolumeDialog {
|
|
isSink: false
|
|
}
|
|
}
|
|
|
|
component ToggleDialog: Loader {
|
|
id: toggleDialogLoader
|
|
required property string shownPropertyString
|
|
property alias dialog: toggleDialogLoader.sourceComponent
|
|
readonly property bool shown: root[shownPropertyString]
|
|
anchors.fill: parent
|
|
|
|
onShownChanged: if (shown) toggleDialogLoader.active = true;
|
|
active: shown
|
|
onActiveChanged: {
|
|
if (active) {
|
|
item.show = true;
|
|
item.forceActiveFocus();
|
|
}
|
|
}
|
|
Connections {
|
|
target: toggleDialogLoader.item
|
|
function onDismiss() {
|
|
toggleDialogLoader.item.show = false
|
|
root[toggleDialogLoader.shownPropertyString] = false;
|
|
}
|
|
function onVisibleChanged() {
|
|
if (!toggleDialogLoader.item.visible && !root[toggleDialogLoader.shownPropertyString]) toggleDialogLoader.active = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
component LoaderedQuickPanelImplementation: Loader {
|
|
id: quickPanelImplLoader
|
|
required property string styleName
|
|
Layout.alignment: item?.Layout.alignment ?? Qt.AlignHCenter
|
|
Layout.fillWidth: item?.Layout.fillWidth ?? false
|
|
visible: active
|
|
active: Config.options.sidebar.quickToggles.style === styleName
|
|
Connections {
|
|
target: quickPanelImplLoader.item
|
|
function onOpenWifiDialog() {
|
|
root.showWifiDialog = true;
|
|
}
|
|
function onOpenBluetoothDialog() {
|
|
root.showBluetoothDialog = true;
|
|
}
|
|
function onOpenAudioOutputDialog() {
|
|
root.showAudioOutputDialog = true;
|
|
}
|
|
function onOpenAudioInputDialog() {
|
|
root.showAudioInputDialog = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
component SystemButtonRow: Item {
|
|
implicitHeight: Math.max(uptimeContainer.implicitHeight, systemButtonsRow.implicitHeight)
|
|
|
|
Rectangle {
|
|
id: uptimeContainer
|
|
anchors {
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
left: parent.left
|
|
}
|
|
color: Appearance.colors.colLayer1
|
|
radius: height / 2
|
|
implicitWidth: uptimeRow.implicitWidth + 24
|
|
implicitHeight: uptimeRow.implicitHeight + 8
|
|
|
|
Row {
|
|
id: uptimeRow
|
|
anchors.centerIn: parent
|
|
spacing: 8
|
|
CustomIcon {
|
|
id: distroIcon
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
width: 25
|
|
height: 25
|
|
source: SystemInfo.distroIcon
|
|
colorize: true
|
|
color: Appearance.colors.colOnLayer0
|
|
}
|
|
StyledText {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
font.pixelSize: Appearance.font.pixelSize.normal
|
|
color: Appearance.colors.colOnLayer0
|
|
text: Translation.tr("Up %1").arg(DateTime.uptime)
|
|
textFormat: Text.MarkdownText
|
|
}
|
|
}
|
|
}
|
|
|
|
ButtonGroup {
|
|
id: systemButtonsRow
|
|
anchors {
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
right: parent.right
|
|
}
|
|
color: Appearance.colors.colLayer1
|
|
padding: 4
|
|
|
|
QuickToggleButton {
|
|
toggled: root.editMode
|
|
visible: Config.options.sidebar.quickToggles.style === "android"
|
|
buttonIcon: "edit"
|
|
onClicked: root.editMode = !root.editMode
|
|
StyledToolTip {
|
|
text: Translation.tr("Edit quick toggles") + (root.editMode ? Translation.tr("\nLMB to enable/disable\nRMB to toggle size\nScroll to swap position") : "")
|
|
}
|
|
}
|
|
QuickToggleButton {
|
|
toggled: false
|
|
buttonIcon: "restart_alt"
|
|
onClicked: {
|
|
Hyprland.dispatch("reload");
|
|
Quickshell.reload(true);
|
|
}
|
|
StyledToolTip {
|
|
text: Translation.tr("Reload Hyprland & Quickshell")
|
|
}
|
|
}
|
|
QuickToggleButton {
|
|
toggled: false
|
|
buttonIcon: "settings"
|
|
onClicked: {
|
|
GlobalStates.sidebarRightOpen = false;
|
|
Quickshell.execDetached(["qs", "-p", root.settingsQmlPath]);
|
|
}
|
|
StyledToolTip {
|
|
text: Translation.tr("Settings")
|
|
}
|
|
}
|
|
QuickToggleButton {
|
|
toggled: false
|
|
buttonIcon: "power_settings_new"
|
|
onClicked: {
|
|
GlobalStates.sessionOpen = true;
|
|
}
|
|
StyledToolTip {
|
|
text: Translation.tr("Session")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|