Onboarding Tutorial

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

#include <QGuiApplication>
#include <QDir>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QQuickStyle>
#include <QUrl>

#include <utility>

#include <KLocalizedContext>
#include <KLocalizedQmlContext>
#include <KLocalizedString>

static QStringList takeImportPathEnvironmentVariable(const char *name)
{
    const QByteArray value = qgetenv(name);
    if (value.isEmpty()) {
        return {};
    }

    const QStringList paths = QString::fromLocal8Bit(value).split(QDir::listSeparator(), Qt::KeepEmptyParts);
    QStringList normalizedPaths;
    normalizedPaths.reserve(paths.size());

    for (const QString &path : paths) {
        if (path.isEmpty() || QDir::isAbsolutePath(path)) {
            normalizedPaths.append(path);
        } else {
            normalizedPaths.append(QDir::current().absoluteFilePath(path));
        }
    }

    qunsetenv(name);
    return normalizedPaths;
}

int main(int argc, char *argv[])
{
    QStringList importPaths = takeImportPathEnvironmentVariable("QML_IMPORT_PATH");
    importPaths += takeImportPathEnvironmentVariable("QML2_IMPORT_PATH");

    QGuiApplication app(argc, argv);
    KLocalizedString::setApplicationDomain("kirigami-addons6");

    QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));

    QQmlApplicationEngine engine;
    const QDir applicationDir(QCoreApplication::applicationDirPath());
    const QString buildImportPath = applicationDir.absoluteFilePath(QStringLiteral("../../bin"));
    if (QDir(buildImportPath).exists()) {
        importPaths.prepend(buildImportPath);
    }
    importPaths.removeDuplicates();
    for (auto it = importPaths.crbegin(); it != importPaths.crend(); ++it) {
        if (!it->isEmpty()) {
            engine.addImportPath(*it);
        }
    }

    KLocalization::setupLocalizedContext(&engine);
    QObject::connect(
        &engine,
        &QQmlApplicationEngine::objectCreationFailed,
        &app,
        []() {
            QCoreApplication::exit(-1);
        },
        Qt::QueuedConnection);
    engine.load(QUrl(QStringLiteral("qrc:/qt/qml/org/kde/kirigamiaddons/examples/onboardingtutorial/Main.qml")));

    return QGuiApplication::exec();
}