2
0
mirror of https://github.com/Alia5/GlosSI.git synced 2024-10-30 15:20:38 +00:00
GlosSI/GlosSIConfig/qml/ShortcutCards.qml

246 lines
8.2 KiB
QML
Raw Normal View History

/*
2023-01-08 14:46:12 +00:00
Copyright 2021-2023 Peter Repukat - FlatspotSoftware
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
2022-10-15 13:50:40 +00:00
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Dialogs
2021-10-24 23:14:03 +00:00
import Qt5Compat.GraphicalEffects
GridView {
id: shortcutgrid
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: margins
visible: model.length > 0
signal editClicked(var index, var shortcutInfo)
2021-10-25 16:00:34 +00:00
ScrollBar.vertical: ScrollBar {
}
2021-10-24 23:14:03 +00:00
property real margins: 16
2021-10-24 23:14:03 +00:00
cellWidth: 292 + 16
cellHeight: 212 + 16
readonly property real displayedItems: Math.floor((parent.width - margins*2) / cellWidth)
width: displayedItems * cellWidth
model: uiModel.targetList;
2021-10-24 23:14:03 +00:00
GridView.delayRemove: true
// TODO: animations only properly work with abstractListModel... grrr...
addDisplaced: Transition {
NumberAnimation { properties: "x,y"; duration: 300 }
}
add: Transition {
ParallelAnimation {
NumberAnimation { property: "opacity"; from: 0; duration: 300; easing.type: Easing.OutQuad }
NumberAnimation { properties: "x,y"; from: height; duration: 300; easing.type: Easing.OutQuad }
}
}
populate: Transition {
ParallelAnimation {
NumberAnimation { property: "opacity"; from: 0; duration: 300; easing.type: Easing.OutQuad }
NumberAnimation { properties: "x,y"; duration: 300; easing.type: Easing.OutQuad }
}
}
remove: Transition {
NumberAnimation { property: "opacity"; to: 0; duration: 300; easing.type: Easing.InQuad }
}
removeDisplaced: Transition {
NumberAnimation { properties: "x,y"; duration: 300; easing.type: Easing.InQuad }
}
2021-10-28 09:41:27 +00:00
delegate: RPane {
id: delegateRoot
color: Qt.lighter(Material.background, 1.6)
bgOpacity: 0.3
radius: 8
2021-10-24 23:14:03 +00:00
width: 292
height: 212
Material.elevation: 4
2021-10-24 23:14:03 +00:00
clip: true
property bool isInSteam: uiModel.isInSteam(modelData);
bgImgSource: isInSteam ? "file:///" + uiModel.getGridImagePath(modelData) : null
bgImgOpacity: isInSteam ? 0.12 : -1
Image {
anchors.top: parent.top
anchors.left: parent.left
id: maybeIcon
2021-11-12 14:31:36 +00:00
source: !!modelData.icon
? modelData.icon.endsWith(".exe")
? "image://exe/" + modelData.icon
: "file:///" + modelData.icon
: 'qrc:/svg/add_photo_alternate_white_24dp.svg'
width: 48
height: 48
fillMode: Image.PreserveAspectFit
}
Label {
2021-10-24 23:14:03 +00:00
id: label
anchors.top: parent.top
anchors.leftMargin: 8
anchors.left: maybeIcon.right
2021-10-24 23:14:03 +00:00
anchors.right: parent.right
text: modelData.name
font.bold: true
font.pixelSize: 16
2021-10-25 16:00:34 +00:00
elide: Text.ElideRight
}
2021-10-24 23:14:03 +00:00
Column {
anchors.top: maybeIcon.bottom
2021-10-24 23:14:03 +00:00
anchors.left: parent.left
anchors.bottom: buttonrow.top
2021-10-24 23:14:03 +00:00
anchors.margins: 12
2021-10-28 09:41:27 +00:00
spacing: 8
2021-10-24 23:14:03 +00:00
Row {
spacing: 8
2021-11-12 14:31:36 +00:00
visible: !!modelData.launchPath && modelData.launchPath.length > 0
2021-10-24 23:14:03 +00:00
Label {
2021-10-25 16:00:34 +00:00
id: typeLabel
2021-11-12 14:31:36 +00:00
text: uiModel.isWindows && !!modelData.launchPath
2021-10-24 23:14:03 +00:00
? modelData.launchPath.replace(/^.{1,3}:/, "").length < modelData.launchPath.length
? "Win32"
: "UWP"
: qsTr("Launch")
font.bold: true
}
Label {
property string te: modelData.launchPath
? modelData.launchPath.replace(/.*(\\|\/)/gm, "")
: ""
text: uiModel.isWindows ? te : te.replace(/\..{3}$/, "")
2021-10-25 16:00:34 +00:00
width: 292 - typeLabel.width - 72
elide: Text.ElideRight
2021-10-24 23:14:03 +00:00
}
}
2021-10-28 09:41:27 +00:00
Row {
visible: uiModel.isDebug
2021-10-28 09:41:27 +00:00
spacing: 4
Label {
text: qsTr("AppID: ")
2021-10-28 09:41:27 +00:00
font.bold: true
}
Label {
text: uiModel.getAppId(modelData)
2021-10-28 09:41:27 +00:00
}
}
2021-10-24 23:14:03 +00:00
}
Column {
anchors.left: parent.left
2021-10-24 23:14:03 +00:00
anchors.bottom: parent.bottom
spacing: 4
Button {
highlighted: true
visible: delegateRoot.isInSteam
text: qsTr("Steam controller config")
onClicked: function() {
controllerConfigDialog.confirmedExtraParam = uiModel.getAppId(modelData)
controllerConfigDialog.confirmedParam = uiModel.getAppId(modelData)
controllerConfigDialog.open();
}
}
Button {
id: steambutton
width: 72
onClicked: function(){
if (delegateRoot.isInSteam) {
if (!uiModel.removeFromSteam(modelData.name, "")) {
writeErrorDialog.open();
return;
}
} else {
if (!uiModel.addToSteam(modelData, "")) {
manualInfo = uiModel.manualProps(modelData);
writeErrorDialog.open();
return;
}
}
if (steamShortcutsChanged == false) {
steamChangedDialog.open();
}
delegateRoot.isInSteam = uiModel.isInSteam(modelData)
steamShortcutsChanged = true
2021-10-24 23:14:03 +00:00
}
highlighted: delegateRoot.isInSteam
Material.accent: Material.color(Material.Red, Material.Shade800)
Row {
anchors.centerIn: parent
spacing: 8
Label {
anchors.verticalCenter: parent.verticalCenter
text: delegateRoot.isInSteam ? "-" : "+"
font.bold: true
font.pixelSize: 24
}
Image {
anchors.verticalCenter: parent.verticalCenter
source: "qrc:/svg/steam.svg"
width: 22
height: 22
smooth: true
mipmap: true
ColorOverlay {
anchors.fill: parent
source: parent
color: "white"
}
2021-10-24 23:14:03 +00:00
}
}
}
}
Row {
id: buttonrow
anchors.right: parent.right
anchors.bottom: parent.bottom
spacing: 4
2021-10-24 23:14:03 +00:00
RoundButton {
onClicked: uiModel.deleteTarget(index)
highlighted: true
2021-10-24 23:14:03 +00:00
Material.accent: Material.color(Material.Red, Material.Shade900)
Image {
anchors.centerIn: parent
source: "qrc:/svg/delete_white_24dp.svg"
width: 16
height: 16
}
}
2021-10-24 23:14:03 +00:00
RoundButton {
onClicked: editClicked(index, modelData)
2021-10-24 23:14:03 +00:00
highlighted: true
Image {
anchors.centerIn: parent
source: "qrc:/svg/edit_white_24dp.svg"
width: 16
height: 16
}
}
}
}
}