formatter
This commit is contained in:
+170
-139
@@ -12,68 +12,65 @@ import qs.Daemons
|
||||
import qs.Helpers
|
||||
|
||||
Item {
|
||||
id: root
|
||||
id: root
|
||||
|
||||
implicitWidth: layout.implicitWidth + 5 * 2
|
||||
implicitHeight: layout.implicitHeight + 5 * 2
|
||||
|
||||
readonly property int topMargin: 0
|
||||
readonly property int rounding: 6
|
||||
readonly property int topMargin: 0
|
||||
required property var wrapper
|
||||
|
||||
required property var wrapper
|
||||
implicitHeight: layout.implicitHeight + 5 * 2
|
||||
implicitWidth: layout.implicitWidth + 5 * 2
|
||||
|
||||
ColumnLayout {
|
||||
id: layout
|
||||
ColumnLayout {
|
||||
id: layout
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.top: parent.top
|
||||
implicitWidth: stack.currentItem ? stack.currentItem.childrenRect.height : 0
|
||||
spacing: 12
|
||||
|
||||
RowLayout {
|
||||
id: tabBar
|
||||
spacing: 6
|
||||
Layout.fillWidth: true
|
||||
|
||||
property int tabHeight: 36
|
||||
|
||||
Layout.fillWidth: true
|
||||
spacing: 6
|
||||
|
||||
CustomClippingRect {
|
||||
radius: 6
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: tabBar.tabHeight
|
||||
|
||||
color: stack.currentIndex === 0 ? DynamicColors.palette.m3primary : DynamicColors.tPalette.m3surfaceContainer
|
||||
radius: 6
|
||||
|
||||
StateLayer {
|
||||
|
||||
function onClicked(): void {
|
||||
stack.currentIndex = 0;
|
||||
}
|
||||
|
||||
CustomText {
|
||||
text: qsTr("Volumes")
|
||||
anchors.centerIn: parent
|
||||
color: stack.currentIndex === 0 ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3primary
|
||||
text: qsTr("Volumes")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CustomClippingRect {
|
||||
radius: 6
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: tabBar.tabHeight
|
||||
|
||||
color: stack.currentIndex === 1 ? DynamicColors.palette.m3primary : DynamicColors.tPalette.m3surfaceContainer
|
||||
radius: 6
|
||||
|
||||
StateLayer {
|
||||
|
||||
function onClicked(): void {
|
||||
stack.currentIndex = 1;
|
||||
}
|
||||
|
||||
CustomText {
|
||||
text: qsTr("Devices")
|
||||
anchors.centerIn: parent
|
||||
color: stack.currentIndex === 1 ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3primary
|
||||
text: qsTr("Devices")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -81,175 +78,245 @@ Item {
|
||||
|
||||
StackLayout {
|
||||
id: stack
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: currentIndex === 0 ? vol.childrenRect.height : dev.childrenRect.height
|
||||
currentIndex: 0
|
||||
|
||||
VolumesTab { id: vol }
|
||||
DevicesTab { id: dev }
|
||||
|
||||
Behavior on currentIndex {
|
||||
SequentialAnimation {
|
||||
ParallelAnimation {
|
||||
Anim {
|
||||
target: stack
|
||||
property: "opacity"
|
||||
to: 0
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
property: "opacity"
|
||||
target: stack
|
||||
to: 0
|
||||
}
|
||||
|
||||
Anim {
|
||||
target: stack
|
||||
property: "scale"
|
||||
to: 0.9
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
property: "scale"
|
||||
target: stack
|
||||
to: 0.9
|
||||
}
|
||||
}
|
||||
|
||||
PropertyAction {}
|
||||
PropertyAction {
|
||||
}
|
||||
|
||||
ParallelAnimation {
|
||||
Anim {
|
||||
target: stack
|
||||
property: "opacity"
|
||||
to: 1
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
property: "opacity"
|
||||
target: stack
|
||||
to: 1
|
||||
}
|
||||
|
||||
Anim {
|
||||
target: stack
|
||||
property: "scale"
|
||||
to: 1
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
property: "scale"
|
||||
target: stack
|
||||
to: 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VolumesTab {
|
||||
id: vol
|
||||
|
||||
}
|
||||
|
||||
DevicesTab {
|
||||
id: dev
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
component DevicesTab: ColumnLayout {
|
||||
spacing: 12
|
||||
|
||||
ButtonGroup {
|
||||
id: sinks
|
||||
|
||||
}
|
||||
|
||||
ButtonGroup {
|
||||
id: sources
|
||||
|
||||
}
|
||||
|
||||
CustomText {
|
||||
font.weight: 500
|
||||
text: qsTr("Output device")
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: Audio.sinks
|
||||
|
||||
CustomRadioButton {
|
||||
required property PwNode modelData
|
||||
|
||||
ButtonGroup.group: sinks
|
||||
checked: Audio.sink?.id === modelData.id
|
||||
text: modelData.description
|
||||
|
||||
onClicked: Audio.setAudioSink(modelData)
|
||||
}
|
||||
}
|
||||
|
||||
CustomText {
|
||||
Layout.topMargin: 10
|
||||
font.weight: 500
|
||||
text: qsTr("Input device")
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: Audio.sources
|
||||
|
||||
CustomRadioButton {
|
||||
required property PwNode modelData
|
||||
|
||||
ButtonGroup.group: sources
|
||||
checked: Audio.source?.id === modelData.id
|
||||
text: modelData.description
|
||||
|
||||
onClicked: Audio.setAudioSource(modelData)
|
||||
}
|
||||
}
|
||||
}
|
||||
component VolumesTab: ColumnLayout {
|
||||
spacing: 12
|
||||
|
||||
CustomRect {
|
||||
Layout.topMargin: root.topMargin
|
||||
Layout.preferredHeight: 42 + Appearance.spacing.smaller * 2
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 42 + Appearance.spacing.smaller * 2
|
||||
Layout.topMargin: root.topMargin
|
||||
color: DynamicColors.tPalette.m3surfaceContainer
|
||||
|
||||
radius: root.rounding
|
||||
|
||||
RowLayout {
|
||||
id: outputVolume
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: Appearance.spacing.smaller
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 15
|
||||
|
||||
CustomRect {
|
||||
Layout.preferredWidth: 40
|
||||
Layout.preferredHeight: 40
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredHeight: 40
|
||||
Layout.preferredWidth: 40
|
||||
color: DynamicColors.palette.m3primary
|
||||
radius: 1000
|
||||
|
||||
MaterialIcon {
|
||||
anchors.centerIn: parent
|
||||
color: DynamicColors.palette.m3onPrimary
|
||||
text: "speaker"
|
||||
font.pointSize: 22
|
||||
text: "speaker"
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
CustomText {
|
||||
text: "Output Volume"
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
text: "Output Volume"
|
||||
}
|
||||
|
||||
CustomText {
|
||||
text: qsTr("%1").arg(Audio.muted ? qsTr("Muted") : `${Math.round(Audio.volume * 100)}%`);
|
||||
font.bold: true
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
|
||||
font.bold: true
|
||||
text: qsTr("%1").arg(Audio.muted ? qsTr("Muted") : `${Math.round(Audio.volume * 100)}%`)
|
||||
}
|
||||
}
|
||||
|
||||
CustomMouseArea {
|
||||
Layout.bottomMargin: 5
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 10
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
CustomSlider {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
implicitHeight: 10
|
||||
value: Audio.volume
|
||||
onMoved: Audio.setVolume(value)
|
||||
|
||||
Behavior on value { Anim {} }
|
||||
Behavior on value {
|
||||
Anim {
|
||||
}
|
||||
}
|
||||
|
||||
onMoved: Audio.setVolume(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CustomRect {
|
||||
Layout.topMargin: root.topMargin
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 42 + Appearance.spacing.smaller * 2
|
||||
Layout.topMargin: root.topMargin
|
||||
color: DynamicColors.tPalette.m3surfaceContainer
|
||||
|
||||
radius: root.rounding
|
||||
|
||||
RowLayout {
|
||||
id: inputVolume
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: Appearance.spacing.smaller
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 15
|
||||
|
||||
Rectangle {
|
||||
Layout.preferredWidth: 40
|
||||
Layout.preferredHeight: 40
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredHeight: 40
|
||||
Layout.preferredWidth: 40
|
||||
color: DynamicColors.palette.m3primary
|
||||
radius: 1000
|
||||
|
||||
MaterialIcon {
|
||||
anchors.centerIn: parent
|
||||
anchors.alignWhenCentered: false
|
||||
anchors.centerIn: parent
|
||||
color: DynamicColors.palette.m3onPrimary
|
||||
text: "mic"
|
||||
font.pointSize: 22
|
||||
text: "mic"
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
CustomText {
|
||||
text: "Input Volume"
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
text: "Input Volume"
|
||||
}
|
||||
|
||||
CustomText {
|
||||
text: qsTr("%1").arg(Audio.sourceMuted ? qsTr("Muted") : `${Math.round(Audio.sourceVolume * 100)}%`);
|
||||
font.bold: true
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
|
||||
font.bold: true
|
||||
text: qsTr("%1").arg(Audio.sourceMuted ? qsTr("Muted") : `${Math.round(Audio.sourceVolume * 100)}%`)
|
||||
}
|
||||
}
|
||||
|
||||
CustomMouseArea {
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
Layout.fillWidth: true
|
||||
implicitHeight: 10
|
||||
|
||||
CustomSlider {
|
||||
@@ -257,9 +324,13 @@ Item {
|
||||
anchors.right: parent.right
|
||||
implicitHeight: 10
|
||||
value: Audio.sourceVolume
|
||||
onMoved: Audio.setSourceVolume(value)
|
||||
|
||||
Behavior on value { Anim {} }
|
||||
Behavior on value {
|
||||
Anim {
|
||||
}
|
||||
}
|
||||
|
||||
onMoved: Audio.setSourceVolume(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -267,10 +338,9 @@ Item {
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.topMargin: root.topMargin
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 1
|
||||
|
||||
Layout.topMargin: root.topMargin
|
||||
color: DynamicColors.tPalette.m3outline
|
||||
}
|
||||
|
||||
@@ -280,39 +350,40 @@ Item {
|
||||
CustomRect {
|
||||
id: appBox
|
||||
|
||||
Layout.topMargin: root.topMargin
|
||||
required property int index
|
||||
required property var modelData
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 42 + Appearance.spacing.smaller * 2
|
||||
Layout.topMargin: root.topMargin
|
||||
color: DynamicColors.tPalette.m3surfaceContainer
|
||||
|
||||
radius: root.rounding
|
||||
|
||||
|
||||
required property var modelData
|
||||
required property int index
|
||||
|
||||
RowLayout {
|
||||
id: layoutVolume
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.margins: Appearance.spacing.smaller
|
||||
spacing: 15
|
||||
|
||||
|
||||
CustomRect {
|
||||
Layout.preferredWidth: 40
|
||||
Layout.preferredHeight: 40
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredHeight: 40
|
||||
Layout.preferredWidth: 40
|
||||
color: DynamicColors.palette.m3primary
|
||||
radius: 1000
|
||||
|
||||
MaterialIcon {
|
||||
id: icon
|
||||
|
||||
anchors.centerIn: parent
|
||||
text: "volume_up"
|
||||
font.pointSize: 22
|
||||
color: DynamicColors.palette.m3onPrimary
|
||||
font.pointSize: 22
|
||||
text: "volume_up"
|
||||
|
||||
StateLayer {
|
||||
radius: 1000
|
||||
|
||||
onClicked: {
|
||||
appBox.modelData.audio.muted = !appBox.modelData.audio.muted;
|
||||
}
|
||||
@@ -326,42 +397,46 @@ Item {
|
||||
|
||||
TextMetrics {
|
||||
id: metrics
|
||||
text: Audio.getStreamName(appBox.modelData)
|
||||
|
||||
elide: Text.ElideRight
|
||||
elideWidth: root.width - 50
|
||||
text: Audio.getStreamName(appBox.modelData)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
CustomText {
|
||||
text: metrics.elidedText
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
elide: Text.ElideRight
|
||||
text: metrics.elidedText
|
||||
}
|
||||
|
||||
CustomText {
|
||||
text: qsTr("%1").arg(appBox.modelData.audio.muted ? qsTr("Muted") : `${Math.round(appBox.modelData.audio.volume * 100)}%`);
|
||||
font.bold: true
|
||||
Layout.fillHeight: true
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
|
||||
Layout.fillHeight: true
|
||||
font.bold: true
|
||||
text: qsTr("%1").arg(appBox.modelData.audio.muted ? qsTr("Muted") : `${Math.round(appBox.modelData.audio.volume * 100)}%`)
|
||||
}
|
||||
}
|
||||
|
||||
CustomMouseArea {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
implicitHeight: 10
|
||||
|
||||
CustomSlider {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
implicitHeight: 10
|
||||
value: appBox.modelData.audio.volume
|
||||
|
||||
onMoved: {
|
||||
Audio.setStreamVolume(appBox.modelData, value)
|
||||
Audio.setStreamVolume(appBox.modelData, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -370,48 +445,4 @@ Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
component DevicesTab: ColumnLayout {
|
||||
spacing: 12
|
||||
|
||||
ButtonGroup { id: sinks }
|
||||
ButtonGroup { id: sources }
|
||||
|
||||
CustomText {
|
||||
text: qsTr("Output device")
|
||||
font.weight: 500
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: Audio.sinks
|
||||
|
||||
CustomRadioButton {
|
||||
required property PwNode modelData
|
||||
|
||||
ButtonGroup.group: sinks
|
||||
checked: Audio.sink?.id === modelData.id
|
||||
onClicked: Audio.setAudioSink(modelData)
|
||||
text: modelData.description
|
||||
}
|
||||
}
|
||||
|
||||
CustomText {
|
||||
Layout.topMargin: 10
|
||||
text: qsTr("Input device")
|
||||
font.weight: 500
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: Audio.sources
|
||||
|
||||
CustomRadioButton {
|
||||
required property PwNode modelData
|
||||
|
||||
ButtonGroup.group: sources
|
||||
checked: Audio.source?.id === modelData.id
|
||||
onClicked: Audio.setAudioSource(modelData)
|
||||
text: modelData.description
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user