Onboarding Tutorial

// SPDX-FileCopyrightText: 2026 Sandro Andrade <sandroandrade@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later

import QtQuick
import QtQuick.Controls as QQC2
import QtQuick.Layouts
import org.kde.kirigami as Kirigami
import org.kde.kirigami.platform as Platform
import org.kde.kirigamiaddons.onboarding

Kirigami.ApplicationWindow {
    id: root

    height: 480
    title: qsTr("Kirigami Addons Onboarding Tutorial")
    visible: true
    width: 640

    Onboarding.onFinished: swipeView.currentIndex = 0

    Shortcut {
        context: Qt.ApplicationShortcut
        sequence: "F1"

        onActivated: Onboarding.start()
    }

    Shortcut {
        context: Qt.ApplicationShortcut
        sequence: "F2"

        onActivated: Onboarding.start("advanced")
    }

    Component {
        id: onboardingAdditionalData

        ColumnLayout {
            readonly property var additionalData: Onboarding.currentItem?.additionalData ?? ({})

            Platform.Theme.colorSet: Platform.Theme.Tooltip
            Platform.Theme.inherit: false

            implicitWidth: Math.max(video.Layout.preferredWidth, videoCaption.implicitWidth)
            spacing: 0
            visible: video.source.toString().length > 0

            AnimatedImage {
                id: video

                Layout.alignment: Qt.AlignHCenter
                Layout.maximumHeight: Kirigami.Units.gridUnit * 7
                Layout.maximumWidth: Kirigami.Units.gridUnit * 14
                Layout.preferredHeight: implicitWidth > 0 ? Math.min(Layout.preferredWidth * implicitHeight / implicitWidth, Layout.maximumHeight) : 0
                Layout.preferredWidth: implicitHeight > 0 && implicitWidth > 0 ? Math.min(implicitWidth, Layout.maximumWidth, Layout.maximumHeight * implicitWidth / implicitHeight) : 0
                fillMode: Image.PreserveAspectFit
                sourceSize.width: Layout.maximumWidth
                source: parent.additionalData.video ?? ""
            }

            QQC2.Label {
                id: videoCaption

                Layout.alignment: Qt.AlignHCenter
                Layout.preferredWidth: Math.min(implicitWidth, video.Layout.preferredWidth)
                color: Platform.Theme.textColor
                horizontalAlignment: Text.AlignHCenter
                text: parent.additionalData.videoCaption ?? ""
                visible: text.length > 0
                wrapMode: Text.WordWrap
            }
        }
    }

    Binding {
        target: Onboarding
        property: "additionalDataComponent"
        value: onboardingAdditionalData
    }

    Item {
        id: pageHost

        anchors.fill: parent
        Onboarding.isSource: true
        Onboarding.sourceGroups: ["", "advanced"]

        ColumnLayout {
            anchors.fill: parent
            spacing: 0

            QQC2.SwipeView {
                id: swipeView

                Layout.fillHeight: true
                Layout.fillWidth: true
                interactive: !Onboarding.active

                Page1 {
                    swipeView: swipeView
                }

                Page2 {
                    swipeView: swipeView
                }

                Page3 {
                    swipeView: swipeView
                }
            }

            QQC2.PageIndicator {
                Layout.alignment: Qt.AlignHCenter
                Layout.bottomMargin: Kirigami.Units.largeSpacing
                count: swipeView.count
                currentIndex: swipeView.currentIndex
            }
        }
    }
}