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:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user