bat/tests/syntax-tests/source/QML/BatSyntaxTest.qml

220 lines
6.3 KiB
QML
Raw Normal View History

2020-10-19 19:11:50 +00:00
import QtQuick 2.0
import "../components"
Page {
id: page
// properties
property bool startup: true
readonly property var var1: null
readonly property QtObject var2: null
allowedOrientations: Orientation.All
/* components */
DBusServiceWatcher {
id: dbusService
service: "org.bat.service"
onRegisteredChanged: {
if (dbusService.registered) {
announcedNameField.text = daemon.announcedName()
}
}
}
Component.onCompleted: {
console.debug("completed")
}
Flickable {
anchors.fill: parent
contentHeight: column.height
visible: dbusService.registered
ViewPlaceholder {
enabled: !startup
&& trustedDevices.count == 0
&& nearDevices.count == 0
text: qsTr("Install Bat.")
}
Column {
id: column
width: page.width
spacing: Theme.paddingLarge
PageHeader {
title: qsTr("Syntax Test")
}
TextField {
id: announcedNameField
width: parent.width
label: qsTr("Device Name")
text: dbusService.registered ? daemon.announcedName() : ""
onActiveFocusChanged: {
if (activeFocus)
return
if (text.length === 0) {
text = daemon.announcedName()
} else {
daemon.setAnnouncedName(text)
placeholderText = text
}
}
EnterKey.onClicked: announcedNameField.focus = false
EnterKey.iconSource: "image://theme/icon-m-enter-close"
}
Component {
id: deviceDelegate
ListItem {
id: listItem
property bool showStatus: deviceStatusLabel.text.length
width: page.width
height: Theme.itemSizeMedium
Image {
id: icon
source: iconUrl
x: Theme.horizontalPageMargin
anchors.verticalCenter: parent.verticalCenter
sourceSize.width: Theme.iconSizeMedium
sourceSize.height: Theme.iconSizeMedium
}
Label {
id: deviceNameLabel
anchors {
left: icon.right
leftMargin: Theme.paddingLarge
right: parent.right
rightMargin: Theme.horizontalPageMargin
}
y: listItem.contentHeight / 2 - implicitHeight / 2
- showStatus * (deviceStatusLabel.implicitHeight / 2)
text: name
color: listItem.highlighted
? Theme.highlightColor
: Theme.primaryColor
truncationMode: TruncationMode.Fade
textFormat: Text.PlainText
Behavior on y { NumberAnimation {} }
}
Label {
id: deviceStatusLabel
anchors {
left: deviceNameLabel.left
top: deviceNameLabel.bottom
right: parent.right
rightMargin: Theme.horizontalPageMargin
}
text: (trusted && reachable)
? qsTr("Connected")
: (hasPairingRequests || waitsForPairing
? qsTr("Pending pairing request ...") : "")
color: listItem.highlighted
? Theme.secondaryHighlightColor
: Theme.secondaryColor
truncationMode: TruncationMode.Fade
font.pixelSize: Theme.fontSizeExtraSmall
opacity: showStatus ? 1.0 : 0.0
width: parent.width
textFormat: Text.PlainText
Behavior on opacity { FadeAnimation {} }
}
onClicked: {
pageStack.push(
Qt.resolvedUrl("DevicePage.qml"),
{ deviceId: id })
}
}
}
DeviceListModel {
id: devicelistModel
}
ColumnView {
id: devicesView
width: page.width
itemHeight: Theme.itemSizeMedium
model: trustedDevicesModel
delegate: deviceDelegate
visible: devicesView.count > 0
}
}
PullDownMenu {
// MenuItem {
// text: qsTr("About ...")
// onClicked: pageStack.push(Qt.resolvedUrl("AboutPage.qml"))
// }
MenuItem {
text: qsTr("Settings ...")
onClicked: pageStack.push(Qt.resolvedUrl("SettingsPage.qml"))
}
}
VerticalScrollDecorator {}
}
/*
Connections {
target: ui
onOpeningDevicePage: openDevicePage(deviceId)
}*/
Timer {
interval: 1000
running: true
repeat: false
onTriggered: startup = false
}
function openDevicePage(deviceId) {
if (typeof pageStack === "undefined")
return;
console.log("opening device " + deviceId)
window.activate()
var devicePage = pageStack.find(function(page) {
return page.objectName === "DevicePage"
})
if (devicePage !== null && devicePage.deviceId === deviceId) {
pageStack.pop(devicePage)
ui.showMainWindow()
return
}
pageStack.pop(page, PageStackAction.Immediate)
pageStack.push(
Qt.resolvedUrl("DevicePage.qml"),
{ deviceId: deviceId },
PageStackAction.Immediate)
}
}