Revision control

++ // Copyright (C) 2022 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++
++ import QtQuick
++ import QtQuick.Controls
++
++ Item {
++ id: rootItem
++
++ property string currentImage: imagesModel ? imagesModel.currentImageFile : ""
++ property string description
++ property int currentIndex: 0
++ property var imagesModel: null
++ property bool open: false
++ property bool showAddButton: false
++
++ signal addPressed
++
++ height: parent.height - 20
++ width: height
++
++ onCurrentIndexChanged: {
++ imagesModel.setImageIndex(currentIndex);
++ }
++
++ Item {
++ anchors.fill: parent
++ Rectangle {
++ anchors.fill: parent
++ color: mainView.backgroundColor2
++ border.color: mainView.foregroundColor1
++ opacity: 0.8
++ radius: 4
++ }
++ Image {
++ id: currentImageItem
++ anchors.fill: parent
++ anchors.margins: 6
++ source: rootItem.currentImage
++ fillMode: Image.PreserveAspectFit
++ mipmap: true
++ sourceSize: Qt.size(128, 128)
++ }
++ }
++ MouseArea {
++ id: mouseArea
++ anchors.fill: parent
++ hoverEnabled: true
++ onClicked: {
++ rootItem.open = !rootItem.open;
++ }
++ }
++
++ Column {
++ id: imageSelector
++ anchors.top: parent.bottom
++ visible: rootItem.open
++ Repeater {
++ model: imagesModel
++ Item {
++ width: rootItem.width
++ height: rootItem.height
++ Rectangle {
++ anchors.fill: parent
++ color: mainView.backgroundColor2
++ border.color: mainView.foregroundColor1
++ border.width: 1
++ opacity: 0.8
++ }
++ Image {
++ anchors.fill: parent
++ anchors.margins: 6
++ source: model.file
++ fillMode: Image.PreserveAspectFit
++ mipmap: true
++ sourceSize: Qt.size(128, 128)
++ }
++ MouseArea {
++ anchors.fill: parent
++ onClicked: {
++ rootItem.currentIndex = index;
++ rootItem.open = false;
++ }
++ }
++ }
++ }
++ // Optionally show add button as the last item
++ Rectangle {
++ width: rootItem.width
++ height: rootItem.height
++ visible: rootItem.showAddButton
++ color: mainView.backgroundColor1
++ border.color: mainView.foregroundColor2
++ border.width: 1
++ radius: 4
++ Image {
++ anchors.fill: parent
++ anchors.margins: 6
++ source: "images/icon_add.png"
++ fillMode: Image.PreserveAspectFit
++ mipmap: true
++ }
++ MouseArea {
++ anchors.fill: parent
++ onClicked: {
++ rootItem.addPressed();
++ rootItem.open = false;
++ }
++ }
++ }
++ }
++ ToolTip {
++ parent: rootItem
++ visible: mouseArea.containsMouse
++ delay: 1000
++ text: description
++ }
++ }