mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-25 05:52:50 -05:00
Add VPN widget for control center
This commit is contained in:
@@ -2,6 +2,7 @@ import QtQuick
|
||||
import qs.Common
|
||||
import qs.Services
|
||||
import qs.Modules.ControlCenter.Details
|
||||
import qs.Modules.ControlCenter.Models
|
||||
|
||||
Item {
|
||||
id: root
|
||||
@@ -11,6 +12,7 @@ Item {
|
||||
property var bluetoothCodecSelector: null
|
||||
|
||||
property var pluginDetailInstance: null
|
||||
property var widgetModel: null
|
||||
|
||||
Loader {
|
||||
id: pluginDetailLoader
|
||||
@@ -42,6 +44,23 @@ Item {
|
||||
return
|
||||
}
|
||||
|
||||
if (root.expandedSection.startsWith("builtin_")) {
|
||||
const builtinId = root.expandedSection
|
||||
let builtinInstance = null
|
||||
|
||||
if (builtinId === "builtin_vpn" && widgetModel?.vpnBuiltinInstance) {
|
||||
builtinInstance = widgetModel.vpnBuiltinInstance
|
||||
}
|
||||
|
||||
if (!builtinInstance || !builtinInstance.ccDetailContent) {
|
||||
return
|
||||
}
|
||||
|
||||
pluginDetailLoader.sourceComponent = builtinInstance.ccDetailContent
|
||||
pluginDetailLoader.active = parent.height > 0
|
||||
return
|
||||
}
|
||||
|
||||
if (root.expandedSection.startsWith("plugin_")) {
|
||||
const pluginId = root.expandedSection.replace("plugin_", "")
|
||||
const pluginComponent = PluginService.pluginWidgetComponents[pluginId]
|
||||
|
||||
@@ -62,7 +62,8 @@ Column {
|
||||
property var rowWidgets: modelData
|
||||
property bool isSliderOnlyRow: {
|
||||
const widgets = rowWidgets || []
|
||||
if (widgets.length === 0) return false
|
||||
if (widgets.length === 0)
|
||||
return false
|
||||
return widgets.every(w => w.id === "volumeSlider" || w.id === "brightnessSlider" || w.id === "inputVolumeSlider")
|
||||
}
|
||||
topPadding: isSliderOnlyRow ? (root.editMode ? 4 : -6) : 0
|
||||
@@ -121,7 +122,9 @@ Column {
|
||||
|
||||
widgetComponent: {
|
||||
const id = modelData.id || ""
|
||||
if (id.startsWith("plugin_")) {
|
||||
if (id.startsWith("builtin_")) {
|
||||
return builtinPluginWidgetComponent
|
||||
} else if (id.startsWith("plugin_")) {
|
||||
return pluginWidgetComponent
|
||||
} else if (id === "wifi" || id === "bluetooth" || id === "audioOutput" || id === "audioInput") {
|
||||
return compoundPillComponent
|
||||
@@ -153,7 +156,8 @@ Column {
|
||||
width: parent.width
|
||||
height: active ? (250 + Theme.spacingS) : 0
|
||||
property bool active: {
|
||||
if (root.expandedSection === "") return false
|
||||
if (root.expandedSection === "")
|
||||
return false
|
||||
|
||||
if (root.expandedSection.startsWith("diskUsage_") && root.expandedWidgetData) {
|
||||
const expandedInstanceId = root.expandedWidgetData.instanceId
|
||||
@@ -166,6 +170,7 @@ Column {
|
||||
expandedSection: root.expandedSection
|
||||
expandedWidgetData: root.expandedWidgetData
|
||||
bluetoothCodecSelector: root.bluetoothCodecSelector
|
||||
widgetModel: root.model
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -347,7 +352,8 @@ Column {
|
||||
}
|
||||
enabled: widgetDef?.enabled ?? true
|
||||
onToggled: {
|
||||
if (root.editMode) return
|
||||
if (root.editMode)
|
||||
return
|
||||
switch (widgetData.id || "") {
|
||||
case "wifi":
|
||||
{
|
||||
@@ -380,11 +386,13 @@ Column {
|
||||
}
|
||||
}
|
||||
onExpandClicked: {
|
||||
if (root.editMode) return
|
||||
if (root.editMode)
|
||||
return
|
||||
root.expandClicked(widgetData, widgetIndex)
|
||||
}
|
||||
onWheelEvent: function (wheelEvent) {
|
||||
if (root.editMode) return
|
||||
if (root.editMode)
|
||||
return
|
||||
const id = widgetData.id || ""
|
||||
if (id === "audioOutput") {
|
||||
if (!AudioService.sink || !AudioService.sink.audio)
|
||||
@@ -539,7 +547,8 @@ Column {
|
||||
}
|
||||
|
||||
iconRotation: {
|
||||
if (widgetData.id !== "darkMode") return 0
|
||||
if (widgetData.id !== "darkMode")
|
||||
return 0
|
||||
if (darkModeTransitionPending) {
|
||||
return SessionData.isLightMode ? 180 : 0
|
||||
}
|
||||
@@ -561,7 +570,7 @@ Column {
|
||||
}
|
||||
}
|
||||
|
||||
enabled: !root.editMode
|
||||
enabled: !root.editMode
|
||||
|
||||
onClicked: {
|
||||
if (root.editMode)
|
||||
@@ -617,7 +626,8 @@ enabled: !root.editMode
|
||||
}
|
||||
|
||||
iconRotation: {
|
||||
if (widgetData.id !== "darkMode") return 0
|
||||
if (widgetData.id !== "darkMode")
|
||||
return 0
|
||||
if (darkModeTransitionPending) {
|
||||
return SessionData.isLightMode ? 180 : 0
|
||||
}
|
||||
@@ -639,7 +649,7 @@ enabled: !root.editMode
|
||||
}
|
||||
}
|
||||
|
||||
enabled: !root.editMode
|
||||
enabled: !root.editMode
|
||||
|
||||
onClicked: {
|
||||
if (root.editMode)
|
||||
@@ -702,6 +712,111 @@ enabled: !root.editMode
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: builtinPluginWidgetComponent
|
||||
Loader {
|
||||
property var widgetData: parent.widgetData || {}
|
||||
property int widgetIndex: parent.widgetIndex || 0
|
||||
property int widgetWidth: widgetData.width || 50
|
||||
width: parent.width
|
||||
height: 60
|
||||
|
||||
property var builtinInstance: {
|
||||
const id = widgetData.id || ""
|
||||
if (id === "builtin_vpn") {
|
||||
return root.model?.vpnBuiltinInstance
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
sourceComponent: {
|
||||
if (!builtinInstance)
|
||||
return null
|
||||
|
||||
const hasDetail = builtinInstance.ccDetailContent !== null
|
||||
|
||||
if (widgetWidth <= 25) {
|
||||
return builtinSmallToggleComponent
|
||||
} else if (hasDetail) {
|
||||
return builtinCompoundPillComponent
|
||||
} else {
|
||||
return builtinToggleComponent
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: builtinCompoundPillComponent
|
||||
CompoundPill {
|
||||
property var widgetData: parent.widgetData || {}
|
||||
property int widgetIndex: parent.widgetIndex || 0
|
||||
property var builtinInstance: parent.builtinInstance
|
||||
|
||||
iconName: builtinInstance?.ccWidgetIcon || "extension"
|
||||
primaryText: builtinInstance?.ccWidgetPrimaryText || "Built-in"
|
||||
secondaryText: builtinInstance?.ccWidgetSecondaryText || ""
|
||||
isActive: builtinInstance?.ccWidgetIsActive || false
|
||||
|
||||
onToggled: {
|
||||
if (root.editMode)
|
||||
return
|
||||
if (builtinInstance) {
|
||||
builtinInstance.ccWidgetToggled()
|
||||
}
|
||||
}
|
||||
|
||||
onExpandClicked: {
|
||||
if (root.editMode)
|
||||
return
|
||||
root.expandClicked(widgetData, widgetIndex)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: builtinToggleComponent
|
||||
ToggleButton {
|
||||
property var widgetData: parent.widgetData || {}
|
||||
property int widgetIndex: parent.widgetIndex || 0
|
||||
property var builtinInstance: parent.builtinInstance
|
||||
|
||||
iconName: builtinInstance?.ccWidgetIcon || "extension"
|
||||
text: builtinInstance?.ccWidgetPrimaryText || "Built-in"
|
||||
isActive: builtinInstance?.ccWidgetIsActive || false
|
||||
enabled: !root.editMode
|
||||
|
||||
onClicked: {
|
||||
if (root.editMode)
|
||||
return
|
||||
if (builtinInstance) {
|
||||
builtinInstance.ccWidgetToggled()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: builtinSmallToggleComponent
|
||||
SmallToggleButton {
|
||||
property var widgetData: parent.widgetData || {}
|
||||
property int widgetIndex: parent.widgetIndex || 0
|
||||
property var builtinInstance: parent.builtinInstance
|
||||
|
||||
iconName: builtinInstance?.ccWidgetIcon || "extension"
|
||||
isActive: builtinInstance?.ccWidgetIsActive || false
|
||||
enabled: !root.editMode
|
||||
|
||||
onClicked: {
|
||||
if (root.editMode)
|
||||
return
|
||||
if (builtinInstance) {
|
||||
builtinInstance.ccWidgetToggled()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: pluginWidgetComponent
|
||||
Loader {
|
||||
@@ -715,7 +830,8 @@ enabled: !root.editMode
|
||||
property string pluginId: widgetData.id?.replace("plugin_", "") || ""
|
||||
|
||||
sourceComponent: {
|
||||
if (!pluginInstance) return null
|
||||
if (!pluginInstance)
|
||||
return null
|
||||
|
||||
const hasDetail = pluginInstance.ccDetailContent !== null
|
||||
|
||||
@@ -730,20 +846,20 @@ enabled: !root.editMode
|
||||
|
||||
Component.onCompleted: {
|
||||
Qt.callLater(() => {
|
||||
const pluginComponent = PluginService.pluginWidgetComponents[pluginId]
|
||||
if (pluginComponent) {
|
||||
const instance = pluginComponent.createObject(null, {
|
||||
pluginId: pluginId,
|
||||
pluginService: PluginService,
|
||||
visible: false,
|
||||
width: 0,
|
||||
height: 0
|
||||
})
|
||||
if (instance) {
|
||||
pluginInstance = instance
|
||||
}
|
||||
}
|
||||
})
|
||||
const pluginComponent = PluginService.pluginWidgetComponents[pluginId]
|
||||
if (pluginComponent) {
|
||||
const instance = pluginComponent.createObject(null, {
|
||||
"pluginId": pluginId,
|
||||
"pluginService": PluginService,
|
||||
"visible": false,
|
||||
"width": 0,
|
||||
"height": 0
|
||||
})
|
||||
if (instance) {
|
||||
pluginInstance = instance
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Connections {
|
||||
@@ -776,14 +892,16 @@ enabled: !root.editMode
|
||||
isActive: pluginInstance?.ccWidgetIsActive || false
|
||||
|
||||
onToggled: {
|
||||
if (root.editMode) return
|
||||
if (root.editMode)
|
||||
return
|
||||
if (pluginInstance) {
|
||||
pluginInstance.ccWidgetToggled()
|
||||
}
|
||||
}
|
||||
|
||||
onExpandClicked: {
|
||||
if (root.editMode) return
|
||||
if (root.editMode)
|
||||
return
|
||||
root.expandClicked(widgetData, widgetIndex)
|
||||
}
|
||||
}
|
||||
@@ -804,7 +922,8 @@ enabled: !root.editMode
|
||||
enabled: !root.editMode
|
||||
|
||||
onClicked: {
|
||||
if (root.editMode) return
|
||||
if (root.editMode)
|
||||
return
|
||||
if (pluginInstance) {
|
||||
pluginInstance.ccWidgetToggled()
|
||||
}
|
||||
@@ -825,7 +944,8 @@ enabled: !root.editMode
|
||||
enabled: !root.editMode
|
||||
|
||||
onClicked: {
|
||||
if (root.editMode) return
|
||||
if (root.editMode)
|
||||
return
|
||||
if (pluginInstance && pluginInstance.ccDetailContent) {
|
||||
root.expandClicked(widgetData, widgetIndex)
|
||||
} else if (pluginInstance) {
|
||||
|
||||
Reference in New Issue
Block a user