utilities: allow disabling and moving toggles + support for extra row (#1181)
* quickToggles: Allow disabling and moving toggles and support for extra row * edit: README * splitIndex logic edit * fix --------- Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
This commit is contained in:
parent
63c86e950b
commit
4c93de1513
4 changed files with 174 additions and 55 deletions
30
README.md
30
README.md
|
|
@ -661,7 +661,37 @@ default, you must create it manually.
|
||||||
"enabled": false
|
"enabled": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"quickToggles": [
|
||||||
|
{
|
||||||
|
"id": "wifi",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bluetooth",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "mic",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"id": "settings"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "gameMode",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dnd",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vpn",
|
||||||
|
"enabled": true
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -334,7 +334,8 @@ Singleton {
|
||||||
vpn: {
|
vpn: {
|
||||||
enabled: utilities.vpn.enabled,
|
enabled: utilities.vpn.enabled,
|
||||||
provider: utilities.vpn.provider
|
provider: utilities.vpn.provider
|
||||||
}
|
},
|
||||||
|
quickToggles: utilities.quickToggles
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,4 +32,35 @@ JsonObject {
|
||||||
property bool enabled: false
|
property bool enabled: false
|
||||||
property list<var> provider: ["netbird"]
|
property list<var> provider: ["netbird"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
property list<var> quickToggles: [
|
||||||
|
{
|
||||||
|
id: "wifi",
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "bluetooth",
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "mic",
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "settings",
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "gameMode",
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "dnd",
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "vpn",
|
||||||
|
enabled: false
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,30 @@ StyledRect {
|
||||||
required property var visibilities
|
required property var visibilities
|
||||||
required property Item popouts
|
required property Item popouts
|
||||||
|
|
||||||
|
readonly property var quickToggles: {
|
||||||
|
const seenIds = new Set();
|
||||||
|
|
||||||
|
return Config.utilities.quickToggles.filter(item => {
|
||||||
|
if (!item.enabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (seenIds.has(item.id)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.id === "vpn") {
|
||||||
|
return Config.utilities.vpn.provider.some(p =>
|
||||||
|
typeof p === "object" ? (p.enabled === true) : false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
seenIds.add(item.id);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
readonly property int splitIndex: Math.ceil(quickToggles.length / 2)
|
||||||
|
readonly property bool needExtraRow: quickToggles.length > 6
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
implicitHeight: layout.implicitHeight + Appearance.padding.large * 2
|
implicitHeight: layout.implicitHeight + Appearance.padding.large * 2
|
||||||
|
|
||||||
|
|
@ -32,17 +56,39 @@ StyledRect {
|
||||||
font.pointSize: Appearance.font.size.normal
|
font.pointSize: Appearance.font.size.normal
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
ToggleRow {
|
||||||
Layout.alignment: Qt.AlignHCenter
|
rowModel: root.needExtraRow ? root.quickToggles.slice(0, root.splitIndex) : root.quickToggles
|
||||||
|
}
|
||||||
|
|
||||||
|
ToggleRow {
|
||||||
|
visible: root.needExtraRow
|
||||||
|
rowModel: root.needExtraRow ? root.quickToggles.slice(root.splitIndex) : []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
component ToggleRow: RowLayout {
|
||||||
|
property var rowModel: []
|
||||||
|
|
||||||
|
Layout.fillWidth: true
|
||||||
spacing: Appearance.spacing.small
|
spacing: Appearance.spacing.small
|
||||||
|
|
||||||
Toggle {
|
Repeater {
|
||||||
|
model: parent.rowModel
|
||||||
|
|
||||||
|
delegate: DelegateChooser {
|
||||||
|
role: "id"
|
||||||
|
|
||||||
|
DelegateChoice {
|
||||||
|
roleValue: "wifi"
|
||||||
|
delegate: Toggle {
|
||||||
icon: "wifi"
|
icon: "wifi"
|
||||||
checked: Nmcli.wifiEnabled
|
checked: Nmcli.wifiEnabled
|
||||||
onClicked: Nmcli.toggleWifi()
|
onClicked: Nmcli.toggleWifi()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Toggle {
|
DelegateChoice {
|
||||||
|
roleValue: "bluetooth"
|
||||||
|
delegate: Toggle {
|
||||||
icon: "bluetooth"
|
icon: "bluetooth"
|
||||||
checked: Bluetooth.defaultAdapter?.enabled ?? false
|
checked: Bluetooth.defaultAdapter?.enabled ?? false
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
|
@ -51,8 +97,10 @@ StyledRect {
|
||||||
adapter.enabled = !adapter.enabled;
|
adapter.enabled = !adapter.enabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Toggle {
|
DelegateChoice {
|
||||||
|
roleValue: "mic"
|
||||||
|
delegate: Toggle {
|
||||||
icon: "mic"
|
icon: "mic"
|
||||||
checked: !Audio.sourceMuted
|
checked: !Audio.sourceMuted
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
|
@ -61,8 +109,10 @@ StyledRect {
|
||||||
audio.muted = !audio.muted;
|
audio.muted = !audio.muted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Toggle {
|
DelegateChoice {
|
||||||
|
roleValue: "settings"
|
||||||
|
delegate: Toggle {
|
||||||
icon: "settings"
|
icon: "settings"
|
||||||
inactiveOnColour: Colours.palette.m3onSurfaceVariant
|
inactiveOnColour: Colours.palette.m3onSurfaceVariant
|
||||||
toggle: false
|
toggle: false
|
||||||
|
|
@ -71,28 +121,35 @@ StyledRect {
|
||||||
root.popouts.detach("network");
|
root.popouts.detach("network");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Toggle {
|
DelegateChoice {
|
||||||
|
roleValue: "gameMode"
|
||||||
|
delegate: Toggle {
|
||||||
icon: "gamepad"
|
icon: "gamepad"
|
||||||
checked: GameMode.enabled
|
checked: GameMode.enabled
|
||||||
onClicked: GameMode.enabled = !GameMode.enabled
|
onClicked: GameMode.enabled = !GameMode.enabled
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Toggle {
|
DelegateChoice {
|
||||||
|
roleValue: "dnd"
|
||||||
|
delegate: Toggle {
|
||||||
icon: "notifications_off"
|
icon: "notifications_off"
|
||||||
checked: Notifs.dnd
|
checked: Notifs.dnd
|
||||||
onClicked: Notifs.dnd = !Notifs.dnd
|
onClicked: Notifs.dnd = !Notifs.dnd
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Toggle {
|
DelegateChoice {
|
||||||
|
roleValue: "vpn"
|
||||||
|
delegate: Toggle {
|
||||||
icon: "vpn_key"
|
icon: "vpn_key"
|
||||||
checked: VPN.connected
|
checked: VPN.connected
|
||||||
enabled: !VPN.connecting
|
enabled: !VPN.connecting
|
||||||
visible: Config.utilities.vpn.provider.some(p => typeof p === "object" ? (p.enabled === true) : false)
|
|
||||||
onClicked: VPN.toggle()
|
onClicked: VPN.toggle()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
component Toggle: IconButton {
|
component Toggle: IconButton {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue