pragma ComponentBehavior: Bound import QtQuick import QtQuick.Controls.Basic import QtQuick.Layouts import Workcat Window { id: win required property CatController cat required property AppSettings settings readonly property var coats: [ { name: qsTr("Apricot"), color: "#f4b183" }, { name: qsTr("Ivory"), color: "#f3ede2" }, { name: qsTr("Grey"), color: "#a4a6b3" }, { name: qsTr("Charcoal"), color: "#3c3b46" }, { name: qsTr("Sage"), color: "#a9bfa0" }, { name: qsTr("Plum"), color: "#9a7bb0" } ] width: 440 height: 600 minimumWidth: 380 minimumHeight: 520 title: qsTr("Workcat") color: "#faf7f2" flags: Qt.Dialog | Qt.WindowStaysOnTopHint ColumnLayout { anchors.fill: parent anchors.margins: 24 spacing: 18 RowLayout { Layout.fillWidth: true spacing: 16 Cat { Layout.preferredWidth: 110 Layout.preferredHeight: 99 coat: win.settings.coat mood: "sitting" petted: previewHover.hovered HoverHandler { id: previewHover } } ColumnLayout { Layout.fillWidth: true spacing: 4 Label { Layout.fillWidth: true text: qsTr("Workcat") font.pixelSize: 26 font.bold: true color: "#2f2a36" } Label { Layout.fillWidth: true wrapMode: Text.WordWrap text: qsTr("A little cat that wanders along the bottom of your screen. Drag it around, pet it with a click, and it will purr.") color: "#7a7484" } } } GroupBox { Layout.fillWidth: true title: qsTr("Coat") Flow { anchors.fill: parent spacing: 10 Repeater { model: win.coats Column { id: swatch required property var modelData readonly property bool selected: Qt.colorEqual(win.settings.coat, modelData.color) spacing: 4 Rectangle { width: 40; height: 40 radius: 20 color: swatch.modelData.color border.width: swatch.selected ? 3 : 1 border.color: swatch.selected ? "#f25f7a" : "#d8d2ca" antialiasing: true Accessible.role: Accessible.RadioButton Accessible.name: swatch.modelData.name Accessible.checked: swatch.selected activeFocusOnTab: true Keys.onSpacePressed: win.settings.coat = swatch.modelData.color TapHandler { onTapped: win.settings.coat = swatch.modelData.color } } Label { anchors.horizontalCenter: parent.horizontalCenter text: swatch.modelData.name font.pixelSize: 11 color: "#7a7484" } } } } } GridLayout { Layout.fillWidth: true columns: 2 columnSpacing: 14 rowSpacing: 12 Label { text: qsTr("Size") } Slider { Layout.fillWidth: true from: 72; to: 260; stepSize: 4 value: win.settings.catSize onMoved: win.settings.catSize = value } Label { text: qsTr("Pace") } Slider { Layout.fillWidth: true from: 10; to: 200; stepSize: 5 value: win.settings.walkSpeed onMoved: win.settings.walkSpeed = value } Label { text: qsTr("Eyes") } Switch { text: qsTr("Follow the mouse") checked: win.settings.followCursor onToggled: win.settings.followCursor = checked } Label { text: qsTr("Cat") } Switch { text: checked ? qsTr("Napping") : qsTr("Awake") checked: win.cat.paused onToggled: win.cat.paused = checked } } GroupBox { Layout.fillWidth: true title: qsTr("Tricks") Flow { anchors.fill: parent spacing: 8 Button { text: qsTr("Sit"); onClicked: win.cat.doTrick(CatController.Sitting) } Button { text: qsTr("Groom"); onClicked: win.cat.doTrick(CatController.Grooming) } Button { text: qsTr("Stretch"); onClicked: win.cat.doTrick(CatController.Stretching) } Button { text: qsTr("Dash"); onClicked: win.cat.doTrick(CatController.Running) } Button { text: qsTr("Nap"); onClicked: win.cat.doTrick(CatController.Sleeping) } } } Item { Layout.fillHeight: true } RowLayout { Layout.fillWidth: true Label { Layout.fillWidth: true text: qsTr("%n pet(s) so far.", "", win.settings.petCount) color: "#7a7484" } Button { text: qsTr("Quit") onClicked: Qt.quit() } } } }