1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-05 21:15:38 -05:00

powermenu: switch back to a list based style

This commit is contained in:
bbedward
2025-11-12 23:26:56 -05:00
parent ab976cbb24
commit 5efc1f9dad

View File

@@ -10,14 +10,10 @@ DankModal {
layerNamespace: "dms:power-menu" layerNamespace: "dms:power-menu"
property int selectedRow: 0 property int selectedIndex: 0
property int selectedCol: 0
property int selectedIndex: selectedRow * gridColumns + selectedCol
property rect parentBounds: Qt.rect(0, 0, 0, 0) property rect parentBounds: Qt.rect(0, 0, 0, 0)
property var parentScreen: null property var parentScreen: null
property var visibleActions: [] property var visibleActions: []
property int gridColumns: 3
property int gridRows: 2
signal powerActionRequested(string action, string title, string message) signal powerActionRequested(string action, string title, string message)
signal lockRequested signal lockRequested
@@ -43,28 +39,6 @@ DankModal {
return false return false
return true return true
}) })
const count = visibleActions.length
switch (count) {
case 0:
gridColumns = 1
gridRows = 1
break
case 1:
case 2:
case 3:
gridColumns = 1
gridRows = count
break
case 4:
gridColumns = 2
gridRows = 2
break
default:
gridColumns = 3
gridRows = Math.ceil(count / 3)
break
}
} }
function getDefaultActionIndex() { function getDefaultActionIndex() {
@@ -173,7 +147,7 @@ DankModal {
} }
shouldBeVisible: false shouldBeVisible: false
width: Math.min(550, gridColumns * 180 + Theme.spacingS * (gridColumns - 1) + Theme.spacingL * 2) width: 400
height: contentLoader.item ? contentLoader.item.implicitHeight : 300 height: contentLoader.item ? contentLoader.item.implicitHeight : 300
enableShadow: true enableShadow: true
screen: parentScreen screen: parentScreen
@@ -189,30 +163,20 @@ DankModal {
onBackgroundClicked: () => close() onBackgroundClicked: () => close()
onOpened: () => { onOpened: () => {
updateVisibleActions() updateVisibleActions()
const defaultIndex = getDefaultActionIndex() selectedIndex = getDefaultActionIndex()
selectedRow = Math.floor(defaultIndex / gridColumns)
selectedCol = defaultIndex % gridColumns
Qt.callLater(() => modalFocusScope.forceActiveFocus()) Qt.callLater(() => modalFocusScope.forceActiveFocus())
} }
Component.onCompleted: updateVisibleActions() Component.onCompleted: updateVisibleActions()
modalFocusScope.Keys.onPressed: event => { modalFocusScope.Keys.onPressed: event => {
switch (event.key) { switch (event.key) {
case Qt.Key_Left:
selectedCol = (selectedCol - 1 + gridColumns) % gridColumns
event.accepted = true
break
case Qt.Key_Right:
selectedCol = (selectedCol + 1) % gridColumns
event.accepted = true
break
case Qt.Key_Up: case Qt.Key_Up:
case Qt.Key_Backtab: case Qt.Key_Backtab:
selectedRow = (selectedRow - 1 + gridRows) % gridRows selectedIndex = (selectedIndex - 1 + visibleActions.length) % visibleActions.length
event.accepted = true event.accepted = true
break break
case Qt.Key_Down: case Qt.Key_Down:
case Qt.Key_Tab: case Qt.Key_Tab:
selectedRow = (selectedRow + 1) % gridRows selectedIndex = (selectedIndex + 1) % visibleActions.length
event.accepted = true event.accepted = true
break break
case Qt.Key_Return: case Qt.Key_Return:
@@ -222,7 +186,7 @@ DankModal {
break break
case Qt.Key_N: case Qt.Key_N:
if (event.modifiers & Qt.ControlModifier) { if (event.modifiers & Qt.ControlModifier) {
selectedCol = (selectedCol + 1) % gridColumns selectedIndex = (selectedIndex + 1) % visibleActions.length
event.accepted = true event.accepted = true
} }
break break
@@ -231,19 +195,19 @@ DankModal {
selectOption("poweroff") selectOption("poweroff")
event.accepted = true event.accepted = true
} else { } else {
selectedCol = (selectedCol - 1 + gridColumns) % gridColumns selectedIndex = (selectedIndex - 1 + visibleActions.length) % visibleActions.length
event.accepted = true event.accepted = true
} }
break break
case Qt.Key_J: case Qt.Key_J:
if (event.modifiers & Qt.ControlModifier) { if (event.modifiers & Qt.ControlModifier) {
selectedRow = (selectedRow + 1) % gridRows selectedIndex = (selectedIndex + 1) % visibleActions.length
event.accepted = true event.accepted = true
} }
break break
case Qt.Key_K: case Qt.Key_K:
if (event.modifiers & Qt.ControlModifier) { if (event.modifiers & Qt.ControlModifier) {
selectedRow = (selectedRow - 1 + gridRows) % gridRows selectedIndex = (selectedIndex - 1 + visibleActions.length) % visibleActions.length
event.accepted = true event.accepted = true
} }
break break
@@ -277,14 +241,18 @@ DankModal {
content: Component { content: Component {
Item { Item {
anchors.fill: parent anchors.fill: parent
implicitHeight: buttonGrid.implicitHeight + Theme.spacingL * 2 implicitHeight: buttonColumn.implicitHeight + Theme.spacingL * 2
Grid { Column {
id: buttonGrid id: buttonColumn
anchors.centerIn: parent anchors {
columns: root.gridColumns left: parent.left
columnSpacing: Theme.spacingS right: parent.right
rowSpacing: Theme.spacingS leftMargin: Theme.spacingL
rightMargin: Theme.spacingL
verticalCenter: parent.verticalCenter
}
spacing: Theme.spacingS
Repeater { Repeater {
model: root.visibleActions model: root.visibleActions
@@ -297,8 +265,8 @@ DankModal {
readonly property bool isSelected: root.selectedIndex === index readonly property bool isSelected: root.selectedIndex === index
readonly property bool showWarning: modelData === "reboot" || modelData === "poweroff" readonly property bool showWarning: modelData === "reboot" || modelData === "poweroff"
width: (root.width - Theme.spacingL * 2 - Theme.spacingS * (root.gridColumns - 1)) / root.gridColumns width: parent.width
height: 100 height: 56
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: { color: {
if (isSelected) if (isSelected)
@@ -310,20 +278,26 @@ DankModal {
border.color: isSelected ? Theme.primary : "transparent" border.color: isSelected ? Theme.primary : "transparent"
border.width: isSelected ? 2 : 0 border.width: isSelected ? 2 : 0
Column { Row {
anchors.centerIn: parent anchors {
spacing: Theme.spacingS left: parent.left
right: parent.right
leftMargin: Theme.spacingM
rightMargin: Theme.spacingM
verticalCenter: parent.verticalCenter
}
spacing: Theme.spacingM
DankIcon { DankIcon {
name: parent.parent.actionData.icon name: parent.parent.actionData.icon
size: Theme.iconSize + 8 size: Theme.iconSize + 4
color: { color: {
if (parent.parent.showWarning && mouseArea.containsMouse) { if (parent.parent.showWarning && mouseArea.containsMouse) {
return parent.parent.modelData === "poweroff" ? Theme.error : Theme.warning return parent.parent.modelData === "poweroff" ? Theme.error : Theme.warning
} }
return Theme.surfaceText return Theme.surfaceText
} }
anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter
} }
StyledText { StyledText {
@@ -336,23 +310,27 @@ DankModal {
return Theme.surfaceText return Theme.surfaceText
} }
font.weight: Font.Medium font.weight: Font.Medium
anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter
}
}
Rectangle {
width: 28
height: 20
radius: 4
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.1)
anchors {
right: parent.right
rightMargin: Theme.spacingM
verticalCenter: parent.verticalCenter
} }
Rectangle { StyledText {
width: 20 text: parent.parent.actionData.key
height: 16 font.pixelSize: Theme.fontSizeSmall
radius: 4 color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.6)
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.1) font.weight: Font.Medium
anchors.horizontalCenter: parent.horizontalCenter anchors.centerIn: parent
StyledText {
text: parent.parent.parent.actionData.key
font.pixelSize: Theme.fontSizeSmall - 1
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.6)
font.weight: Font.Medium
anchors.centerIn: parent
}
} }
} }
@@ -362,8 +340,7 @@ DankModal {
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onClicked: { onClicked: {
root.selectedRow = Math.floor(index / root.gridColumns) root.selectedIndex = index
root.selectedCol = index % root.gridColumns
root.selectOption(modelData) root.selectOption(modelData)
} }
} }