2023-04-09 13:35:35 +08:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
2022-09-14 13:01:10 +08:00
|
|
|
import QtQuick
|
|
|
|
import QtQuick.Layouts
|
|
|
|
import QtQuick.Controls
|
2022-04-15 18:37:20 +08:00
|
|
|
import "RoomElement"
|
|
|
|
|
|
|
|
Item {
|
2022-04-30 15:27:56 +08:00
|
|
|
id: root
|
2022-04-15 18:37:20 +08:00
|
|
|
|
2022-04-30 15:27:56 +08:00
|
|
|
property bool loaded: false
|
2022-04-15 18:37:20 +08:00
|
|
|
|
2023-04-21 17:49:30 +08:00
|
|
|
Rectangle {
|
|
|
|
anchors.fill: listView
|
|
|
|
color: "#88EEEEEE"
|
|
|
|
radius: 6
|
|
|
|
}
|
|
|
|
|
2022-04-30 15:27:56 +08:00
|
|
|
ListView {
|
2023-04-21 17:49:30 +08:00
|
|
|
id: listView
|
|
|
|
width: 130
|
|
|
|
height: parent.height - 20
|
|
|
|
y: 10
|
2022-04-30 15:27:56 +08:00
|
|
|
ScrollBar.vertical: ScrollBar {}
|
|
|
|
model: ListModel {
|
|
|
|
id: packages
|
|
|
|
}
|
2022-04-15 18:37:20 +08:00
|
|
|
|
2023-04-21 17:49:30 +08:00
|
|
|
highlight: Rectangle { color: "#E91E63"; radius: 5 }
|
|
|
|
highlightMoveDuration: 500
|
|
|
|
|
|
|
|
delegate: Item {
|
|
|
|
width: listView.width
|
|
|
|
height: 40
|
|
|
|
|
|
|
|
Text {
|
|
|
|
text: Backend.translate(name)
|
|
|
|
anchors.centerIn: parent
|
|
|
|
}
|
|
|
|
|
|
|
|
TapHandler {
|
|
|
|
onTapped: {
|
|
|
|
listView.currentIndex = index;
|
2022-04-15 18:37:20 +08:00
|
|
|
}
|
2022-04-30 15:27:56 +08:00
|
|
|
}
|
2022-04-15 18:37:20 +08:00
|
|
|
}
|
2023-04-21 17:49:30 +08:00
|
|
|
|
|
|
|
onCurrentIndexChanged: { vanishAnim.start(); }
|
2022-04-30 15:27:56 +08:00
|
|
|
}
|
2022-04-15 18:37:20 +08:00
|
|
|
|
2023-04-21 17:49:30 +08:00
|
|
|
GridView {
|
|
|
|
id: gridView
|
|
|
|
width: root.width - listView.width - generalDetail.width - 16
|
|
|
|
height: parent.height - 20
|
|
|
|
y: 10
|
|
|
|
anchors.left: listView.right
|
|
|
|
anchors.leftMargin: 8 + (width % 100) / 2
|
|
|
|
cellHeight: 140
|
|
|
|
cellWidth: 100
|
|
|
|
|
|
|
|
delegate: GeneralCardItem {
|
|
|
|
autoBack: false
|
|
|
|
name: modelData
|
|
|
|
onClicked: {
|
|
|
|
generalText.clear();
|
|
|
|
generalDetail.general = modelData;
|
|
|
|
generalDetail.updateGeneral();
|
|
|
|
// generalDetail.open();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ParallelAnimation {
|
|
|
|
id: vanishAnim
|
|
|
|
PropertyAnimation {
|
|
|
|
target: gridView
|
|
|
|
property: "opacity"
|
|
|
|
to: 0
|
|
|
|
duration: 150
|
|
|
|
easing.type: Easing.InOutQuad
|
|
|
|
}
|
|
|
|
PropertyAnimation {
|
|
|
|
target: gridView
|
|
|
|
property: "y"
|
|
|
|
to: 30
|
|
|
|
duration: 150
|
|
|
|
easing.type: Easing.InOutQuad
|
|
|
|
}
|
|
|
|
onFinished: {
|
|
|
|
gridView.model = JSON.parse(Backend.callLuaFunction("GetGenerals",
|
|
|
|
[listView.model.get(listView.currentIndex).name]));
|
|
|
|
appearAnim.start();
|
2022-04-15 18:37:20 +08:00
|
|
|
}
|
2022-04-30 15:27:56 +08:00
|
|
|
}
|
2022-04-15 18:37:20 +08:00
|
|
|
|
2023-04-21 17:49:30 +08:00
|
|
|
SequentialAnimation {
|
|
|
|
id: appearAnim
|
|
|
|
PauseAnimation { duration: 200 }
|
|
|
|
ParallelAnimation {
|
|
|
|
PropertyAnimation {
|
|
|
|
target: gridView
|
|
|
|
property: "opacity"
|
|
|
|
to: 1
|
|
|
|
duration: 150
|
|
|
|
easing.type: Easing.InOutQuad
|
|
|
|
}
|
|
|
|
PropertyAnimation {
|
|
|
|
target: gridView
|
|
|
|
property: "y"
|
|
|
|
from: 20
|
|
|
|
to: 10
|
|
|
|
duration: 150
|
|
|
|
easing.type: Easing.InOutQuad
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Rectangle {
|
2023-02-15 19:54:35 +08:00
|
|
|
id: generalDetail
|
2023-04-21 17:49:30 +08:00
|
|
|
width: 310
|
|
|
|
height: parent.height - 20
|
|
|
|
y: 10
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.rightMargin: 10
|
|
|
|
color: "#88EEEEEE"
|
|
|
|
radius: 8
|
|
|
|
|
|
|
|
property string general: "caocao"
|
|
|
|
function updateGeneral() {
|
|
|
|
detailGeneralCard.name = general;
|
|
|
|
let data = JSON.parse(Backend.callLuaFunction("GetGeneralDetail", [general]));
|
|
|
|
generalText.clear();
|
|
|
|
data.skill.forEach(t => {
|
|
|
|
generalText.append("<b>" + Backend.translate(t.name) + "</b>: " + t.description)
|
|
|
|
});
|
|
|
|
data.related_skill.forEach(t => {
|
|
|
|
generalText.append("<font color=\"purple\"><b>" + Backend.translate(t.name) + "</b>: " + t.description + "</font>")
|
|
|
|
});
|
|
|
|
}
|
2023-02-15 19:54:35 +08:00
|
|
|
|
|
|
|
Flickable {
|
|
|
|
flickableDirection: Flickable.VerticalFlick
|
2023-04-21 17:49:30 +08:00
|
|
|
contentHeight: detailLayout.height
|
|
|
|
width: parent.width - 40
|
|
|
|
height: parent.height - 40
|
2023-02-15 19:54:35 +08:00
|
|
|
clip: true
|
|
|
|
anchors.centerIn: parent
|
|
|
|
ScrollBar.vertical: ScrollBar {}
|
|
|
|
|
2023-04-21 17:49:30 +08:00
|
|
|
ColumnLayout {
|
|
|
|
id: detailLayout
|
|
|
|
width: parent.width
|
|
|
|
|
|
|
|
GeneralCardItem {
|
|
|
|
id: detailGeneralCard
|
|
|
|
Layout.alignment: Qt.AlignHCenter
|
|
|
|
name: "caocao"
|
|
|
|
}
|
|
|
|
|
|
|
|
TextEdit {
|
|
|
|
id: generalText
|
|
|
|
|
|
|
|
Layout.fillWidth: true
|
|
|
|
readOnly: true
|
|
|
|
selectByKeyboard: true
|
|
|
|
selectByMouse: false
|
|
|
|
wrapMode: TextEdit.WordWrap
|
|
|
|
textFormat: TextEdit.RichText
|
|
|
|
font.pixelSize: 16
|
2023-02-15 19:54:35 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-04-21 17:49:30 +08:00
|
|
|
Button {
|
|
|
|
text: Backend.translate("Quit")
|
|
|
|
anchors.right: parent.right
|
|
|
|
onClicked: {
|
|
|
|
mainStack.pop();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-30 15:27:56 +08:00
|
|
|
function loadPackages() {
|
|
|
|
if (loaded) return;
|
|
|
|
let packs = JSON.parse(Backend.callLuaFunction("GetAllGeneralPack", []));
|
|
|
|
packs.forEach((name) => packages.append({ name: name }));
|
2023-04-21 17:49:30 +08:00
|
|
|
generalDetail.updateGeneral();
|
2022-04-30 15:27:56 +08:00
|
|
|
loaded = true;
|
|
|
|
}
|
2022-04-15 18:37:20 +08:00
|
|
|
}
|