274 lines
10 KiB
QML
274 lines
10 KiB
QML
|
|
import QtQuick
|
||
|
|
import QtQuick.Controls
|
||
|
|
import QtQuick.Dialogs
|
||
|
|
|
||
|
|
Page {
|
||
|
|
title: qsTr("AppStore")
|
||
|
|
property var appList: []
|
||
|
|
ListModel{
|
||
|
|
id: appModel
|
||
|
|
}
|
||
|
|
Component.onCompleted: {
|
||
|
|
createAddButton()
|
||
|
|
updateAppList()
|
||
|
|
}
|
||
|
|
|
||
|
|
function createAddButton()
|
||
|
|
{
|
||
|
|
appModel.append({
|
||
|
|
"id": "add",
|
||
|
|
"name": "",
|
||
|
|
"desc": "",
|
||
|
|
"icon": "",
|
||
|
|
"qmlfile": "",
|
||
|
|
"show": false
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
function updateAppList()
|
||
|
|
{
|
||
|
|
appModel.clear()
|
||
|
|
createAddButton()
|
||
|
|
common.updateAppList()
|
||
|
|
appList = common.appList()
|
||
|
|
for(var i = 0; i < appList.length; i++)
|
||
|
|
{
|
||
|
|
var appPath = "./plus/" + appList[i].id
|
||
|
|
var qmlfile = appPath + "/main.qml"
|
||
|
|
var icon = appPath + "/icon.png"
|
||
|
|
var obj = {
|
||
|
|
"id": appList[i].id,
|
||
|
|
"name": appList[i].info.General.Name,
|
||
|
|
"desc": appList[i].info.General.Description,
|
||
|
|
"icon": icon,
|
||
|
|
"qmlfile": qmlfile,
|
||
|
|
"show": appList[i].show
|
||
|
|
}
|
||
|
|
appModel.insert(appModel.count-1, obj)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Rectangle {
|
||
|
|
anchors.fill: parent
|
||
|
|
gradient: Gradient {
|
||
|
|
GradientStop { position: 0.0; color: "#ecf3fb" } // 左上角颜色
|
||
|
|
GradientStop { position: 1.0; color: "#b7d6fb" } // 右上角颜色
|
||
|
|
orientation: Gradient.Horizontal
|
||
|
|
}
|
||
|
|
Rectangle {
|
||
|
|
anchors.left: parent.left
|
||
|
|
anchors.right: parent.right
|
||
|
|
anchors.top: parent.top
|
||
|
|
anchors.bottom: parent.bottom
|
||
|
|
anchors.leftMargin: 10
|
||
|
|
anchors.rightMargin: 10
|
||
|
|
anchors.topMargin: 12
|
||
|
|
anchors.bottomMargin: 10
|
||
|
|
|
||
|
|
radius: 10
|
||
|
|
color: "#ffffff"
|
||
|
|
Component {
|
||
|
|
id: contactDelegate
|
||
|
|
Item {
|
||
|
|
width: grid.cellWidth
|
||
|
|
height: grid.cellHeight
|
||
|
|
Rectangle
|
||
|
|
{
|
||
|
|
id: panel
|
||
|
|
width: 400
|
||
|
|
height: 150
|
||
|
|
radius: 10
|
||
|
|
visible: model.id != "add"
|
||
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
||
|
|
Behavior on scale {
|
||
|
|
NumberAnimation { duration: 100 }
|
||
|
|
}
|
||
|
|
border.color: "#f2f2f2"
|
||
|
|
border.width: 2
|
||
|
|
Image{
|
||
|
|
id: imgIcon
|
||
|
|
width: 130
|
||
|
|
height: 130
|
||
|
|
source: icon
|
||
|
|
anchors.top: parent.top
|
||
|
|
anchors.left: parent.left
|
||
|
|
anchors.bottom: parent.bottom
|
||
|
|
anchors.margins: 20
|
||
|
|
}
|
||
|
|
Text {
|
||
|
|
id: txName
|
||
|
|
text: name
|
||
|
|
font.family: "微软雅黑"
|
||
|
|
font.pointSize: 12
|
||
|
|
anchors.left: imgIcon.right
|
||
|
|
anchors.leftMargin: 10
|
||
|
|
anchors.top: imgIcon.top
|
||
|
|
color: "#5b5b5b"
|
||
|
|
}
|
||
|
|
Text {
|
||
|
|
id: txDesc
|
||
|
|
text: desc
|
||
|
|
font.family: "微软雅黑"
|
||
|
|
font.pointSize: 10
|
||
|
|
anchors.left: imgIcon.right
|
||
|
|
anchors.leftMargin: 10
|
||
|
|
anchors.top: txName.bottom
|
||
|
|
anchors.topMargin: 10
|
||
|
|
color: "#b4b4b4"
|
||
|
|
}
|
||
|
|
Image
|
||
|
|
{
|
||
|
|
source: "./resource/delete.svg"
|
||
|
|
anchors.right: parent.right
|
||
|
|
anchors.top: parent.top
|
||
|
|
anchors.margins: 20
|
||
|
|
width: 16
|
||
|
|
height: 16
|
||
|
|
MouseArea
|
||
|
|
{
|
||
|
|
anchors.fill: parent
|
||
|
|
onPressed: {
|
||
|
|
panel.scale = 1.0
|
||
|
|
}
|
||
|
|
onReleased:{
|
||
|
|
panel.scale = 1.03
|
||
|
|
}
|
||
|
|
onClicked: {
|
||
|
|
if( common.deleteApp(model.id) )
|
||
|
|
updateAppList()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Rectangle {
|
||
|
|
width: 60
|
||
|
|
height: 20
|
||
|
|
radius: 5
|
||
|
|
anchors.right: parent.right
|
||
|
|
anchors.bottom: parent.bottom
|
||
|
|
anchors.margins: 20
|
||
|
|
color: "#f9f9f9"
|
||
|
|
border.color: "#fbfbfb"
|
||
|
|
border.width: 1
|
||
|
|
Text {
|
||
|
|
anchors.centerIn: parent
|
||
|
|
text: model.show ? "停用" : "启用"
|
||
|
|
color: model.show ? "#ff0000" : "#00b042"
|
||
|
|
font.pointSize: 9
|
||
|
|
}
|
||
|
|
MouseArea{
|
||
|
|
anchors.fill: parent
|
||
|
|
onPressed:{
|
||
|
|
panel.scale = 1.0
|
||
|
|
}
|
||
|
|
onReleased:{
|
||
|
|
panel.scale = 1.03
|
||
|
|
}
|
||
|
|
|
||
|
|
onClicked:{
|
||
|
|
if (model.show == true)
|
||
|
|
{
|
||
|
|
if( common.showApp(model.id, false) )
|
||
|
|
{
|
||
|
|
model.show = false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
|
||
|
|
if ( common.showApp(model.id, true) )
|
||
|
|
{
|
||
|
|
model.show = true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
MouseArea {
|
||
|
|
anchors.fill: parent
|
||
|
|
hoverEnabled: true
|
||
|
|
propagateComposedEvents: false
|
||
|
|
onEntered:{
|
||
|
|
panel.scale = 1.03
|
||
|
|
}
|
||
|
|
onExited: {
|
||
|
|
panel.scale = 1
|
||
|
|
}
|
||
|
|
|
||
|
|
onPressed:(mouse)=>
|
||
|
|
{
|
||
|
|
mouse.accepted = false
|
||
|
|
// stackView.push(model.qmlfile)
|
||
|
|
// grid.currentIndex = index
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Rectangle
|
||
|
|
{
|
||
|
|
width: 400
|
||
|
|
height: 150
|
||
|
|
radius: 10
|
||
|
|
visible: model.id == "add"
|
||
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
||
|
|
Behavior on scale {
|
||
|
|
NumberAnimation { duration: 100 }
|
||
|
|
}
|
||
|
|
border.color: "#f2f2f2"
|
||
|
|
border.width: 2
|
||
|
|
Image{
|
||
|
|
id: imgAdd
|
||
|
|
anchors.centerIn: parent
|
||
|
|
source: "./resource/add.svg"
|
||
|
|
}
|
||
|
|
MouseArea{
|
||
|
|
anchors.fill: parent
|
||
|
|
hoverEnabled: true
|
||
|
|
onEntered:{
|
||
|
|
imgAdd.scale = 1.1
|
||
|
|
}
|
||
|
|
onExited: {
|
||
|
|
imgAdd.scale = 1
|
||
|
|
}
|
||
|
|
onClicked:{
|
||
|
|
fileDialog.open()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Item{
|
||
|
|
id: gridItem
|
||
|
|
anchors.centerIn: parent
|
||
|
|
width: parent.width *5/6; height: parent.height - 200
|
||
|
|
clip: true
|
||
|
|
GridView {
|
||
|
|
id: grid
|
||
|
|
width: parent.width ; height: parent.height
|
||
|
|
anchors.fill: parent
|
||
|
|
cellWidth: 450; cellHeight: 200
|
||
|
|
model: appModel
|
||
|
|
delegate: contactDelegate
|
||
|
|
focus: true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Text{
|
||
|
|
anchors.bottom: gridItem.top
|
||
|
|
anchors.left: gridItem.left
|
||
|
|
anchors.bottomMargin: 20
|
||
|
|
anchors.leftMargin: 25
|
||
|
|
font.pointSize: 20
|
||
|
|
color: "#000000"
|
||
|
|
text: "应用中心"
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
FileDialog {
|
||
|
|
id: fileDialog
|
||
|
|
//currentFolder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
|
||
|
|
nameFilters: ["app files (*.tpa)"]
|
||
|
|
onAccepted: {
|
||
|
|
if( common.installApp(selectedFile) )
|
||
|
|
updateAppList()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|