summaryrefslogtreecommitdiff
path: root/modules/controlcenter
diff options
context:
space:
mode:
Diffstat (limited to 'modules/controlcenter')
-rw-r--r--modules/controlcenter/ControlCenter.qml4
-rw-r--r--modules/controlcenter/PaneRegistry.qml1
-rw-r--r--modules/controlcenter/Panes.qml16
-rw-r--r--modules/controlcenter/Session.qml3
-rw-r--r--modules/controlcenter/appearance/AppearancePane.qml158
-rw-r--r--modules/controlcenter/appearance/sections/AnimationsSection.qml12
-rw-r--r--modules/controlcenter/appearance/sections/BackgroundSection.qml125
-rw-r--r--modules/controlcenter/appearance/sections/BorderSection.qml23
-rw-r--r--modules/controlcenter/appearance/sections/ColorSchemeSection.qml1
-rw-r--r--modules/controlcenter/appearance/sections/ColorVariantSection.qml1
-rw-r--r--modules/controlcenter/appearance/sections/FontsSection.qml12
-rw-r--r--modules/controlcenter/appearance/sections/ScalesSection.qml34
-rw-r--r--modules/controlcenter/appearance/sections/ThemeModeSection.qml1
-rw-r--r--modules/controlcenter/appearance/sections/TransparencySection.qml31
-rw-r--r--modules/controlcenter/audio/AudioPane.qml765
-rw-r--r--modules/controlcenter/bluetooth/BtPane.qml2
-rw-r--r--modules/controlcenter/components/DeviceDetails.qml15
-rw-r--r--modules/controlcenter/components/DeviceList.qml9
-rw-r--r--modules/controlcenter/components/PaneTransition.qml13
-rw-r--r--modules/controlcenter/components/SettingsHeader.qml1
-rw-r--r--modules/controlcenter/components/SliderInput.qml29
-rw-r--r--modules/controlcenter/components/SplitPaneLayout.qml5
-rw-r--r--modules/controlcenter/components/SplitPaneWithDetails.qml87
-rw-r--r--modules/controlcenter/components/WallpaperGrid.qml302
-rw-r--r--modules/controlcenter/launcher/LauncherPane.qml349
-rw-r--r--modules/controlcenter/launcher/Settings.qml1
-rw-r--r--modules/controlcenter/network/EthernetDetails.qml2
-rw-r--r--modules/controlcenter/network/EthernetList.qml2
-rw-r--r--modules/controlcenter/network/EthernetPane.qml2
-rw-r--r--modules/controlcenter/network/EthernetSettings.qml2
-rw-r--r--modules/controlcenter/network/NetworkSettings.qml13
-rw-r--r--modules/controlcenter/network/NetworkingPane.qml35
-rw-r--r--modules/controlcenter/network/VpnSettings.qml6
-rw-r--r--modules/controlcenter/network/WirelessDetails.qml5
-rw-r--r--modules/controlcenter/network/WirelessList.qml10
-rw-r--r--modules/controlcenter/network/WirelessPane.qml2
-rw-r--r--modules/controlcenter/network/WirelessPasswordDialog.qml3
-rw-r--r--modules/controlcenter/network/WirelessSettings.qml2
-rw-r--r--modules/controlcenter/state/BluetoothState.qml1
-rw-r--r--modules/controlcenter/state/EthernetState.qml1
-rw-r--r--modules/controlcenter/state/LauncherState.qml1
-rw-r--r--modules/controlcenter/state/NetworkState.qml1
-rw-r--r--modules/controlcenter/taskbar/ConnectedButtonGroup.qml9
-rw-r--r--modules/controlcenter/taskbar/TaskbarPane.qml294
44 files changed, 1218 insertions, 1173 deletions
diff --git a/modules/controlcenter/ControlCenter.qml b/modules/controlcenter/ControlCenter.qml
index 043e7e1..4aacfad 100644
--- a/modules/controlcenter/ControlCenter.qml
+++ b/modules/controlcenter/ControlCenter.qml
@@ -67,7 +67,7 @@ Item {
if (!panes.initialOpeningComplete) {
return;
}
-
+
if (event.angleDelta.y < 0)
root.session.activeIndex = Math.min(root.session.activeIndex + 1, root.session.panes.length - 1);
else if (event.angleDelta.y > 0)
@@ -95,6 +95,6 @@ Item {
session: root.session
}
}
-
+
readonly property bool initialOpeningComplete: panes.initialOpeningComplete
}
diff --git a/modules/controlcenter/PaneRegistry.qml b/modules/controlcenter/PaneRegistry.qml
index d8bf45e..c2a0f38 100644
--- a/modules/controlcenter/PaneRegistry.qml
+++ b/modules/controlcenter/PaneRegistry.qml
@@ -84,4 +84,3 @@ QtObject {
return null;
}
}
-
diff --git a/modules/controlcenter/Panes.qml b/modules/controlcenter/Panes.qml
index c239b91..4a4460c 100644
--- a/modules/controlcenter/Panes.qml
+++ b/modules/controlcenter/Panes.qml
@@ -29,7 +29,7 @@ ClippingRectangle {
MouseArea {
anchors.fill: parent
z: -1
- onPressed: function(mouse) {
+ onPressed: function (mouse) {
root.focus = true;
mouse.accepted = false;
}
@@ -103,7 +103,7 @@ ClippingRectangle {
implicitHeight: root.height
property bool hasBeenLoaded: false
-
+
function updateActive(): void {
const diff = Math.abs(root.session.activeIndex - pane.paneIndex);
const isActivePane = diff === 0;
@@ -130,37 +130,37 @@ ClippingRectangle {
anchors.fill: parent
clip: false
active: false
-
+
Component.onCompleted: {
Qt.callLater(pane.updateActive);
}
-
+
onActiveChanged: {
if (active && !pane.hasBeenLoaded) {
pane.hasBeenLoaded = true;
}
-
+
if (active && !item) {
loader.setSource(pane.componentPath, {
"session": root.session
});
}
}
-
+
onItemChanged: {
if (item) {
pane.hasBeenLoaded = true;
}
}
}
-
+
Connections {
target: root.session
function onActiveIndexChanged(): void {
pane.updateActive();
}
}
-
+
Connections {
target: layout
function onInitialOpeningCompleteChanged(): void {
diff --git a/modules/controlcenter/Session.qml b/modules/controlcenter/Session.qml
index e77cd34..8a8545f 100644
--- a/modules/controlcenter/Session.qml
+++ b/modules/controlcenter/Session.qml
@@ -18,5 +18,6 @@ QtObject {
readonly property VpnState vpn: VpnState {}
onActiveChanged: activeIndex = Math.max(0, panes.indexOf(active))
- onActiveIndexChanged: if (panes[activeIndex]) active = panes[activeIndex]
+ onActiveIndexChanged: if (panes[activeIndex])
+ active = panes[activeIndex]
}
diff --git a/modules/controlcenter/appearance/AppearancePane.qml b/modules/controlcenter/appearance/AppearancePane.qml
index 218433b..4251167 100644
--- a/modules/controlcenter/appearance/AppearancePane.qml
+++ b/modules/controlcenter/appearance/AppearancePane.qml
@@ -73,15 +73,15 @@ Item {
Config.background.desktopClock.enabled = root.desktopClockEnabled;
Config.background.enabled = root.backgroundEnabled;
- Config.background.desktopClock.scale = root.desktopClockScale
- Config.background.desktopClock.position = root.desktopClockPosition
- Config.background.desktopClock.shadow.enabled = root.desktopClockShadowEnabled
- Config.background.desktopClock.shadow.opacity = root.desktopClockShadowOpacity
- Config.background.desktopClock.shadow.blur = root.desktopClockShadowBlur
- Config.background.desktopClock.background.enabled = root.desktopClockBackgroundEnabled
- Config.background.desktopClock.background.opacity = root.desktopClockBackgroundOpacity
- Config.background.desktopClock.background.blur = root.desktopClockBackgroundBlur
- Config.background.desktopClock.invertColors = root.desktopClockInvertColors
+ Config.background.desktopClock.scale = root.desktopClockScale;
+ Config.background.desktopClock.position = root.desktopClockPosition;
+ Config.background.desktopClock.shadow.enabled = root.desktopClockShadowEnabled;
+ Config.background.desktopClock.shadow.opacity = root.desktopClockShadowOpacity;
+ Config.background.desktopClock.shadow.blur = root.desktopClockShadowBlur;
+ Config.background.desktopClock.background.enabled = root.desktopClockBackgroundEnabled;
+ Config.background.desktopClock.background.opacity = root.desktopClockBackgroundOpacity;
+ Config.background.desktopClock.background.blur = root.desktopClockBackgroundBlur;
+ Config.background.desktopClock.invertColors = root.desktopClockInvertColors;
Config.background.visualiser.enabled = root.visualiserEnabled;
Config.background.visualiser.autoHide = root.visualiserAutoHide;
@@ -116,11 +116,11 @@ Item {
Loader {
id: wallpaperLoader
-
+
Layout.fillWidth: true
Layout.fillHeight: true
Layout.bottomMargin: -Appearance.padding.large * 2
-
+
active: {
const isActive = root.session.activeIndex === 3;
const isAdjacent = Math.abs(root.session.activeIndex - 3) === 1;
@@ -129,13 +129,13 @@ Item {
const shouldActivate = loader && loader.item !== null && (isActive || isAdjacent);
return shouldActivate;
}
-
+
onStatusChanged: {
if (status === Loader.Error) {
console.error("[AppearancePane] Wallpaper loader error!");
}
}
-
+
sourceComponent: WallpaperGrid {
session: root.session
}
@@ -155,7 +155,6 @@ Item {
flickableDirection: Flickable.VerticalFlick
contentHeight: sidebarLayout.height
-
StyledScrollBar.vertical: StyledScrollBar {
flickable: sidebarFlickable
}
@@ -165,96 +164,87 @@ Item {
anchors.left: parent.left
anchors.right: parent.right
spacing: Appearance.spacing.small
-
+
readonly property var rootPane: sidebarFlickable.rootPane
- readonly property bool allSectionsExpanded:
- themeModeSection.expanded &&
- colorVariantSection.expanded &&
- colorSchemeSection.expanded &&
- animationsSection.expanded &&
- fontsSection.expanded &&
- scalesSection.expanded &&
- transparencySection.expanded &&
- borderSection.expanded &&
- backgroundSection.expanded
+ readonly property bool allSectionsExpanded: themeModeSection.expanded && colorVariantSection.expanded && colorSchemeSection.expanded && animationsSection.expanded && fontsSection.expanded && scalesSection.expanded && transparencySection.expanded && borderSection.expanded && backgroundSection.expanded
- RowLayout {
- spacing: Appearance.spacing.smaller
+ RowLayout {
+ spacing: Appearance.spacing.smaller
- StyledText {
- text: qsTr("Appearance")
- font.pointSize: Appearance.font.size.large
- font.weight: 500
- }
+ StyledText {
+ text: qsTr("Appearance")
+ font.pointSize: Appearance.font.size.large
+ font.weight: 500
+ }
- Item {
- Layout.fillWidth: true
- }
+ Item {
+ Layout.fillWidth: true
+ }
- IconButton {
- icon: sidebarLayout.allSectionsExpanded ? "unfold_less" : "unfold_more"
- type: IconButton.Text
- label.animate: true
- onClicked: {
- const shouldExpand = !sidebarLayout.allSectionsExpanded;
- themeModeSection.expanded = shouldExpand;
- colorVariantSection.expanded = shouldExpand;
- colorSchemeSection.expanded = shouldExpand;
- animationsSection.expanded = shouldExpand;
- fontsSection.expanded = shouldExpand;
- scalesSection.expanded = shouldExpand;
- transparencySection.expanded = shouldExpand;
- borderSection.expanded = shouldExpand;
- backgroundSection.expanded = shouldExpand;
+ IconButton {
+ icon: sidebarLayout.allSectionsExpanded ? "unfold_less" : "unfold_more"
+ type: IconButton.Text
+ label.animate: true
+ onClicked: {
+ const shouldExpand = !sidebarLayout.allSectionsExpanded;
+ themeModeSection.expanded = shouldExpand;
+ colorVariantSection.expanded = shouldExpand;
+ colorSchemeSection.expanded = shouldExpand;
+ animationsSection.expanded = shouldExpand;
+ fontsSection.expanded = shouldExpand;
+ scalesSection.expanded = shouldExpand;
+ transparencySection.expanded = shouldExpand;
+ borderSection.expanded = shouldExpand;
+ backgroundSection.expanded = shouldExpand;
+ }
}
}
- }
- ThemeModeSection {
- id: themeModeSection
- }
+ ThemeModeSection {
+ id: themeModeSection
+ }
- ColorVariantSection {
- id: colorVariantSection
- }
+ ColorVariantSection {
+ id: colorVariantSection
+ }
- ColorSchemeSection {
- id: colorSchemeSection
- }
+ ColorSchemeSection {
+ id: colorSchemeSection
+ }
- AnimationsSection {
- id: animationsSection
- rootPane: sidebarFlickable.rootPane
- }
+ AnimationsSection {
+ id: animationsSection
+ rootPane: sidebarFlickable.rootPane
+ }
- FontsSection {
- id: fontsSection
- rootPane: sidebarFlickable.rootPane
- }
+ FontsSection {
+ id: fontsSection
+ rootPane: sidebarFlickable.rootPane
+ }
- ScalesSection {
- id: scalesSection
- rootPane: sidebarFlickable.rootPane
- }
+ ScalesSection {
+ id: scalesSection
+ rootPane: sidebarFlickable.rootPane
+ }
- TransparencySection {
- id: transparencySection
- rootPane: sidebarFlickable.rootPane
- }
+ TransparencySection {
+ id: transparencySection
+ rootPane: sidebarFlickable.rootPane
+ }
- BorderSection {
- id: borderSection
- rootPane: sidebarFlickable.rootPane
- }
+ BorderSection {
+ id: borderSection
+ rootPane: sidebarFlickable.rootPane
+ }
- BackgroundSection {
- id: backgroundSection
- rootPane: sidebarFlickable.rootPane
+ BackgroundSection {
+ id: backgroundSection
+ rootPane: sidebarFlickable.rootPane
+ }
}
}
}
- }
rightContent: appearanceRightContentComponent
}
diff --git a/modules/controlcenter/appearance/sections/AnimationsSection.qml b/modules/controlcenter/appearance/sections/AnimationsSection.qml
index 03fc2b1..0cba5ce 100644
--- a/modules/controlcenter/appearance/sections/AnimationsSection.qml
+++ b/modules/controlcenter/appearance/sections/AnimationsSection.qml
@@ -23,20 +23,22 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Animation duration scale")
value: rootPane.animDurationsScale
from: 0.1
to: 5.0
decimals: 1
suffix: "×"
- validator: DoubleValidator { bottom: 0.1; top: 5.0 }
-
- onValueModified: (newValue) => {
+ validator: DoubleValidator {
+ bottom: 0.1
+ top: 5.0
+ }
+
+ onValueModified: newValue => {
rootPane.animDurationsScale = newValue;
rootPane.saveConfig();
}
}
}
}
-
diff --git a/modules/controlcenter/appearance/sections/BackgroundSection.qml b/modules/controlcenter/appearance/sections/BackgroundSection.qml
index d5c16d4..2f75c9e 100644
--- a/modules/controlcenter/appearance/sections/BackgroundSection.qml
+++ b/modules/controlcenter/appearance/sections/BackgroundSection.qml
@@ -45,7 +45,7 @@ CollapsibleSection {
SectionContainer {
id: posContainer
-
+
contentSpacing: Appearance.spacing.small
z: 1
@@ -67,16 +67,29 @@ CollapsibleSection {
SplitButtonRow {
label: qsTr("Vertical Position")
enabled: rootPane.desktopClockEnabled
-
+
menuItems: [
- MenuItem { text: qsTr("Top"); icon: "vertical_align_top"; property string val: "top" },
- MenuItem { text: qsTr("Middle"); icon: "vertical_align_center"; property string val: "middle" },
- MenuItem { text: qsTr("Bottom"); icon: "vertical_align_bottom"; property string val: "bottom" }
+ MenuItem {
+ text: qsTr("Top")
+ icon: "vertical_align_top"
+ property string val: "top"
+ },
+ MenuItem {
+ text: qsTr("Middle")
+ icon: "vertical_align_center"
+ property string val: "middle"
+ },
+ MenuItem {
+ text: qsTr("Bottom")
+ icon: "vertical_align_bottom"
+ property string val: "bottom"
+ }
]
Component.onCompleted: {
- for(let i=0; i < menuItems.length; i++) {
- if(menuItems[i].val === posContainer.currentV) active = menuItems[i];
+ for (let i = 0; i < menuItems.length; i++) {
+ if (menuItems[i].val === posContainer.currentV)
+ active = menuItems[i];
}
}
@@ -88,16 +101,29 @@ CollapsibleSection {
label: qsTr("Horizontal Position")
enabled: rootPane.desktopClockEnabled
expandedZ: 99
-
+
menuItems: [
- MenuItem { text: qsTr("Left"); icon: "align_horizontal_left"; property string val: "left" },
- MenuItem { text: qsTr("Center"); icon: "align_horizontal_center"; property string val: "center" },
- MenuItem { text: qsTr("Right"); icon: "align_horizontal_right"; property string val: "right" }
+ MenuItem {
+ text: qsTr("Left")
+ icon: "align_horizontal_left"
+ property string val: "left"
+ },
+ MenuItem {
+ text: qsTr("Center")
+ icon: "align_horizontal_center"
+ property string val: "center"
+ },
+ MenuItem {
+ text: qsTr("Right")
+ icon: "align_horizontal_right"
+ property string val: "right"
+ }
]
Component.onCompleted: {
- for(let i=0; i < menuItems.length; i++) {
- if(menuItems[i].val === posContainer.currentH) active = menuItems[i];
+ for (let i = 0; i < menuItems.length; i++) {
+ if (menuItems[i].val === posContainer.currentH)
+ active = menuItems[i];
}
}
@@ -137,17 +163,20 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Opacity")
value: rootPane.desktopClockShadowOpacity * 100
from: 0
to: 100
suffix: "%"
- validator: IntValidator { bottom: 0; top: 100 }
- formatValueFunction: (val) => Math.round(val).toString()
- parseValueFunction: (text) => parseInt(text)
-
- onValueModified: (newValue) => {
+ validator: IntValidator {
+ bottom: 0
+ top: 100
+ }
+ formatValueFunction: val => Math.round(val).toString()
+ parseValueFunction: text => parseInt(text)
+
+ onValueModified: newValue => {
rootPane.desktopClockShadowOpacity = newValue / 100;
rootPane.saveConfig();
}
@@ -159,17 +188,20 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Blur")
value: rootPane.desktopClockShadowBlur * 100
from: 0
to: 100
suffix: "%"
- validator: IntValidator { bottom: 0; top: 100 }
- formatValueFunction: (val) => Math.round(val).toString()
- parseValueFunction: (text) => parseInt(text)
-
- onValueModified: (newValue) => {
+ validator: IntValidator {
+ bottom: 0
+ top: 100
+ }
+ formatValueFunction: val => Math.round(val).toString()
+ parseValueFunction: text => parseInt(text)
+
+ onValueModified: newValue => {
rootPane.desktopClockShadowBlur = newValue / 100;
rootPane.saveConfig();
}
@@ -209,17 +241,20 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Opacity")
value: rootPane.desktopClockBackgroundOpacity * 100
from: 0
to: 100
suffix: "%"
- validator: IntValidator { bottom: 0; top: 100 }
- formatValueFunction: (val) => Math.round(val).toString()
- parseValueFunction: (text) => parseInt(text)
-
- onValueModified: (newValue) => {
+ validator: IntValidator {
+ bottom: 0
+ top: 100
+ }
+ formatValueFunction: val => Math.round(val).toString()
+ parseValueFunction: text => parseInt(text)
+
+ onValueModified: newValue => {
rootPane.desktopClockBackgroundOpacity = newValue / 100;
rootPane.saveConfig();
}
@@ -227,7 +262,6 @@ CollapsibleSection {
}
}
-
StyledText {
Layout.topMargin: Appearance.spacing.normal
text: qsTr("Visualiser")
@@ -258,17 +292,20 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Visualiser rounding")
value: rootPane.visualiserRounding
from: 0
to: 10
stepSize: 1
- validator: IntValidator { bottom: 0; top: 10 }
- formatValueFunction: (val) => Math.round(val).toString()
- parseValueFunction: (text) => parseInt(text)
-
- onValueModified: (newValue) => {
+ validator: IntValidator {
+ bottom: 0
+ top: 10
+ }
+ formatValueFunction: val => Math.round(val).toString()
+ parseValueFunction: text => parseInt(text)
+
+ onValueModified: newValue => {
rootPane.visualiserRounding = Math.round(newValue);
rootPane.saveConfig();
}
@@ -280,18 +317,20 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Visualiser spacing")
value: rootPane.visualiserSpacing
from: 0
to: 2
- validator: DoubleValidator { bottom: 0; top: 2 }
-
- onValueModified: (newValue) => {
+ validator: DoubleValidator {
+ bottom: 0
+ top: 2
+ }
+
+ onValueModified: newValue => {
rootPane.visualiserSpacing = newValue;
rootPane.saveConfig();
}
}
}
}
-
diff --git a/modules/controlcenter/appearance/sections/BorderSection.qml b/modules/controlcenter/appearance/sections/BorderSection.qml
index dae26c3..9532d70 100644
--- a/modules/controlcenter/appearance/sections/BorderSection.qml
+++ b/modules/controlcenter/appearance/sections/BorderSection.qml
@@ -23,16 +23,19 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Border rounding")
value: rootPane.borderRounding
from: 0.1
to: 100
decimals: 1
suffix: "px"
- validator: DoubleValidator { bottom: 0.1; top: 100 }
-
- onValueModified: (newValue) => {
+ validator: DoubleValidator {
+ bottom: 0.1
+ top: 100
+ }
+
+ onValueModified: newValue => {
rootPane.borderRounding = newValue;
rootPane.saveConfig();
}
@@ -44,20 +47,22 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Border thickness")
value: rootPane.borderThickness
from: 0.1
to: 100
decimals: 1
suffix: "px"
- validator: DoubleValidator { bottom: 0.1; top: 100 }
-
- onValueModified: (newValue) => {
+ validator: DoubleValidator {
+ bottom: 0.1
+ top: 100
+ }
+
+ onValueModified: newValue => {
rootPane.borderThickness = newValue;
rootPane.saveConfig();
}
}
}
}
-
diff --git a/modules/controlcenter/appearance/sections/ColorSchemeSection.qml b/modules/controlcenter/appearance/sections/ColorSchemeSection.qml
index 691d908..95cb4b7 100644
--- a/modules/controlcenter/appearance/sections/ColorSchemeSection.qml
+++ b/modules/controlcenter/appearance/sections/ColorSchemeSection.qml
@@ -143,4 +143,3 @@ CollapsibleSection {
}
}
}
-
diff --git a/modules/controlcenter/appearance/sections/ColorVariantSection.qml b/modules/controlcenter/appearance/sections/ColorVariantSection.qml
index 98c3d7c..3aa17dd 100644
--- a/modules/controlcenter/appearance/sections/ColorVariantSection.qml
+++ b/modules/controlcenter/appearance/sections/ColorVariantSection.qml
@@ -89,4 +89,3 @@ CollapsibleSection {
}
}
}
-
diff --git a/modules/controlcenter/appearance/sections/FontsSection.qml b/modules/controlcenter/appearance/sections/FontsSection.qml
index ef807b1..3988863 100644
--- a/modules/controlcenter/appearance/sections/FontsSection.qml
+++ b/modules/controlcenter/appearance/sections/FontsSection.qml
@@ -261,20 +261,22 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Font size scale")
value: rootPane.fontSizeScale
from: 0.7
to: 1.5
decimals: 2
suffix: "×"
- validator: DoubleValidator { bottom: 0.7; top: 1.5 }
-
- onValueModified: (newValue) => {
+ validator: DoubleValidator {
+ bottom: 0.7
+ top: 1.5
+ }
+
+ onValueModified: newValue => {
rootPane.fontSizeScale = newValue;
rootPane.saveConfig();
}
}
}
}
-
diff --git a/modules/controlcenter/appearance/sections/ScalesSection.qml b/modules/controlcenter/appearance/sections/ScalesSection.qml
index f74923b..b0e6e38 100644
--- a/modules/controlcenter/appearance/sections/ScalesSection.qml
+++ b/modules/controlcenter/appearance/sections/ScalesSection.qml
@@ -23,16 +23,19 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Padding scale")
value: rootPane.paddingScale
from: 0.5
to: 2.0
decimals: 1
suffix: "×"
- validator: DoubleValidator { bottom: 0.5; top: 2.0 }
-
- onValueModified: (newValue) => {
+ validator: DoubleValidator {
+ bottom: 0.5
+ top: 2.0
+ }
+
+ onValueModified: newValue => {
rootPane.paddingScale = newValue;
rootPane.saveConfig();
}
@@ -44,16 +47,19 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Rounding scale")
value: rootPane.roundingScale
from: 0.1
to: 5.0
decimals: 1
suffix: "×"
- validator: DoubleValidator { bottom: 0.1; top: 5.0 }
-
- onValueModified: (newValue) => {
+ validator: DoubleValidator {
+ bottom: 0.1
+ top: 5.0
+ }
+
+ onValueModified: newValue => {
rootPane.roundingScale = newValue;
rootPane.saveConfig();
}
@@ -65,20 +71,22 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Spacing scale")
value: rootPane.spacingScale
from: 0.1
to: 2.0
decimals: 1
suffix: "×"
- validator: DoubleValidator { bottom: 0.1; top: 2.0 }
-
- onValueModified: (newValue) => {
+ validator: DoubleValidator {
+ bottom: 0.1
+ top: 2.0
+ }
+
+ onValueModified: newValue => {
rootPane.spacingScale = newValue;
rootPane.saveConfig();
}
}
}
}
-
diff --git a/modules/controlcenter/appearance/sections/ThemeModeSection.qml b/modules/controlcenter/appearance/sections/ThemeModeSection.qml
index c136437..04eed91 100644
--- a/modules/controlcenter/appearance/sections/ThemeModeSection.qml
+++ b/modules/controlcenter/appearance/sections/ThemeModeSection.qml
@@ -21,4 +21,3 @@ CollapsibleSection {
}
}
}
-
diff --git a/modules/controlcenter/appearance/sections/TransparencySection.qml b/modules/controlcenter/appearance/sections/TransparencySection.qml
index c9dbfb8..9a48629 100644
--- a/modules/controlcenter/appearance/sections/TransparencySection.qml
+++ b/modules/controlcenter/appearance/sections/TransparencySection.qml
@@ -32,17 +32,20 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Transparency base")
value: rootPane.transparencyBase * 100
from: 0
to: 100
suffix: "%"
- validator: IntValidator { bottom: 0; top: 100 }
- formatValueFunction: (val) => Math.round(val).toString()
- parseValueFunction: (text) => parseInt(text)
-
- onValueModified: (newValue) => {
+ validator: IntValidator {
+ bottom: 0
+ top: 100
+ }
+ formatValueFunction: val => Math.round(val).toString()
+ parseValueFunction: text => parseInt(text)
+
+ onValueModified: newValue => {
rootPane.transparencyBase = newValue / 100;
rootPane.saveConfig();
}
@@ -54,21 +57,23 @@ CollapsibleSection {
SliderInput {
Layout.fillWidth: true
-
+
label: qsTr("Transparency layers")
value: rootPane.transparencyLayers * 100
from: 0
to: 100
suffix: "%"
- validator: IntValidator { bottom: 0; top: 100 }
- formatValueFunction: (val) => Math.round(val).toString()
- parseValueFunction: (text) => parseInt(text)
-
- onValueModified: (newValue) => {
+ validator: IntValidator {
+ bottom: 0
+ top: 100
+ }
+ formatValueFunction: val => Math.round(val).toString()
+ parseValueFunction: text => parseInt(text)
+
+ onValueModified: newValue => {
rootPane.transparencyLayers = newValue / 100;
rootPane.saveConfig();
}
}
}
}
-
diff --git a/modules/controlcenter/audio/AudioPane.qml b/modules/controlcenter/audio/AudioPane.qml
index e4a1a64..01d90be 100644
--- a/modules/controlcenter/audio/AudioPane.qml
+++ b/modules/controlcenter/audio/AudioPane.qml
@@ -40,179 +40,179 @@ Item {
anchors.right: parent.right
spacing: Appearance.spacing.normal
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.smaller
+ RowLayout {
+ Layout.fillWidth: true
+ spacing: Appearance.spacing.smaller
- StyledText {
- text: qsTr("Audio")
- font.pointSize: Appearance.font.size.large
- font.weight: 500
- }
+ StyledText {
+ text: qsTr("Audio")
+ font.pointSize: Appearance.font.size.large
+ font.weight: 500
+ }
- Item {
- Layout.fillWidth: true
+ Item {
+ Layout.fillWidth: true
+ }
}
- }
-
- CollapsibleSection {
- id: outputDevicesSection
- Layout.fillWidth: true
- title: qsTr("Output devices")
- expanded: true
+ CollapsibleSection {
+ id: outputDevicesSection
- ColumnLayout {
Layout.fillWidth: true
- spacing: Appearance.spacing.small
+ title: qsTr("Output devices")
+ expanded: true
- RowLayout {
+ ColumnLayout {
Layout.fillWidth: true
spacing: Appearance.spacing.small
- StyledText {
- text: qsTr("Devices (%1)").arg(Audio.sinks.length)
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
+ RowLayout {
+ Layout.fillWidth: true
+ spacing: Appearance.spacing.small
+
+ StyledText {
+ text: qsTr("Devices (%1)").arg(Audio.sinks.length)
+ font.pointSize: Appearance.font.size.normal
+ font.weight: 500
+ }
}
- }
- StyledText {
- Layout.fillWidth: true
- text: qsTr("All available output devices")
- color: Colours.palette.m3outline
- }
+ StyledText {
+ Layout.fillWidth: true
+ text: qsTr("All available output devices")
+ color: Colours.palette.m3outline
+ }
- Repeater {
- Layout.fillWidth: true
- model: Audio.sinks
+ Repeater {
+ Layout.fillWidth: true
+ model: Audio.sinks
- delegate: StyledRect {
- required property var modelData
+ delegate: StyledRect {
+ required property var modelData
- Layout.fillWidth: true
+ Layout.fillWidth: true
- color: Audio.sink?.id === modelData.id ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
- radius: Appearance.rounding.normal
+ color: Audio.sink?.id === modelData.id ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
+ radius: Appearance.rounding.normal
- StateLayer {
- function onClicked(): void {
- Audio.setAudioSink(modelData);
+ StateLayer {
+ function onClicked(): void {
+ Audio.setAudioSink(modelData);
+ }
}
- }
- RowLayout {
- id: outputRowLayout
+ RowLayout {
+ id: outputRowLayout
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.normal
- spacing: Appearance.spacing.normal
+ spacing: Appearance.spacing.normal
- MaterialIcon {
- text: Audio.sink?.id === modelData.id ? "speaker" : "speaker_group"
- font.pointSize: Appearance.font.size.large
- fill: Audio.sink?.id === modelData.id ? 1 : 0
- }
+ MaterialIcon {
+ text: Audio.sink?.id === modelData.id ? "speaker" : "speaker_group"
+ font.pointSize: Appearance.font.size.large
+ fill: Audio.sink?.id === modelData.id ? 1 : 0
+ }
- StyledText {
- Layout.fillWidth: true
- elide: Text.ElideRight
- maximumLineCount: 1
+ StyledText {
+ Layout.fillWidth: true
+ elide: Text.ElideRight
+ maximumLineCount: 1
- text: modelData.description || qsTr("Unknown")
- font.weight: Audio.sink?.id === modelData.id ? 500 : 400
+ text: modelData.description || qsTr("Unknown")
+ font.weight: Audio.sink?.id === modelData.id ? 500 : 400
+ }
}
- }
- implicitHeight: outputRowLayout.implicitHeight + Appearance.padding.normal * 2
+ implicitHeight: outputRowLayout.implicitHeight + Appearance.padding.normal * 2
+ }
}
}
}
- }
-
- CollapsibleSection {
- id: inputDevicesSection
- Layout.fillWidth: true
- title: qsTr("Input devices")
- expanded: true
+ CollapsibleSection {
+ id: inputDevicesSection
- ColumnLayout {
Layout.fillWidth: true
- spacing: Appearance.spacing.small
+ title: qsTr("Input devices")
+ expanded: true
- RowLayout {
+ ColumnLayout {
Layout.fillWidth: true
spacing: Appearance.spacing.small
- StyledText {
- text: qsTr("Devices (%1)").arg(Audio.sources.length)
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
+ RowLayout {
+ Layout.fillWidth: true
+ spacing: Appearance.spacing.small
+
+ StyledText {
+ text: qsTr("Devices (%1)").arg(Audio.sources.length)
+ font.pointSize: Appearance.font.size.normal
+ font.weight: 500
+ }
}
- }
- StyledText {
- Layout.fillWidth: true
- text: qsTr("All available input devices")
- color: Colours.palette.m3outline
- }
+ StyledText {
+ Layout.fillWidth: true
+ text: qsTr("All available input devices")
+ color: Colours.palette.m3outline
+ }
- Repeater {
- Layout.fillWidth: true
- model: Audio.sources
+ Repeater {
+ Layout.fillWidth: true
+ model: Audio.sources
- delegate: StyledRect {
- required property var modelData
+ delegate: StyledRect {
+ required property var modelData
- Layout.fillWidth: true
+ Layout.fillWidth: true
- color: Audio.source?.id === modelData.id ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
- radius: Appearance.rounding.normal
+ color: Audio.source?.id === modelData.id ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
+ radius: Appearance.rounding.normal
- StateLayer {
- function onClicked(): void {
- Audio.setAudioSource(modelData);
+ StateLayer {
+ function onClicked(): void {
+ Audio.setAudioSource(modelData);
+ }
}
- }
- RowLayout {
- id: inputRowLayout
+ RowLayout {
+ id: inputRowLayout
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.normal
- spacing: Appearance.spacing.normal
+ spacing: Appearance.spacing.normal
- MaterialIcon {
- text: "mic"
- font.pointSize: Appearance.font.size.large
- fill: Audio.source?.id === modelData.id ? 1 : 0
- }
+ MaterialIcon {
+ text: "mic"
+ font.pointSize: Appearance.font.size.large
+ fill: Audio.source?.id === modelData.id ? 1 : 0
+ }
- StyledText {
- Layout.fillWidth: true
- elide: Text.ElideRight
- maximumLineCount: 1
+ StyledText {
+ Layout.fillWidth: true
+ elide: Text.ElideRight
+ maximumLineCount: 1
- text: modelData.description || qsTr("Unknown")
- font.weight: Audio.source?.id === modelData.id ? 500 : 400
+ text: modelData.description || qsTr("Unknown")
+ font.weight: Audio.source?.id === modelData.id ? 500 : 400
+ }
}
- }
- implicitHeight: inputRowLayout.implicitHeight + Appearance.padding.normal * 2
+ implicitHeight: inputRowLayout.implicitHeight + Appearance.padding.normal * 2
+ }
}
}
}
}
}
}
- }
rightContent: Component {
StyledFlickable {
@@ -232,381 +232,390 @@ Item {
anchors.top: parent.top
spacing: Appearance.spacing.normal
- SettingsHeader {
- icon: "volume_up"
- title: qsTr("Audio Settings")
- }
+ SettingsHeader {
+ icon: "volume_up"
+ title: qsTr("Audio Settings")
+ }
- SectionHeader {
- title: qsTr("Output volume")
- description: qsTr("Control the volume of your output device")
- }
+ SectionHeader {
+ title: qsTr("Output volume")
+ description: qsTr("Control the volume of your output device")
+ }
+
+ SectionContainer {
+ contentSpacing: Appearance.spacing.normal
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: Appearance.spacing.small
- ColumnLayout {
+ RowLayout {
Layout.fillWidth: true
- spacing: Appearance.spacing.small
+ spacing: Appearance.spacing.normal
- RowLayout {
+ StyledText {
+ text: qsTr("Volume")
+ font.pointSize: Appearance.font.size.normal
+ font.weight: 500
+ }
+
+ Item {
Layout.fillWidth: true
- spacing: Appearance.spacing.normal
+ }
- StyledText {
- text: qsTr("Volume")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
+ StyledInputField {
+ id: outputVolumeInput
+ Layout.preferredWidth: 70
+ validator: IntValidator {
+ bottom: 0
+ top: 100
}
+ enabled: !Audio.muted
- Item {
- Layout.fillWidth: true
+ Component.onCompleted: {
+ text = Math.round(Audio.volume * 100).toString();
}
- StyledInputField {
- id: outputVolumeInput
- Layout.preferredWidth: 70
- validator: IntValidator { bottom: 0; top: 100 }
- enabled: !Audio.muted
-
- Component.onCompleted: {
- text = Math.round(Audio.volume * 100).toString();
- }
-
- Connections {
- target: Audio
- function onVolumeChanged() {
- if (!outputVolumeInput.hasFocus) {
- outputVolumeInput.text = Math.round(Audio.volume * 100).toString();
- }
+ Connections {
+ target: Audio
+ function onVolumeChanged() {
+ if (!outputVolumeInput.hasFocus) {
+ outputVolumeInput.text = Math.round(Audio.volume * 100).toString();
}
}
-
- onTextEdited: (text) => {
- if (hasFocus) {
- const val = parseInt(text);
- if (!isNaN(val) && val >= 0 && val <= 100) {
- Audio.setVolume(val / 100);
- }
- }
- }
-
- onEditingFinished: {
+ }
+
+ onTextEdited: text => {
+ if (hasFocus) {
const val = parseInt(text);
- if (isNaN(val) || val < 0 || val > 100) {
- text = Math.round(Audio.volume * 100).toString();
+ if (!isNaN(val) && val >= 0 && val <= 100) {
+ Audio.setVolume(val / 100);
}
}
}
- StyledText {
- text: "%"
- color: Colours.palette.m3outline
- font.pointSize: Appearance.font.size.normal
- opacity: Audio.muted ? 0.5 : 1
+ onEditingFinished: {
+ const val = parseInt(text);
+ if (isNaN(val) || val < 0 || val > 100) {
+ text = Math.round(Audio.volume * 100).toString();
+ }
}
+ }
- StyledRect {
- implicitWidth: implicitHeight
- implicitHeight: muteIcon.implicitHeight + Appearance.padding.normal * 2
+ StyledText {
+ text: "%"
+ color: Colours.palette.m3outline
+ font.pointSize: Appearance.font.size.normal
+ opacity: Audio.muted ? 0.5 : 1
+ }
- radius: Appearance.rounding.normal
- color: Audio.muted ? Colours.palette.m3secondary : Colours.palette.m3secondaryContainer
+ StyledRect {
+ implicitWidth: implicitHeight
+ implicitHeight: muteIcon.implicitHeight + Appearance.padding.normal * 2
- StateLayer {
- function onClicked(): void {
- if (Audio.sink?.audio) {
- Audio.sink.audio.muted = !Audio.sink.audio.muted;
- }
+ radius: Appearance.rounding.normal
+ color: Audio.muted ? Colours.palette.m3secondary : Colours.palette.m3secondaryContainer
+
+ StateLayer {
+ function onClicked(): void {
+ if (Audio.sink?.audio) {
+ Audio.sink.audio.muted = !Audio.sink.audio.muted;
}
}
+ }
- MaterialIcon {
- id: muteIcon
+ MaterialIcon {
+ id: muteIcon
- anchors.centerIn: parent
- text: Audio.muted ? "volume_off" : "volume_up"
- color: Audio.muted ? Colours.palette.m3onSecondary : Colours.palette.m3onSecondaryContainer
- }
+ anchors.centerIn: parent
+ text: Audio.muted ? "volume_off" : "volume_up"
+ color: Audio.muted ? Colours.palette.m3onSecondary : Colours.palette.m3onSecondaryContainer
}
}
+ }
- StyledSlider {
- id: outputVolumeSlider
- Layout.fillWidth: true
- implicitHeight: Appearance.padding.normal * 3
+ StyledSlider {
+ id: outputVolumeSlider
+ Layout.fillWidth: true
+ implicitHeight: Appearance.padding.normal * 3
- value: Audio.volume
- enabled: !Audio.muted
- opacity: enabled ? 1 : 0.5
- onMoved: {
- Audio.setVolume(value);
- if (!outputVolumeInput.hasFocus) {
- outputVolumeInput.text = Math.round(value * 100).toString();
- }
+ value: Audio.volume
+ enabled: !Audio.muted
+ opacity: enabled ? 1 : 0.5
+ onMoved: {
+ Audio.setVolume(value);
+ if (!outputVolumeInput.hasFocus) {
+ outputVolumeInput.text = Math.round(value * 100).toString();
}
}
}
}
+ }
- SectionHeader {
- title: qsTr("Input volume")
- description: qsTr("Control the volume of your input device")
- }
+ SectionHeader {
+ title: qsTr("Input volume")
+ description: qsTr("Control the volume of your input device")
+ }
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
+ SectionContainer {
+ contentSpacing: Appearance.spacing.normal
- ColumnLayout {
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: Appearance.spacing.small
+
+ RowLayout {
Layout.fillWidth: true
- spacing: Appearance.spacing.small
+ spacing: Appearance.spacing.normal
+
+ StyledText {
+ text: qsTr("Volume")
+ font.pointSize: Appearance.font.size.normal
+ font.weight: 500
+ }
- RowLayout {
+ Item {
Layout.fillWidth: true
- spacing: Appearance.spacing.normal
+ }
- StyledText {
- text: qsTr("Volume")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
+ StyledInputField {
+ id: inputVolumeInput
+ Layout.preferredWidth: 70
+ validator: IntValidator {
+ bottom: 0
+ top: 100
}
+ enabled: !Audio.sourceMuted
- Item {
- Layout.fillWidth: true
+ Component.onCompleted: {
+ text = Math.round(Audio.sourceVolume * 100).toString();
}
- StyledInputField {
- id: inputVolumeInput
- Layout.preferredWidth: 70
- validator: IntValidator { bottom: 0; top: 100 }
- enabled: !Audio.sourceMuted
-
- Component.onCompleted: {
- text = Math.round(Audio.sourceVolume * 100).toString();
- }
-
- Connections {
- target: Audio
- function onSourceVolumeChanged() {
- if (!inputVolumeInput.hasFocus) {
- inputVolumeInput.text = Math.round(Audio.sourceVolume * 100).toString();
- }
+ Connections {
+ target: Audio
+ function onSourceVolumeChanged() {
+ if (!inputVolumeInput.hasFocus) {
+ inputVolumeInput.text = Math.round(Audio.sourceVolume * 100).toString();
}
}
-
- onTextEdited: (text) => {
- if (hasFocus) {
- const val = parseInt(text);
- if (!isNaN(val) && val >= 0 && val <= 100) {
- Audio.setSourceVolume(val / 100);
- }
- }
- }
-
- onEditingFinished: {
+ }
+
+ onTextEdited: text => {
+ if (hasFocus) {
const val = parseInt(text);
- if (isNaN(val) || val < 0 || val > 100) {
- text = Math.round(Audio.sourceVolume * 100).toString();
+ if (!isNaN(val) && val >= 0 && val <= 100) {
+ Audio.setSourceVolume(val / 100);
}
}
}
- StyledText {
- text: "%"
- color: Colours.palette.m3outline
- font.pointSize: Appearance.font.size.normal
- opacity: Audio.sourceMuted ? 0.5 : 1
+ onEditingFinished: {
+ const val = parseInt(text);
+ if (isNaN(val) || val < 0 || val > 100) {
+ text = Math.round(Audio.sourceVolume * 100).toString();
+ }
}
+ }
- StyledRect {
- implicitWidth: implicitHeight
- implicitHeight: muteInputIcon.implicitHeight + Appearance.padding.normal * 2
+ StyledText {
+ text: "%"
+ color: Colours.palette.m3outline
+ font.pointSize: Appearance.font.size.normal
+ opacity: Audio.sourceMuted ? 0.5 : 1
+ }
- radius: Appearance.rounding.normal
- color: Audio.sourceMuted ? Colours.palette.m3secondary : Colours.palette.m3secondaryContainer
+ StyledRect {
+ implicitWidth: implicitHeight
+ implicitHeight: muteInputIcon.implicitHeight + Appearance.padding.normal * 2
- StateLayer {
- function onClicked(): void {
- if (Audio.source?.audio) {
- Audio.source.audio.muted = !Audio.source.audio.muted;
- }
+ radius: Appearance.rounding.normal
+ color: Audio.sourceMuted ? Colours.palette.m3secondary : Colours.palette.m3secondaryContainer
+
+ StateLayer {
+ function onClicked(): void {
+ if (Audio.source?.audio) {
+ Audio.source.audio.muted = !Audio.source.audio.muted;
}
}
+ }
- MaterialIcon {
- id: muteInputIcon
+ MaterialIcon {
+ id: muteInputIcon
- anchors.centerIn: parent
- text: "mic_off"
- color: Audio.sourceMuted ? Colours.palette.m3onSecondary : Colours.palette.m3onSecondaryContainer
- }
+ anchors.centerIn: parent
+ text: "mic_off"
+ color: Audio.sourceMuted ? Colours.palette.m3onSecondary : Colours.palette.m3onSecondaryContainer
}
}
+ }
- StyledSlider {
- id: inputVolumeSlider
- Layout.fillWidth: true
- implicitHeight: Appearance.padding.normal * 3
+ StyledSlider {
+ id: inputVolumeSlider
+ Layout.fillWidth: true
+ implicitHeight: Appearance.padding.normal * 3
- value: Audio.sourceVolume
- enabled: !Audio.sourceMuted
- opacity: enabled ? 1 : 0.5
- onMoved: {
- Audio.setSourceVolume(value);
- if (!inputVolumeInput.hasFocus) {
- inputVolumeInput.text = Math.round(value * 100).toString();
- }
+ value: Audio.sourceVolume
+ enabled: !Audio.sourceMuted
+ opacity: enabled ? 1 : 0.5
+ onMoved: {
+ Audio.setSourceVolume(value);
+ if (!inputVolumeInput.hasFocus) {
+ inputVolumeInput.text = Math.round(value * 100).toString();
}
}
}
}
+ }
- SectionHeader {
- title: qsTr("Applications")
- description: qsTr("Control volume for individual applications")
- }
+ SectionHeader {
+ title: qsTr("Applications")
+ description: qsTr("Control volume for individual applications")
+ }
+
+ SectionContainer {
+ contentSpacing: Appearance.spacing.normal
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: Appearance.spacing.small
- ColumnLayout {
+ Repeater {
+ model: Audio.streams
Layout.fillWidth: true
- spacing: Appearance.spacing.small
- Repeater {
- model: Audio.streams
- Layout.fillWidth: true
+ delegate: ColumnLayout {
+ required property var modelData
+ required property int index
- delegate: ColumnLayout {
- required property var modelData
- required property int index
+ Layout.fillWidth: true
+ spacing: Appearance.spacing.smaller
+ RowLayout {
Layout.fillWidth: true
- spacing: Appearance.spacing.smaller
+ spacing: Appearance.spacing.normal
- RowLayout {
+ MaterialIcon {
+ text: "apps"
+ font.pointSize: Appearance.font.size.normal
+ fill: 0
+ }
+
+ StyledText {
Layout.fillWidth: true
- spacing: Appearance.spacing.normal
+ elide: Text.ElideRight
+ maximumLineCount: 1
+ text: Audio.getStreamName(modelData)
+ font.pointSize: Appearance.font.size.normal
+ font.weight: 500
+ }
- MaterialIcon {
- text: "apps"
- font.pointSize: Appearance.font.size.normal
- fill: 0
+ StyledInputField {
+ id: streamVolumeInput
+ Layout.preferredWidth: 70
+ validator: IntValidator {
+ bottom: 0
+ top: 100
}
+ enabled: !Audio.getStreamMuted(modelData)
- StyledText {
- Layout.fillWidth: true
- elide: Text.ElideRight
- maximumLineCount: 1
- text: Audio.getStreamName(modelData)
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
+ Component.onCompleted: {
+ text = Math.round(Audio.getStreamVolume(modelData) * 100).toString();
}
- StyledInputField {
- id: streamVolumeInput
- Layout.preferredWidth: 70
- validator: IntValidator { bottom: 0; top: 100 }
- enabled: !Audio.getStreamMuted(modelData)
-
- Component.onCompleted: {
- text = Math.round(Audio.getStreamVolume(modelData) * 100).toString();
- }
-
- Connections {
- target: modelData
- function onAudioChanged() {
- if (!streamVolumeInput.hasFocus && modelData?.audio) {
- streamVolumeInput.text = Math.round(modelData.audio.volume * 100).toString();
- }
- }
- }
-
- onTextEdited: (text) => {
- if (hasFocus) {
- const val = parseInt(text);
- if (!isNaN(val) && val >= 0 && val <= 100) {
- Audio.setStreamVolume(modelData, val / 100);
- }
+ Connections {
+ target: modelData
+ function onAudioChanged() {
+ if (!streamVolumeInput.hasFocus && modelData?.audio) {
+ streamVolumeInput.text = Math.round(modelData.audio.volume * 100).toString();
}
}
-
- onEditingFinished: {
+ }
+
+ onTextEdited: text => {
+ if (hasFocus) {
const val = parseInt(text);
- if (isNaN(val) || val < 0 || val > 100) {
- text = Math.round(Audio.getStreamVolume(modelData) * 100).toString();
+ if (!isNaN(val) && val >= 0 && val <= 100) {
+ Audio.setStreamVolume(modelData, val / 100);
}
}
}
- StyledText {
- text: "%"
- color: Colours.palette.m3outline
- font.pointSize: Appearance.font.size.normal
- opacity: Audio.getStreamMuted(modelData) ? 0.5 : 1
+ onEditingFinished: {
+ const val = parseInt(text);
+ if (isNaN(val) || val < 0 || val > 100) {
+ text = Math.round(Audio.getStreamVolume(modelData) * 100).toString();
+ }
}
+ }
+
+ StyledText {
+ text: "%"
+ color: Colours.palette.m3outline
+ font.pointSize: Appearance.font.size.normal
+ opacity: Audio.getStreamMuted(modelData) ? 0.5 : 1
+ }
- StyledRect {
- implicitWidth: implicitHeight
- implicitHeight: streamMuteIcon.implicitHeight + Appearance.padding.normal * 2
+ StyledRect {
+ implicitWidth: implicitHeight
+ implicitHeight: streamMuteIcon.implicitHeight + Appearance.padding.normal * 2
- radius: Appearance.rounding.normal
- color: Audio.getStreamMuted(modelData) ? Colours.palette.m3secondary : Colours.palette.m3secondaryContainer
+ radius: Appearance.rounding.normal
+ color: Audio.getStreamMuted(modelData) ? Colours.palette.m3secondary : Colours.palette.m3secondaryContainer
- StateLayer {
- function onClicked(): void {
- Audio.setStreamMuted(modelData, !Audio.getStreamMuted(modelData));
- }
+ StateLayer {
+ function onClicked(): void {
+ Audio.setStreamMuted(modelData, !Audio.getStreamMuted(modelData));
}
+ }
- MaterialIcon {
- id: streamMuteIcon
+ MaterialIcon {
+ id: streamMuteIcon
- anchors.centerIn: parent
- text: Audio.getStreamMuted(modelData) ? "volume_off" : "volume_up"
- color: Audio.getStreamMuted(modelData) ? Colours.palette.m3onSecondary : Colours.palette.m3onSecondaryContainer
- }
+ anchors.centerIn: parent
+ text: Audio.getStreamMuted(modelData) ? "volume_off" : "volume_up"
+ color: Audio.getStreamMuted(modelData) ? Colours.palette.m3onSecondary : Colours.palette.m3onSecondaryContainer
}
}
+ }
- StyledSlider {
- Layout.fillWidth: true
- implicitHeight: Appearance.padding.normal * 3
+ StyledSlider {
+ Layout.fillWidth: true
+ implicitHeight: Appearance.padding.normal * 3
- value: Audio.getStreamVolume(modelData)
- enabled: !Audio.getStreamMuted(modelData)
- opacity: enabled ? 1 : 0.5
- onMoved: {
- Audio.setStreamVolume(modelData, value);
- if (!streamVolumeInput.hasFocus) {
- streamVolumeInput.text = Math.round(value * 100).toString();
- }
+ value: Audio.getStreamVolume(modelData)
+ enabled: !Audio.getStreamMuted(modelData)
+ opacity: enabled ? 1 : 0.5
+ onMoved: {
+ Audio.setStreamVolume(modelData, value);
+ if (!streamVolumeInput.hasFocus) {
+ streamVolumeInput.text = Math.round(value * 100).toString();
}
+ }
- Connections {
- target: modelData
- function onAudioChanged() {
- if (modelData?.audio) {
- value = modelData.audio.volume;
- }
+ Connections {
+ target: modelData
+ function onAudioChanged() {
+ if (modelData?.audio) {
+ value = modelData.audio.volume;
}
}
}
}
}
+ }
- StyledText {
- Layout.fillWidth: true
- visible: Audio.streams.length === 0
- text: qsTr("No applications currently playing audio")
- color: Colours.palette.m3outline
- font.pointSize: Appearance.font.size.small
- horizontalAlignment: Text.AlignHCenter
- }
+ StyledText {
+ Layout.fillWidth: true
+ visible: Audio.streams.length === 0
+ text: qsTr("No applications currently playing audio")
+ color: Colours.palette.m3outline
+ font.pointSize: Appearance.font.size.small
+ horizontalAlignment: Text.AlignHCenter
}
}
}
}
}
}
- } \ No newline at end of file
+ }
+}
diff --git a/modules/controlcenter/bluetooth/BtPane.qml b/modules/controlcenter/bluetooth/BtPane.qml
index a987e75..7d3b9ca 100644
--- a/modules/controlcenter/bluetooth/BtPane.qml
+++ b/modules/controlcenter/bluetooth/BtPane.qml
@@ -19,7 +19,7 @@ SplitPaneWithDetails {
anchors.fill: parent
activeItem: session.bt.active
- paneIdGenerator: function(item) {
+ paneIdGenerator: function (item) {
return item ? (item.address || "") : "";
}
diff --git a/modules/controlcenter/components/DeviceDetails.qml b/modules/controlcenter/components/DeviceDetails.qml
index 8cc9177..a5d0647 100644
--- a/modules/controlcenter/components/DeviceDetails.qml
+++ b/modules/controlcenter/components/DeviceDetails.qml
@@ -14,10 +14,10 @@ Item {
property Session session
property var device: null
-
+
property Component headerComponent: null
property list<Component> sections: []
-
+
property Component topContent: null
property Component bottomContent: null
@@ -34,7 +34,7 @@ Item {
Loader {
id: headerLoader
-
+
Layout.fillWidth: true
sourceComponent: root.headerComponent
visible: root.headerComponent !== null
@@ -42,7 +42,7 @@ Item {
Loader {
id: topContentLoader
-
+
Layout.fillWidth: true
sourceComponent: root.topContent
visible: root.topContent !== null
@@ -50,10 +50,10 @@ Item {
Repeater {
model: root.sections
-
+
Loader {
required property Component modelData
-
+
Layout.fillWidth: true
sourceComponent: modelData
}
@@ -61,11 +61,10 @@ Item {
Loader {
id: bottomContentLoader
-
+
Layout.fillWidth: true
sourceComponent: root.bottomContent
visible: root.bottomContent !== null
}
}
}
-
diff --git a/modules/controlcenter/components/DeviceList.qml b/modules/controlcenter/components/DeviceList.qml
index 75dd913..722f9a1 100644
--- a/modules/controlcenter/components/DeviceList.qml
+++ b/modules/controlcenter/components/DeviceList.qml
@@ -16,21 +16,21 @@ ColumnLayout {
property Session session: null
property var model: null
property Component delegate: null
-
+
property string title: ""
property string description: ""
property var activeItem: null
property Component headerComponent: null
property Component titleSuffix: null
property bool showHeader: true
-
+
signal itemSelected(var item)
spacing: Appearance.spacing.small
Loader {
id: headerLoader
-
+
Layout.fillWidth: true
sourceComponent: root.headerComponent
visible: root.headerComponent !== null && root.showHeader
@@ -58,7 +58,7 @@ ColumnLayout {
Layout.fillWidth: true
}
}
-
+
property alias view: view
StyledText {
@@ -82,4 +82,3 @@ ColumnLayout {
clip: false
}
}
-
diff --git a/modules/controlcenter/components/PaneTransition.qml b/modules/controlcenter/components/PaneTransition.qml
index d1814b5..5d80dbe 100644
--- a/modules/controlcenter/components/PaneTransition.qml
+++ b/modules/controlcenter/components/PaneTransition.qml
@@ -8,12 +8,12 @@ SequentialAnimation {
required property Item target
property list<PropertyAction> propertyActions
-
+
property real scaleFrom: 1.0
property real scaleTo: 0.8
property real opacityFrom: 1.0
property real opacityTo: 0.0
-
+
ParallelAnimation {
NumberAnimation {
target: root.target
@@ -24,7 +24,7 @@ SequentialAnimation {
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standardAccel
}
-
+
NumberAnimation {
target: root.target
property: "scale"
@@ -35,7 +35,7 @@ SequentialAnimation {
easing.bezierCurve: Appearance.anim.curves.standardAccel
}
}
-
+
ScriptAction {
script: {
for (let i = 0; i < root.propertyActions.length; i++) {
@@ -46,7 +46,7 @@ SequentialAnimation {
}
}
}
-
+
ParallelAnimation {
NumberAnimation {
target: root.target
@@ -57,7 +57,7 @@ SequentialAnimation {
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standardDecel
}
-
+
NumberAnimation {
target: root.target
property: "scale"
@@ -69,4 +69,3 @@ SequentialAnimation {
}
}
}
-
diff --git a/modules/controlcenter/components/SettingsHeader.qml b/modules/controlcenter/components/SettingsHeader.qml
index c1ba148..0dc190c 100644
--- a/modules/controlcenter/components/SettingsHeader.qml
+++ b/modules/controlcenter/components/SettingsHeader.qml
@@ -35,4 +35,3 @@ Item {
}
}
}
-
diff --git a/modules/controlcenter/components/SliderInput.qml b/modules/controlcenter/components/SliderInput.qml
index 7348368..11b3f70 100644
--- a/modules/controlcenter/components/SliderInput.qml
+++ b/modules/controlcenter/components/SliderInput.qml
@@ -21,7 +21,7 @@ ColumnLayout {
property int decimals: 1 // Number of decimal places to show (default: 1)
property var formatValueFunction: null // Optional custom format function
property var parseValueFunction: null // Optional custom parse function
-
+
function formatValue(val: real): string {
if (formatValueFunction) {
return formatValueFunction(val);
@@ -34,7 +34,7 @@ ColumnLayout {
// For DoubleValidator or no validator, use the decimals property
return val.toFixed(root.decimals);
}
-
+
function parseValue(text: string): real {
if (parseValueFunction) {
return parseValueFunction(text);
@@ -48,13 +48,13 @@ ColumnLayout {
}
return parseFloat(text);
}
-
+
signal valueModified(real newValue)
property bool _initialized: false
spacing: Appearance.spacing.small
-
+
Component.onCompleted: {
// Set initialized flag after a brief delay to allow component to fully load
Qt.callLater(() => {
@@ -80,13 +80,13 @@ ColumnLayout {
id: inputField
Layout.preferredWidth: 70
validator: root.validator
-
+
Component.onCompleted: {
// Initialize text without triggering valueModified signal
text = root.formatValue(root.value);
}
-
- onTextEdited: (text) => {
+
+ onTextEdited: text => {
if (hasFocus) {
const val = root.parseValue(text);
if (!isNaN(val)) {
@@ -100,14 +100,14 @@ ColumnLayout {
isValid = false;
}
}
-
+
if (isValid) {
root.valueModified(val);
}
}
}
}
-
+
onEditingFinished: {
const val = root.parseValue(text);
let isValid = true;
@@ -119,7 +119,7 @@ ColumnLayout {
isValid = false;
}
}
-
+
if (isNaN(val) || !isValid) {
text = root.formatValue(root.value);
}
@@ -143,7 +143,7 @@ ColumnLayout {
from: root.from
to: root.to
stepSize: root.stepSize
-
+
// Use Binding to allow slider to move freely during dragging
Binding {
target: slider
@@ -151,7 +151,7 @@ ColumnLayout {
value: root.value
when: !slider.pressed
}
-
+
onValueChanged: {
// Update input field text in real-time as slider moves during dragging
// Always update when slider value changes (during dragging or external updates)
@@ -160,7 +160,7 @@ ColumnLayout {
inputField.text = root.formatValue(newValue);
}
}
-
+
onMoved: {
const newValue = root.stepSize > 0 ? Math.round(value / root.stepSize) * root.stepSize : value;
root.valueModified(newValue);
@@ -169,7 +169,7 @@ ColumnLayout {
}
}
}
-
+
// Update input field when value changes externally (slider is already bound)
onValueChanged: {
// Only update if component is initialized to avoid issues during creation
@@ -178,4 +178,3 @@ ColumnLayout {
}
}
}
-
diff --git a/modules/controlcenter/components/SplitPaneLayout.qml b/modules/controlcenter/components/SplitPaneLayout.qml
index 3609a74..89504a0 100644
--- a/modules/controlcenter/components/SplitPaneLayout.qml
+++ b/modules/controlcenter/components/SplitPaneLayout.qml
@@ -14,12 +14,12 @@ RowLayout {
property Component leftContent: null
property Component rightContent: null
-
+
property real leftWidthRatio: 0.4
property int leftMinimumWidth: 420
property var leftLoaderProperties: ({})
property var rightLoaderProperties: ({})
-
+
property alias leftLoader: leftLoader
property alias rightLoader: rightLoader
@@ -107,4 +107,3 @@ RowLayout {
}
}
}
-
diff --git a/modules/controlcenter/components/SplitPaneWithDetails.qml b/modules/controlcenter/components/SplitPaneWithDetails.qml
index 5db5bdb..ce8c9d0 100644
--- a/modules/controlcenter/components/SplitPaneWithDetails.qml
+++ b/modules/controlcenter/components/SplitPaneWithDetails.qml
@@ -15,10 +15,12 @@ Item {
required property Component leftContent
required property Component rightDetailsComponent
required property Component rightSettingsComponent
-
+
property var activeItem: null
- property var paneIdGenerator: function(item) { return item ? String(item) : ""; }
-
+ property var paneIdGenerator: function (item) {
+ return item ? String(item) : "";
+ }
+
property Component overlayComponent: null
SplitPaneLayout {
@@ -29,64 +31,63 @@ Item {
leftContent: root.leftContent
rightContent: Component {
- Item {
- id: rightPaneItem
-
- property var pane: root.activeItem
- property string paneId: root.paneIdGenerator(pane)
- property Component targetComponent: root.rightSettingsComponent
- property Component nextComponent: root.rightSettingsComponent
+ Item {
+ id: rightPaneItem
- function getComponentForPane() {
- return pane ? root.rightDetailsComponent : root.rightSettingsComponent;
- }
+ property var pane: root.activeItem
+ property string paneId: root.paneIdGenerator(pane)
+ property Component targetComponent: root.rightSettingsComponent
+ property Component nextComponent: root.rightSettingsComponent
- Component.onCompleted: {
- targetComponent = getComponentForPane();
- nextComponent = targetComponent;
- }
+ function getComponentForPane() {
+ return pane ? root.rightDetailsComponent : root.rightSettingsComponent;
+ }
- Loader {
- id: rightLoader
+ Component.onCompleted: {
+ targetComponent = getComponentForPane();
+ nextComponent = targetComponent;
+ }
- anchors.fill: parent
+ Loader {
+ id: rightLoader
- opacity: 1
- scale: 1
- transformOrigin: Item.Center
+ anchors.fill: parent
- clip: false
- sourceComponent: rightPaneItem.targetComponent
- }
+ opacity: 1
+ scale: 1
+ transformOrigin: Item.Center
- Behavior on paneId {
- PaneTransition {
- target: rightLoader
- propertyActions: [
- PropertyAction {
- target: rightPaneItem
- property: "targetComponent"
- value: rightPaneItem.nextComponent
- }
- ]
+ clip: false
+ sourceComponent: rightPaneItem.targetComponent
+ }
+
+ Behavior on paneId {
+ PaneTransition {
+ target: rightLoader
+ propertyActions: [
+ PropertyAction {
+ target: rightPaneItem
+ property: "targetComponent"
+ value: rightPaneItem.nextComponent
+ }
+ ]
+ }
}
- }
- onPaneChanged: {
- nextComponent = getComponentForPane();
- paneId = root.paneIdGenerator(pane);
+ onPaneChanged: {
+ nextComponent = getComponentForPane();
+ paneId = root.paneIdGenerator(pane);
+ }
}
}
- }
}
Loader {
id: overlayLoader
-
+
anchors.fill: parent
z: 1000
sourceComponent: root.overlayComponent
active: root.overlayComponent !== null
}
}
-
diff --git a/modules/controlcenter/components/WallpaperGrid.qml b/modules/controlcenter/components/WallpaperGrid.qml
index 5eab5b8..ed6bb40 100644
--- a/modules/controlcenter/components/WallpaperGrid.qml
+++ b/modules/controlcenter/components/WallpaperGrid.qml
@@ -24,7 +24,7 @@ GridView {
model: Wallpapers.list
clip: true
-
+
StyledScrollBar.vertical: StyledScrollBar {
flickable: root
}
@@ -40,202 +40,194 @@ GridView {
readonly property real itemMargin: Appearance.spacing.normal / 2
readonly property real itemRadius: Appearance.rounding.normal
- StateLayer {
- anchors.fill: parent
- anchors.leftMargin: itemMargin
- anchors.rightMargin: itemMargin
- anchors.topMargin: itemMargin
- anchors.bottomMargin: itemMargin
- radius: itemRadius
+ StateLayer {
+ anchors.fill: parent
+ anchors.leftMargin: itemMargin
+ anchors.rightMargin: itemMargin
+ anchors.topMargin: itemMargin
+ anchors.bottomMargin: itemMargin
+ radius: itemRadius
- function onClicked(): void {
- Wallpapers.setWallpaper(modelData.path);
- }
+ function onClicked(): void {
+ Wallpapers.setWallpaper(modelData.path);
}
+ }
- StyledClippingRect {
- id: image
+ StyledClippingRect {
+ id: image
- anchors.fill: parent
- anchors.leftMargin: itemMargin
- anchors.rightMargin: itemMargin
- anchors.topMargin: itemMargin
- anchors.bottomMargin: itemMargin
- color: Colours.tPalette.m3surfaceContainer
- radius: itemRadius
- antialiasing: true
- layer.enabled: true
- layer.smooth: true
+ anchors.fill: parent
+ anchors.leftMargin: itemMargin
+ anchors.rightMargin: itemMargin
+ anchors.topMargin: itemMargin
+ anchors.bottomMargin: itemMargin
+ color: Colours.tPalette.m3surfaceContainer
+ radius: itemRadius
+ antialiasing: true
+ layer.enabled: true
+ layer.smooth: true
- CachingImage {
- id: cachingImage
+ CachingImage {
+ id: cachingImage
- path: modelData.path
- anchors.fill: parent
- fillMode: Image.PreserveAspectCrop
- cache: true
- visible: opacity > 0
- antialiasing: true
- smooth: true
- sourceSize: Qt.size(width, height)
+ path: modelData.path
+ anchors.fill: parent
+ fillMode: Image.PreserveAspectCrop
+ cache: true
+ visible: opacity > 0
+ antialiasing: true
+ smooth: true
+ sourceSize: Qt.size(width, height)
- opacity: status === Image.Ready ? 1 : 0
+ opacity: status === Image.Ready ? 1 : 0
- Behavior on opacity {
- NumberAnimation {
- duration: 1000
- easing.type: Easing.OutQuad
- }
+ Behavior on opacity {
+ NumberAnimation {
+ duration: 1000
+ easing.type: Easing.OutQuad
}
}
+ }
- // Fallback if CachingImage fails to load
- Image {
- id: fallbackImage
+ // Fallback if CachingImage fails to load
+ Image {
+ id: fallbackImage
- anchors.fill: parent
- source: fallbackTimer.triggered && cachingImage.status !== Image.Ready ? modelData.path : ""
- asynchronous: true
- fillMode: Image.PreserveAspectCrop
- cache: true
- visible: opacity > 0
- antialiasing: true
- smooth: true
- sourceSize: Qt.size(width, height)
+ anchors.fill: parent
+ source: fallbackTimer.triggered && cachingImage.status !== Image.Ready ? modelData.path : ""
+ asynchronous: true
+ fillMode: Image.PreserveAspectCrop
+ cache: true
+ visible: opacity > 0
+ antialiasing: true
+ smooth: true
+ sourceSize: Qt.size(width, height)
- opacity: status === Image.Ready && cachingImage.status !== Image.Ready ? 1 : 0
+ opacity: status === Image.Ready && cachingImage.status !== Image.Ready ? 1 : 0
- Behavior on opacity {
- NumberAnimation {
- duration: 1000
- easing.type: Easing.OutQuad
- }
+ Behavior on opacity {
+ NumberAnimation {
+ duration: 1000
+ easing.type: Easing.OutQuad
}
}
+ }
- Timer {
- id: fallbackTimer
+ Timer {
+ id: fallbackTimer
- property bool triggered: false
- interval: 800
- running: cachingImage.status === Image.Loading || cachingImage.status === Image.Null
- onTriggered: triggered = true
- }
+ property bool triggered: false
+ interval: 800
+ running: cachingImage.status === Image.Loading || cachingImage.status === Image.Null
+ onTriggered: triggered = true
+ }
- // Gradient overlay for filename
- Rectangle {
- id: filenameOverlay
+ // Gradient overlay for filename
+ Rectangle {
+ id: filenameOverlay
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
- implicitHeight: filenameText.implicitHeight + Appearance.padding.normal * 1.5
- radius: 0
+ implicitHeight: filenameText.implicitHeight + Appearance.padding.normal * 1.5
+ radius: 0
- gradient: Gradient {
- GradientStop {
- position: 0.0
- color: Qt.rgba(Colours.palette.m3surface.r,
- Colours.palette.m3surface.g,
- Colours.palette.m3surface.b, 0)
- }
- GradientStop {
- position: 0.3
- color: Qt.rgba(Colours.palette.m3surface.r,
- Colours.palette.m3surface.g,
- Colours.palette.m3surface.b, 0.7)
- }
- GradientStop {
- position: 0.6
- color: Qt.rgba(Colours.palette.m3surface.r,
- Colours.palette.m3surface.g,
- Colours.palette.m3surface.b, 0.9)
- }
- GradientStop {
- position: 1.0
- color: Qt.rgba(Colours.palette.m3surface.r,
- Colours.palette.m3surface.g,
- Colours.palette.m3surface.b, 0.95)
- }
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: Qt.rgba(Colours.palette.m3surface.r, Colours.palette.m3surface.g, Colours.palette.m3surface.b, 0)
}
-
- opacity: 0
-
- Behavior on opacity {
- NumberAnimation {
- duration: 1000
- easing.type: Easing.OutCubic
- }
+ GradientStop {
+ position: 0.3
+ color: Qt.rgba(Colours.palette.m3surface.r, Colours.palette.m3surface.g, Colours.palette.m3surface.b, 0.7)
}
-
- Component.onCompleted: {
- opacity = 1;
+ GradientStop {
+ position: 0.6
+ color: Qt.rgba(Colours.palette.m3surface.r, Colours.palette.m3surface.g, Colours.palette.m3surface.b, 0.9)
+ }
+ GradientStop {
+ position: 1.0
+ color: Qt.rgba(Colours.palette.m3surface.r, Colours.palette.m3surface.g, Colours.palette.m3surface.b, 0.95)
}
}
- }
- Rectangle {
- anchors.fill: parent
- anchors.leftMargin: itemMargin
- anchors.rightMargin: itemMargin
- anchors.topMargin: itemMargin
- anchors.bottomMargin: itemMargin
- color: "transparent"
- radius: itemRadius + border.width
- border.width: isCurrent ? 2 : 0
- border.color: Colours.palette.m3primary
- antialiasing: true
- smooth: true
+ opacity: 0
- Behavior on border.width {
+ Behavior on opacity {
NumberAnimation {
- duration: 150
- easing.type: Easing.OutQuad
+ duration: 1000
+ easing.type: Easing.OutCubic
}
}
- MaterialIcon {
- anchors.right: parent.right
- anchors.top: parent.top
- anchors.margins: Appearance.padding.small
+ Component.onCompleted: {
+ opacity = 1;
+ }
+ }
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ anchors.leftMargin: itemMargin
+ anchors.rightMargin: itemMargin
+ anchors.topMargin: itemMargin
+ anchors.bottomMargin: itemMargin
+ color: "transparent"
+ radius: itemRadius + border.width
+ border.width: isCurrent ? 2 : 0
+ border.color: Colours.palette.m3primary
+ antialiasing: true
+ smooth: true
- visible: isCurrent
- text: "check_circle"
- color: Colours.palette.m3primary
- font.pointSize: Appearance.font.size.large
+ Behavior on border.width {
+ NumberAnimation {
+ duration: 150
+ easing.type: Easing.OutQuad
}
}
- StyledText {
- id: filenameText
- anchors.left: parent.left
+ MaterialIcon {
anchors.right: parent.right
- anchors.bottom: parent.bottom
- anchors.leftMargin: Appearance.padding.normal + Appearance.spacing.normal / 2
- anchors.rightMargin: Appearance.padding.normal + Appearance.spacing.normal / 2
- anchors.bottomMargin: Appearance.padding.normal
+ anchors.top: parent.top
+ anchors.margins: Appearance.padding.small
- text: modelData.name
- font.pointSize: Appearance.font.size.smaller
- font.weight: 500
- color: isCurrent ? Colours.palette.m3primary : Colours.palette.m3onSurface
- elide: Text.ElideMiddle
- maximumLineCount: 1
- horizontalAlignment: Text.AlignHCenter
+ visible: isCurrent
+ text: "check_circle"
+ color: Colours.palette.m3primary
+ font.pointSize: Appearance.font.size.large
+ }
+ }
- opacity: 0
+ StyledText {
+ id: filenameText
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.leftMargin: Appearance.padding.normal + Appearance.spacing.normal / 2
+ anchors.rightMargin: Appearance.padding.normal + Appearance.spacing.normal / 2
+ anchors.bottomMargin: Appearance.padding.normal
- Behavior on opacity {
- NumberAnimation {
- duration: 1000
- easing.type: Easing.OutCubic
- }
- }
+ text: modelData.name
+ font.pointSize: Appearance.font.size.smaller
+ font.weight: 500
+ color: isCurrent ? Colours.palette.m3primary : Colours.palette.m3onSurface
+ elide: Text.ElideMiddle
+ maximumLineCount: 1
+ horizontalAlignment: Text.AlignHCenter
- Component.onCompleted: {
- opacity = 1;
+ opacity: 0
+
+ Behavior on opacity {
+ NumberAnimation {
+ duration: 1000
+ easing.type: Easing.OutCubic
}
}
+
+ Component.onCompleted: {
+ opacity = 1;
+ }
}
}
+}
diff --git a/modules/controlcenter/launcher/LauncherPane.qml b/modules/controlcenter/launcher/LauncherPane.qml
index fabe75e..0dd464f 100644
--- a/modules/controlcenter/launcher/LauncherPane.qml
+++ b/modules/controlcenter/launcher/LauncherPane.qml
@@ -79,7 +79,6 @@ Item {
Config.save();
}
-
AppDb {
id: allAppsDb
@@ -118,9 +117,7 @@ Item {
scoreFn: r => r[0].score
});
- return results
- .sort((a, b) => b._score - a._score)
- .map(r => r.obj._item);
+ return results.sort((a, b) => b._score - a._score).map(r => r.obj._item);
}
property list<var> filteredApps: []
@@ -156,214 +153,214 @@ Item {
spacing: Appearance.spacing.small
RowLayout {
- spacing: Appearance.spacing.smaller
+ spacing: Appearance.spacing.smaller
- StyledText {
- text: qsTr("Launcher")
- font.pointSize: Appearance.font.size.large
- font.weight: 500
- }
+ StyledText {
+ text: qsTr("Launcher")
+ font.pointSize: Appearance.font.size.large
+ font.weight: 500
+ }
- Item {
- Layout.fillWidth: true
- }
+ Item {
+ Layout.fillWidth: true
+ }
- ToggleButton {
- toggled: !root.session.launcher.active
- icon: "settings"
- accent: "Primary"
- iconSize: Appearance.font.size.normal
- horizontalPadding: Appearance.padding.normal
- verticalPadding: Appearance.padding.smaller
- tooltip: qsTr("Launcher settings")
+ ToggleButton {
+ toggled: !root.session.launcher.active
+ icon: "settings"
+ accent: "Primary"
+ iconSize: Appearance.font.size.normal
+ horizontalPadding: Appearance.padding.normal
+ verticalPadding: Appearance.padding.smaller
+ tooltip: qsTr("Launcher settings")
- onClicked: {
- if (root.session.launcher.active) {
- root.session.launcher.active = null;
- } else {
- if (root.filteredApps.length > 0) {
- root.session.launcher.active = root.filteredApps[0];
+ onClicked: {
+ if (root.session.launcher.active) {
+ root.session.launcher.active = null;
+ } else {
+ if (root.filteredApps.length > 0) {
+ root.session.launcher.active = root.filteredApps[0];
+ }
}
}
}
}
- }
- StyledText {
- Layout.topMargin: Appearance.spacing.large
- text: qsTr("Applications (%1)").arg(root.searchText ? root.filteredApps.length : allAppsDb.apps.length)
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
+ StyledText {
+ Layout.topMargin: Appearance.spacing.large
+ text: qsTr("Applications (%1)").arg(root.searchText ? root.filteredApps.length : allAppsDb.apps.length)
+ font.pointSize: Appearance.font.size.normal
+ font.weight: 500
+ }
- StyledText {
- text: qsTr("All applications available in the launcher")
- color: Colours.palette.m3outline
- }
+ StyledText {
+ text: qsTr("All applications available in the launcher")
+ color: Colours.palette.m3outline
+ }
- StyledRect {
- Layout.fillWidth: true
- Layout.topMargin: Appearance.spacing.normal
- Layout.bottomMargin: Appearance.spacing.small
+ StyledRect {
+ Layout.fillWidth: true
+ Layout.topMargin: Appearance.spacing.normal
+ Layout.bottomMargin: Appearance.spacing.small
- color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
- radius: Appearance.rounding.full
+ color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
+ radius: Appearance.rounding.full
- implicitHeight: Math.max(searchIcon.implicitHeight, searchField.implicitHeight, clearIcon.implicitHeight)
+ implicitHeight: Math.max(searchIcon.implicitHeight, searchField.implicitHeight, clearIcon.implicitHeight)
- MaterialIcon {
- id: searchIcon
+ MaterialIcon {
+ id: searchIcon
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: parent.left
- anchors.leftMargin: Appearance.padding.normal
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: Appearance.padding.normal
- text: "search"
- color: Colours.palette.m3onSurfaceVariant
- }
+ text: "search"
+ color: Colours.palette.m3onSurfaceVariant
+ }
- StyledTextField {
- id: searchField
+ StyledTextField {
+ id: searchField
- anchors.left: searchIcon.right
- anchors.right: clearIcon.left
- anchors.leftMargin: Appearance.spacing.small
- anchors.rightMargin: Appearance.spacing.small
+ anchors.left: searchIcon.right
+ anchors.right: clearIcon.left
+ anchors.leftMargin: Appearance.spacing.small
+ anchors.rightMargin: Appearance.spacing.small
- topPadding: Appearance.padding.normal
- bottomPadding: Appearance.padding.normal
+ topPadding: Appearance.padding.normal
+ bottomPadding: Appearance.padding.normal
- placeholderText: qsTr("Search applications...")
+ placeholderText: qsTr("Search applications...")
- onTextChanged: {
- root.searchText = text;
+ onTextChanged: {
+ root.searchText = text;
+ }
}
- }
- MaterialIcon {
- id: clearIcon
+ MaterialIcon {
+ id: clearIcon
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: parent.right
- anchors.rightMargin: Appearance.padding.normal
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: Appearance.padding.normal
- width: searchField.text ? implicitWidth : implicitWidth / 2
- opacity: {
- if (!searchField.text)
- return 0;
- if (clearMouse.pressed)
- return 0.7;
- if (clearMouse.containsMouse)
- return 0.8;
- return 1;
- }
+ width: searchField.text ? implicitWidth : implicitWidth / 2
+ opacity: {
+ if (!searchField.text)
+ return 0;
+ if (clearMouse.pressed)
+ return 0.7;
+ if (clearMouse.containsMouse)
+ return 0.8;
+ return 1;
+ }
- text: "close"
- color: Colours.palette.m3onSurfaceVariant
+ text: "close"
+ color: Colours.palette.m3onSurfaceVariant
- MouseArea {
- id: clearMouse
+ MouseArea {
+ id: clearMouse
- anchors.fill: parent
- hoverEnabled: true
- cursorShape: searchField.text ? Qt.PointingHandCursor : undefined
+ anchors.fill: parent
+ hoverEnabled: true
+ cursorShape: searchField.text ? Qt.PointingHandCursor : undefined
- onClicked: searchField.text = ""
- }
+ onClicked: searchField.text = ""
+ }
- Behavior on width {
- Anim {
- duration: Appearance.anim.durations.small
+ Behavior on width {
+ Anim {
+ duration: Appearance.anim.durations.small
+ }
}
- }
- Behavior on opacity {
- Anim {
- duration: Appearance.anim.durations.small
+ Behavior on opacity {
+ Anim {
+ duration: Appearance.anim.durations.small
+ }
}
}
}
- }
- Loader {
- id: appsListLoader
- Layout.fillWidth: true
- Layout.fillHeight: true
- active: true
-
- sourceComponent: StyledListView {
- id: appsListView
-
+ Loader {
+ id: appsListLoader
Layout.fillWidth: true
Layout.fillHeight: true
+ active: true
- model: root.filteredApps
- spacing: Appearance.spacing.small / 2
- clip: true
+ sourceComponent: StyledListView {
+ id: appsListView
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: parent
- }
+ Layout.fillWidth: true
+ Layout.fillHeight: true
- delegate: StyledRect {
- required property var modelData
+ model: root.filteredApps
+ spacing: Appearance.spacing.small / 2
+ clip: true
- width: parent ? parent.width : 0
+ StyledScrollBar.vertical: StyledScrollBar {
+ flickable: parent
+ }
- readonly property bool isSelected: root.selectedApp === modelData
+ delegate: StyledRect {
+ required property var modelData
- color: isSelected ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
- radius: Appearance.rounding.normal
+ width: parent ? parent.width : 0
- opacity: 0
+ readonly property bool isSelected: root.selectedApp === modelData
- Behavior on opacity {
- NumberAnimation {
- duration: 1000
- easing.type: Easing.OutCubic
+ color: isSelected ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
+ radius: Appearance.rounding.normal
+
+ opacity: 0
+
+ Behavior on opacity {
+ NumberAnimation {
+ duration: 1000
+ easing.type: Easing.OutCubic
+ }
}
- }
- Component.onCompleted: {
- opacity = 1;
- }
+ Component.onCompleted: {
+ opacity = 1;
+ }
- StateLayer {
- function onClicked(): void {
- root.session.launcher.active = modelData;
+ StateLayer {
+ function onClicked(): void {
+ root.session.launcher.active = modelData;
+ }
}
- }
- RowLayout {
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
+ RowLayout {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.normal
- spacing: Appearance.spacing.normal
+ spacing: Appearance.spacing.normal
- IconImage {
- Layout.alignment: Qt.AlignVCenter
- implicitSize: 32
- source: {
- const entry = modelData.entry;
- return entry ? Quickshell.iconPath(entry.icon, "image-missing") : "image-missing";
+ IconImage {
+ Layout.alignment: Qt.AlignVCenter
+ implicitSize: 32
+ source: {
+ const entry = modelData.entry;
+ return entry ? Quickshell.iconPath(entry.icon, "image-missing") : "image-missing";
+ }
}
- }
- StyledText {
- Layout.fillWidth: true
- text: modelData.name || modelData.entry?.name || qsTr("Unknown")
- font.pointSize: Appearance.font.size.normal
+ StyledText {
+ Layout.fillWidth: true
+ text: modelData.name || modelData.entry?.name || qsTr("Unknown")
+ font.pointSize: Appearance.font.size.normal
+ }
}
- }
- implicitHeight: 40
+ implicitHeight: 40
+ }
}
}
}
}
- }
rightContent: Component {
Item {
@@ -518,7 +515,8 @@ Item {
implicitSize: Appearance.font.size.extraLarge * 3 * 2
source: {
const app = appDetailsLayout.displayedApp;
- if (!app) return "image-missing";
+ if (!app)
+ return "image-missing";
const entry = app.entry;
if (entry && entry.icon) {
return Quickshell.iconPath(entry.icon, "image-missing");
@@ -561,35 +559,34 @@ Item {
anchors.top: parent.top
spacing: Appearance.spacing.normal
- SwitchRow {
- Layout.topMargin: Appearance.spacing.normal
- visible: appDetailsLayout.displayedApp !== null
- label: qsTr("Hide from launcher")
- checked: root.hideFromLauncherChecked
- enabled: appDetailsLayout.displayedApp !== null
- onToggled: checked => {
- root.hideFromLauncherChecked = checked;
- const app = appDetailsLayout.displayedApp;
- if (app) {
- const appId = app.id || app.entry?.id;
- const hiddenApps = Config.launcher.hiddenApps ? [...Config.launcher.hiddenApps] : [];
- if (checked) {
- if (!hiddenApps.includes(appId)) {
- hiddenApps.push(appId);
- }
- } else {
- const index = hiddenApps.indexOf(appId);
- if (index !== -1) {
- hiddenApps.splice(index, 1);
+ SwitchRow {
+ Layout.topMargin: Appearance.spacing.normal
+ visible: appDetailsLayout.displayedApp !== null
+ label: qsTr("Hide from launcher")
+ checked: root.hideFromLauncherChecked
+ enabled: appDetailsLayout.displayedApp !== null
+ onToggled: checked => {
+ root.hideFromLauncherChecked = checked;
+ const app = appDetailsLayout.displayedApp;
+ if (app) {
+ const appId = app.id || app.entry?.id;
+ const hiddenApps = Config.launcher.hiddenApps ? [...Config.launcher.hiddenApps] : [];
+ if (checked) {
+ if (!hiddenApps.includes(appId)) {
+ hiddenApps.push(appId);
+ }
+ } else {
+ const index = hiddenApps.indexOf(appId);
+ if (index !== -1) {
+ hiddenApps.splice(index, 1);
+ }
}
+ Config.launcher.hiddenApps = hiddenApps;
+ Config.save();
}
- Config.launcher.hiddenApps = hiddenApps;
- Config.save();
}
}
}
-
- }
}
}
}
diff --git a/modules/controlcenter/launcher/Settings.qml b/modules/controlcenter/launcher/Settings.qml
index 161221e..5eaf6e0 100644
--- a/modules/controlcenter/launcher/Settings.qml
+++ b/modules/controlcenter/launcher/Settings.qml
@@ -215,4 +215,3 @@ ColumnLayout {
}
}
}
-
diff --git a/modules/controlcenter/network/EthernetDetails.qml b/modules/controlcenter/network/EthernetDetails.qml
index 1cd6c0a..4e60b3d 100644
--- a/modules/controlcenter/network/EthernetDetails.qml
+++ b/modules/controlcenter/network/EthernetDetails.qml
@@ -16,7 +16,7 @@ DeviceDetails {
required property Session session
readonly property var ethernetDevice: root.session.ethernet.active
-
+
device: ethernetDevice
Component.onCompleted: {
diff --git a/modules/controlcenter/network/EthernetList.qml b/modules/controlcenter/network/EthernetList.qml
index 4f4dc8a..d1eb957 100644
--- a/modules/controlcenter/network/EthernetList.qml
+++ b/modules/controlcenter/network/EthernetList.qml
@@ -171,7 +171,7 @@ DeviceList {
}
}
- onItemSelected: function(item) {
+ onItemSelected: function (item) {
session.ethernet.active = item;
}
}
diff --git a/modules/controlcenter/network/EthernetPane.qml b/modules/controlcenter/network/EthernetPane.qml
index 126535a..59d82bb 100644
--- a/modules/controlcenter/network/EthernetPane.qml
+++ b/modules/controlcenter/network/EthernetPane.qml
@@ -16,7 +16,7 @@ SplitPaneWithDetails {
anchors.fill: parent
activeItem: session.ethernet.active
- paneIdGenerator: function(item) {
+ paneIdGenerator: function (item) {
return item ? (item.interface || "") : "";
}
diff --git a/modules/controlcenter/network/EthernetSettings.qml b/modules/controlcenter/network/EthernetSettings.qml
index f0f66b4..90bfcf4 100644
--- a/modules/controlcenter/network/EthernetSettings.qml
+++ b/modules/controlcenter/network/EthernetSettings.qml
@@ -73,4 +73,4 @@ ColumnLayout {
}
}
}
-} \ No newline at end of file
+}
diff --git a/modules/controlcenter/network/NetworkSettings.qml b/modules/controlcenter/network/NetworkSettings.qml
index 04746af..bda7cb1 100644
--- a/modules/controlcenter/network/NetworkSettings.qml
+++ b/modules/controlcenter/network/NetworkSettings.qml
@@ -138,30 +138,30 @@ ColumnLayout {
Popup {
id: vpnSettingsDialog
-
+
parent: Overlay.overlay
anchors.centerIn: parent
width: Math.min(600, parent.width - Appearance.padding.large * 2)
height: Math.min(700, parent.height - Appearance.padding.large * 2)
-
+
modal: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
-
+
background: StyledRect {
color: Colours.palette.m3surface
radius: Appearance.rounding.large
}
-
+
StyledFlickable {
anchors.fill: parent
anchors.margins: Appearance.padding.large * 1.5
flickableDirection: Flickable.VerticalFlick
contentHeight: vpnSettingsContent.height
clip: true
-
+
VpnSettings {
id: vpnSettingsContent
-
+
anchors.left: parent.left
anchors.right: parent.right
session: root.session
@@ -169,4 +169,3 @@ ColumnLayout {
}
}
}
-
diff --git a/modules/controlcenter/network/NetworkingPane.qml b/modules/controlcenter/network/NetworkingPane.qml
index 23e795e..26cdbfa 100644
--- a/modules/controlcenter/network/NetworkingPane.qml
+++ b/modules/controlcenter/network/NetworkingPane.qml
@@ -171,7 +171,7 @@ Item {
rightContent: Component {
Item {
id: rightPaneItem
-
+
property var vpnPane: root.session && root.session.vpn ? root.session.vpn.active : null
property var ethernetPane: root.session && root.session.ethernet ? root.session.ethernet.active : null
property var wirelessPane: root.session && root.session.network ? root.session.network.active : null
@@ -181,9 +181,12 @@ Item {
property Component nextComponent: settingsComponent
function getComponentForPane() {
- if (vpnPane) return vpnDetailsComponent;
- if (ethernetPane) return ethernetDetailsComponent;
- if (wirelessPane) return wirelessDetailsComponent;
+ if (vpnPane)
+ return vpnDetailsComponent;
+ if (ethernetPane)
+ return ethernetDetailsComponent;
+ if (wirelessPane)
+ return wirelessDetailsComponent;
return settingsComponent;
}
@@ -195,12 +198,14 @@ Item {
Connections {
target: root.session && root.session.vpn ? root.session.vpn : null
enabled: target !== null
-
+
function onActiveChanged() {
// Clear others when VPN is selected
if (root.session && root.session.vpn && root.session.vpn.active) {
- if (root.session.ethernet && root.session.ethernet.active) root.session.ethernet.active = null;
- if (root.session.network && root.session.network.active) root.session.network.active = null;
+ if (root.session.ethernet && root.session.ethernet.active)
+ root.session.ethernet.active = null;
+ if (root.session.network && root.session.network.active)
+ root.session.network.active = null;
}
rightPaneItem.nextComponent = rightPaneItem.getComponentForPane();
}
@@ -209,12 +214,14 @@ Item {
Connections {
target: root.session && root.session.ethernet ? root.session.ethernet : null
enabled: target !== null
-
+
function onActiveChanged() {
// Clear others when ethernet is selected
if (root.session && root.session.ethernet && root.session.ethernet.active) {
- if (root.session.vpn && root.session.vpn.active) root.session.vpn.active = null;
- if (root.session.network && root.session.network.active) root.session.network.active = null;
+ if (root.session.vpn && root.session.vpn.active)
+ root.session.vpn.active = null;
+ if (root.session.network && root.session.network.active)
+ root.session.network.active = null;
}
rightPaneItem.nextComponent = rightPaneItem.getComponentForPane();
}
@@ -223,12 +230,14 @@ Item {
Connections {
target: root.session && root.session.network ? root.session.network : null
enabled: target !== null
-
+
function onActiveChanged() {
// Clear others when wireless is selected
if (root.session && root.session.network && root.session.network.active) {
- if (root.session.vpn && root.session.vpn.active) root.session.vpn.active = null;
- if (root.session.ethernet && root.session.ethernet.active) root.session.ethernet.active = null;
+ if (root.session.vpn && root.session.vpn.active)
+ root.session.vpn.active = null;
+ if (root.session.ethernet && root.session.ethernet.active)
+ root.session.ethernet.active = null;
}
rightPaneItem.nextComponent = rightPaneItem.getComponentForPane();
}
diff --git a/modules/controlcenter/network/VpnSettings.qml b/modules/controlcenter/network/VpnSettings.qml
index 7387ddc..49d801d 100644
--- a/modules/controlcenter/network/VpnSettings.qml
+++ b/modules/controlcenter/network/VpnSettings.qml
@@ -54,17 +54,17 @@ ColumnLayout {
ListView {
Layout.fillWidth: true
Layout.preferredHeight: contentHeight
-
+
interactive: false
spacing: Appearance.spacing.smaller
-
+
model: ScriptModel {
values: Config.utilities.vpn.provider.map((provider, index) => {
const isObject = typeof provider === "object";
const name = isObject ? (provider.name || "custom") : String(provider);
const displayName = isObject ? (provider.displayName || name) : name;
const iface = isObject ? (provider.interface || "") : "";
-
+
return {
index: index,
name: name,
diff --git a/modules/controlcenter/network/WirelessDetails.qml b/modules/controlcenter/network/WirelessDetails.qml
index 47d42c2..e8777cd 100644
--- a/modules/controlcenter/network/WirelessDetails.qml
+++ b/modules/controlcenter/network/WirelessDetails.qml
@@ -18,7 +18,7 @@ DeviceDetails {
required property Session session
readonly property var network: root.session.network.active
-
+
device: network
Component.onCompleted: {
@@ -66,8 +66,7 @@ DeviceDetails {
const isActive = network.active || (Nmcli.active && Nmcli.active.ssid === network.ssid);
if (isActive) {
if (!Nmcli.wirelessDeviceDetails || Nmcli.wirelessDeviceDetails === null) {
- Nmcli.getWirelessDeviceDetails("", () => {
- });
+ Nmcli.getWirelessDeviceDetails("", () => {});
} else {
connectionUpdateTimer.stop();
}
diff --git a/modules/controlcenter/network/WirelessList.qml b/modules/controlcenter/network/WirelessList.qml
index 8159291..57a155f 100644
--- a/modules/controlcenter/network/WirelessList.qml
+++ b/modules/controlcenter/network/WirelessList.qml
@@ -22,7 +22,7 @@ DeviceList {
title: qsTr("Networks (%1)").arg(Nmcli.networks.length)
description: qsTr("All available WiFi networks")
activeItem: session.network.active
-
+
titleSuffix: Component {
StyledText {
visible: Nmcli.scanning
@@ -165,11 +165,13 @@ DeviceList {
StyledText {
Layout.fillWidth: true
text: {
- if (modelData.active) return qsTr("Connected");
+ if (modelData.active)
+ return qsTr("Connected");
if (modelData.isSecure && modelData.security && modelData.security.length > 0) {
return modelData.security;
}
- if (modelData.isSecure) return qsTr("Secured");
+ if (modelData.isSecure)
+ return qsTr("Secured");
return qsTr("Open");
}
color: modelData.active ? Colours.palette.m3primary : Colours.palette.m3outline
@@ -211,7 +213,7 @@ DeviceList {
}
}
- onItemSelected: function(item) {
+ onItemSelected: function (item) {
session.network.active = item;
if (item && item.ssid) {
checkSavedProfileForNetwork(item.ssid);
diff --git a/modules/controlcenter/network/WirelessPane.qml b/modules/controlcenter/network/WirelessPane.qml
index 109d416..8150af9 100644
--- a/modules/controlcenter/network/WirelessPane.qml
+++ b/modules/controlcenter/network/WirelessPane.qml
@@ -16,7 +16,7 @@ SplitPaneWithDetails {
anchors.fill: parent
activeItem: session.network.active
- paneIdGenerator: function(item) {
+ paneIdGenerator: function (item) {
return item ? (item.ssid || item.bssid || "") : "";
}
diff --git a/modules/controlcenter/network/WirelessPasswordDialog.qml b/modules/controlcenter/network/WirelessPasswordDialog.qml
index 7c046af..7ad5204 100644
--- a/modules/controlcenter/network/WirelessPasswordDialog.qml
+++ b/modules/controlcenter/network/WirelessPasswordDialog.qml
@@ -384,8 +384,7 @@ Item {
text = qsTr("Connecting...");
NetworkConnection.connectWithPassword(root.network, password, result => {
- if (result && result.success) {
- } else if (result && result.needsPassword) {
+ if (result && result.success) {} else if (result && result.needsPassword) {
connectionMonitor.stop();
connecting = false;
hasError = true;
diff --git a/modules/controlcenter/network/WirelessSettings.qml b/modules/controlcenter/network/WirelessSettings.qml
index f87fe39..b4eb391 100644
--- a/modules/controlcenter/network/WirelessSettings.qml
+++ b/modules/controlcenter/network/WirelessSettings.qml
@@ -70,4 +70,4 @@ ColumnLayout {
value: Nmcli.active ? qsTr("%1 MHz").arg(Nmcli.active.frequency) : qsTr("N/A")
}
}
-} \ No newline at end of file
+}
diff --git a/modules/controlcenter/state/BluetoothState.qml b/modules/controlcenter/state/BluetoothState.qml
index 00497ce..8678672 100644
--- a/modules/controlcenter/state/BluetoothState.qml
+++ b/modules/controlcenter/state/BluetoothState.qml
@@ -10,4 +10,3 @@ QtObject {
property bool fabMenuOpen: false
property bool editingDeviceName: false
}
-
diff --git a/modules/controlcenter/state/EthernetState.qml b/modules/controlcenter/state/EthernetState.qml
index c5da7aa..58f5fc8 100644
--- a/modules/controlcenter/state/EthernetState.qml
+++ b/modules/controlcenter/state/EthernetState.qml
@@ -5,4 +5,3 @@ QtObject {
property var active: null
}
-
diff --git a/modules/controlcenter/state/LauncherState.qml b/modules/controlcenter/state/LauncherState.qml
index c5da7aa..58f5fc8 100644
--- a/modules/controlcenter/state/LauncherState.qml
+++ b/modules/controlcenter/state/LauncherState.qml
@@ -5,4 +5,3 @@ QtObject {
property var active: null
}
-
diff --git a/modules/controlcenter/state/NetworkState.qml b/modules/controlcenter/state/NetworkState.qml
index da13e65..f9324c8 100644
--- a/modules/controlcenter/state/NetworkState.qml
+++ b/modules/controlcenter/state/NetworkState.qml
@@ -7,4 +7,3 @@ QtObject {
property bool showPasswordDialog: false
property var pendingNetwork: null
}
-
diff --git a/modules/controlcenter/taskbar/ConnectedButtonGroup.qml b/modules/controlcenter/taskbar/ConnectedButtonGroup.qml
index bf3a97f..01cd612 100644
--- a/modules/controlcenter/taskbar/ConnectedButtonGroup.qml
+++ b/modules/controlcenter/taskbar/ConnectedButtonGroup.qml
@@ -53,9 +53,9 @@ StyledRect {
Layout.fillWidth: true
text: modelData.label
-
+
property bool _checked: false
-
+
checked: _checked
toggle: false
type: TextButton.Tonal
@@ -65,7 +65,7 @@ StyledRect {
if (root.rootItem && modelData.propertyName) {
const propName = modelData.propertyName;
const rootItem = root.rootItem;
- _checked = Qt.binding(function() {
+ _checked = Qt.binding(function () {
return rootItem[propName] ?? false;
});
}
@@ -77,7 +77,7 @@ StyledRect {
// Match utilities Toggles inactive color
inactiveColour: Colours.layer(Colours.palette.m3surfaceContainerHighest, 2)
-
+
// Adjust width similar to utilities toggles
Layout.preferredWidth: implicitWidth + (stateLayer.pressed ? Appearance.padding.large : internalChecked ? Appearance.padding.smaller : 0)
@@ -106,4 +106,3 @@ StyledRect {
}
}
}
-
diff --git a/modules/controlcenter/taskbar/TaskbarPane.qml b/modules/controlcenter/taskbar/TaskbarPane.qml
index 917b73a..d12d174 100644
--- a/modules/controlcenter/taskbar/TaskbarPane.qml
+++ b/modules/controlcenter/taskbar/TaskbarPane.qml
@@ -183,7 +183,7 @@ Item {
{
label: qsTr("Speakers"),
propertyName: "showAudio",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.showAudio = checked;
root.saveConfig();
}
@@ -191,7 +191,7 @@ Item {
{
label: qsTr("Microphone"),
propertyName: "showMicrophone",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.showMicrophone = checked;
root.saveConfig();
}
@@ -199,7 +199,7 @@ Item {
{
label: qsTr("Keyboard"),
propertyName: "showKbLayout",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.showKbLayout = checked;
root.saveConfig();
}
@@ -207,7 +207,7 @@ Item {
{
label: qsTr("Network"),
propertyName: "showNetwork",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.showNetwork = checked;
root.saveConfig();
}
@@ -215,7 +215,7 @@ Item {
{
label: qsTr("Wifi"),
propertyName: "showWifi",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.showWifi = checked;
root.saveConfig();
}
@@ -223,7 +223,7 @@ Item {
{
label: qsTr("Bluetooth"),
propertyName: "showBluetooth",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.showBluetooth = checked;
root.saveConfig();
}
@@ -231,7 +231,7 @@ Item {
{
label: qsTr("Battery"),
propertyName: "showBattery",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.showBattery = checked;
root.saveConfig();
}
@@ -239,7 +239,7 @@ Item {
{
label: qsTr("Capslock"),
propertyName: "showLockStatus",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.showLockStatus = checked;
root.saveConfig();
}
@@ -268,173 +268,173 @@ Item {
font.pointSize: Appearance.font.size.normal
}
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: workspacesShownRow.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
+ StyledRect {
+ Layout.fillWidth: true
+ implicitHeight: workspacesShownRow.implicitHeight + Appearance.padding.large * 2
+ radius: Appearance.rounding.normal
+ color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
- Behavior on implicitHeight {
- Anim {}
- }
+ Behavior on implicitHeight {
+ Anim {}
+ }
- RowLayout {
- id: workspacesShownRow
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
+ RowLayout {
+ id: workspacesShownRow
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.large
+ spacing: Appearance.spacing.normal
- StyledText {
- Layout.fillWidth: true
- text: qsTr("Shown")
- }
+ StyledText {
+ Layout.fillWidth: true
+ text: qsTr("Shown")
+ }
- CustomSpinBox {
- min: 1
- max: 20
- value: root.workspacesShown
- onValueModified: value => {
- root.workspacesShown = value;
- root.saveConfig();
+ CustomSpinBox {
+ min: 1
+ max: 20
+ value: root.workspacesShown
+ onValueModified: value => {
+ root.workspacesShown = value;
+ root.saveConfig();
+ }
}
}
}
- }
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: workspacesActiveIndicatorRow.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
+ StyledRect {
+ Layout.fillWidth: true
+ implicitHeight: workspacesActiveIndicatorRow.implicitHeight + Appearance.padding.large * 2
+ radius: Appearance.rounding.normal
+ color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
- Behavior on implicitHeight {
- Anim {}
- }
+ Behavior on implicitHeight {
+ Anim {}
+ }
- RowLayout {
- id: workspacesActiveIndicatorRow
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
+ RowLayout {
+ id: workspacesActiveIndicatorRow
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.large
+ spacing: Appearance.spacing.normal
- StyledText {
- Layout.fillWidth: true
- text: qsTr("Active indicator")
- }
+ StyledText {
+ Layout.fillWidth: true
+ text: qsTr("Active indicator")
+ }
- StyledSwitch {
- checked: root.workspacesActiveIndicator
- onToggled: {
- root.workspacesActiveIndicator = checked;
- root.saveConfig();
+ StyledSwitch {
+ checked: root.workspacesActiveIndicator
+ onToggled: {
+ root.workspacesActiveIndicator = checked;
+ root.saveConfig();
+ }
}
}
}
- }
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: workspacesOccupiedBgRow.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
+ StyledRect {
+ Layout.fillWidth: true
+ implicitHeight: workspacesOccupiedBgRow.implicitHeight + Appearance.padding.large * 2
+ radius: Appearance.rounding.normal
+ color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
- Behavior on implicitHeight {
- Anim {}
- }
+ Behavior on implicitHeight {
+ Anim {}
+ }
- RowLayout {
- id: workspacesOccupiedBgRow
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
+ RowLayout {
+ id: workspacesOccupiedBgRow
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.large
+ spacing: Appearance.spacing.normal
- StyledText {
- Layout.fillWidth: true
- text: qsTr("Occupied background")
- }
+ StyledText {
+ Layout.fillWidth: true
+ text: qsTr("Occupied background")
+ }
- StyledSwitch {
- checked: root.workspacesOccupiedBg
- onToggled: {
- root.workspacesOccupiedBg = checked;
- root.saveConfig();
+ StyledSwitch {
+ checked: root.workspacesOccupiedBg
+ onToggled: {
+ root.workspacesOccupiedBg = checked;
+ root.saveConfig();
+ }
}
}
}
- }
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: workspacesShowWindowsRow.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
+ StyledRect {
+ Layout.fillWidth: true
+ implicitHeight: workspacesShowWindowsRow.implicitHeight + Appearance.padding.large * 2
+ radius: Appearance.rounding.normal
+ color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
- Behavior on implicitHeight {
- Anim {}
- }
+ Behavior on implicitHeight {
+ Anim {}
+ }
- RowLayout {
- id: workspacesShowWindowsRow
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
+ RowLayout {
+ id: workspacesShowWindowsRow
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.large
+ spacing: Appearance.spacing.normal
- StyledText {
- Layout.fillWidth: true
- text: qsTr("Show windows")
- }
+ StyledText {
+ Layout.fillWidth: true
+ text: qsTr("Show windows")
+ }
- StyledSwitch {
- checked: root.workspacesShowWindows
- onToggled: {
- root.workspacesShowWindows = checked;
- root.saveConfig();
+ StyledSwitch {
+ checked: root.workspacesShowWindows
+ onToggled: {
+ root.workspacesShowWindows = checked;
+ root.saveConfig();
+ }
}
}
}
- }
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: workspacesPerMonitorRow.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
+ StyledRect {
+ Layout.fillWidth: true
+ implicitHeight: workspacesPerMonitorRow.implicitHeight + Appearance.padding.large * 2
+ radius: Appearance.rounding.normal
+ color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
- Behavior on implicitHeight {
- Anim {}
- }
+ Behavior on implicitHeight {
+ Anim {}
+ }
- RowLayout {
- id: workspacesPerMonitorRow
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
+ RowLayout {
+ id: workspacesPerMonitorRow
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.large
+ spacing: Appearance.spacing.normal
- StyledText {
- Layout.fillWidth: true
- text: qsTr("Per monitor workspaces")
- }
+ StyledText {
+ Layout.fillWidth: true
+ text: qsTr("Per monitor workspaces")
+ }
- StyledSwitch {
- checked: root.workspacesPerMonitor
- onToggled: {
- root.workspacesPerMonitor = checked;
- root.saveConfig();
+ StyledSwitch {
+ checked: root.workspacesPerMonitor
+ onToggled: {
+ root.workspacesPerMonitor = checked;
+ root.saveConfig();
+ }
}
}
}
}
- }
SectionContainer {
Layout.fillWidth: true
@@ -452,7 +452,7 @@ Item {
{
label: qsTr("Workspaces"),
propertyName: "scrollWorkspaces",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.scrollWorkspaces = checked;
root.saveConfig();
}
@@ -460,7 +460,7 @@ Item {
{
label: qsTr("Volume"),
propertyName: "scrollVolume",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.scrollVolume = checked;
root.saveConfig();
}
@@ -468,7 +468,7 @@ Item {
{
label: qsTr("Brightness"),
propertyName: "scrollBrightness",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.scrollBrightness = checked;
root.saveConfig();
}
@@ -541,11 +541,14 @@ Item {
from: 0
to: 100
suffix: "px"
- validator: IntValidator { bottom: 0; top: 100 }
- formatValueFunction: (val) => Math.round(val).toString()
- parseValueFunction: (text) => parseInt(text)
+ validator: IntValidator {
+ bottom: 0
+ top: 100
+ }
+ formatValueFunction: val => Math.round(val).toString()
+ parseValueFunction: text => parseInt(text)
- onValueModified: (newValue) => {
+ onValueModified: newValue => {
root.dragThreshold = Math.round(newValue);
root.saveConfig();
}
@@ -613,7 +616,7 @@ Item {
{
label: qsTr("Background"),
propertyName: "trayBackground",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.trayBackground = checked;
root.saveConfig();
}
@@ -621,7 +624,7 @@ Item {
{
label: qsTr("Compact"),
propertyName: "trayCompact",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.trayCompact = checked;
root.saveConfig();
}
@@ -629,7 +632,7 @@ Item {
{
label: qsTr("Recolour"),
propertyName: "trayRecolour",
- onToggled: function(checked) {
+ onToggled: function (checked) {
root.trayRecolour = checked;
root.saveConfig();
}
@@ -639,7 +642,6 @@ Item {
}
}
}
-
}
}
}