import QtQuick
import QtQuick.Controls
import QtQuick.Dialogs
import QtQuick.Layouts
ApplicationWindow {
height: 900
title: qsTr("Tracer")
visible: true
width: 1200
header: ToolBar {
RowLayout {
Button {
text: qsTr("Choose Image...")
onClicked: fileDialog.open()
}
Button {
text: qsTr("Start")
onClicked: {
stepTimer.start();
}
}
Button {
text: qsTr("Stop")
onClicked: {
stepTimer.stop();
}
}
Label {
text: "Best: %1".arg(tracer.bestSolution)
}
Label {
text: "Gen: %1".arg(tracer.generation)
}
}
}
FileDialog {
id: fileDialog
nameFilters: ["Hedgehog images (*.png)"]
onAccepted: {
console.log("Hello");
baseImage.source = selectedFile;
tracer.start(fileDialog.selectedFile);
tracer.generation = 0;
}
}
Tracer {
id: tracer
property int generation: 0
atoms: [
{
"type": "polygon",
"length": 3,
"pens": ["#9f086e", "#54a2fa"],
"brushes": ["#2c78d2", "#54a2fa"]
},
{
"type": "circle",
"pens": ["#9f086e", "#f29ce7"],
"brushes": ["#d66bcc", "#f29ce7"]
},
{
"type": "circle",
"pens": ["#000000"],
"brushes": [ "#000000"]
},
{
"type": "circle",
"pens": ["#ffffff"],
"brushes": [ "#ffffff"]
}
]
}
Timer {
id: stepTimer
interval: 120
repeat: true
running: false
triggeredOnStart: true
onTriggered: {
tracer.generation = tracer.generation + 1;
tracer.step();
}
}
Rectangle {
anchors.fill: parent
color: "#a0c0a0"
}
ColumnLayout {
anchors.fill: parent
Image {
id: baseImage
Layout.fillWidth: true
Layout.preferredHeight: 32
fillMode: Image.PreserveAspectFit
}
GridLayout {
Layout.fillHeight: true
Layout.fillWidth: true
columns: 30
Repeater {
model: tracer.solutions
Image {
fillMode: Image.PreserveAspectFit
height: 32
source: "file://" + modelData
width: 32
Rectangle {
anchors.fill: parent
border.color: "black"
border.width: 1
color: "transparent"
}
}
}
}
}
}