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
|
||||
}
|
||||
]
|
||||
},
|
||||
"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: {
|
||||
enabled: utilities.vpn.enabled,
|
||||
provider: utilities.vpn.provider
|
||||
}
|
||||
},
|
||||
quickToggles: utilities.quickToggles
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,4 +32,35 @@ JsonObject {
|
|||
property bool enabled: false
|
||||
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 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
|
||||
implicitHeight: layout.implicitHeight + Appearance.padding.large * 2
|
||||
|
||||
|
|
@ -32,17 +56,39 @@ StyledRect {
|
|||
font.pointSize: Appearance.font.size.normal
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
ToggleRow {
|
||||
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
|
||||
|
||||
Toggle {
|
||||
Repeater {
|
||||
model: parent.rowModel
|
||||
|
||||
delegate: DelegateChooser {
|
||||
role: "id"
|
||||
|
||||
DelegateChoice {
|
||||
roleValue: "wifi"
|
||||
delegate: Toggle {
|
||||
icon: "wifi"
|
||||
checked: Nmcli.wifiEnabled
|
||||
onClicked: Nmcli.toggleWifi()
|
||||
}
|
||||
|
||||
Toggle {
|
||||
}
|
||||
DelegateChoice {
|
||||
roleValue: "bluetooth"
|
||||
delegate: Toggle {
|
||||
icon: "bluetooth"
|
||||
checked: Bluetooth.defaultAdapter?.enabled ?? false
|
||||
onClicked: {
|
||||
|
|
@ -51,8 +97,10 @@ StyledRect {
|
|||
adapter.enabled = !adapter.enabled;
|
||||
}
|
||||
}
|
||||
|
||||
Toggle {
|
||||
}
|
||||
DelegateChoice {
|
||||
roleValue: "mic"
|
||||
delegate: Toggle {
|
||||
icon: "mic"
|
||||
checked: !Audio.sourceMuted
|
||||
onClicked: {
|
||||
|
|
@ -61,8 +109,10 @@ StyledRect {
|
|||
audio.muted = !audio.muted;
|
||||
}
|
||||
}
|
||||
|
||||
Toggle {
|
||||
}
|
||||
DelegateChoice {
|
||||
roleValue: "settings"
|
||||
delegate: Toggle {
|
||||
icon: "settings"
|
||||
inactiveOnColour: Colours.palette.m3onSurfaceVariant
|
||||
toggle: false
|
||||
|
|
@ -71,28 +121,35 @@ StyledRect {
|
|||
root.popouts.detach("network");
|
||||
}
|
||||
}
|
||||
|
||||
Toggle {
|
||||
}
|
||||
DelegateChoice {
|
||||
roleValue: "gameMode"
|
||||
delegate: Toggle {
|
||||
icon: "gamepad"
|
||||
checked: GameMode.enabled
|
||||
onClicked: GameMode.enabled = !GameMode.enabled
|
||||
}
|
||||
|
||||
Toggle {
|
||||
}
|
||||
DelegateChoice {
|
||||
roleValue: "dnd"
|
||||
delegate: Toggle {
|
||||
icon: "notifications_off"
|
||||
checked: Notifs.dnd
|
||||
onClicked: Notifs.dnd = !Notifs.dnd
|
||||
}
|
||||
|
||||
Toggle {
|
||||
}
|
||||
DelegateChoice {
|
||||
roleValue: "vpn"
|
||||
delegate: Toggle {
|
||||
icon: "vpn_key"
|
||||
checked: VPN.connected
|
||||
enabled: !VPN.connecting
|
||||
visible: Config.utilities.vpn.provider.some(p => typeof p === "object" ? (p.enabled === true) : false)
|
||||
onClicked: VPN.toggle()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
component Toggle: IconButton {
|
||||
Layout.fillWidth: true
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue