From bd924d00acaec482a466865709edbf6833f905a4 Mon Sep 17 00:00:00 2001 From: Nippy Date: Fri, 26 Jun 2026 17:31:35 +0200 Subject: test selector --- .../desktopselect/DesktopSelectViewStep.cpp | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp (limited to 'raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp') diff --git a/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp b/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp new file mode 100644 index 0000000..4af261c --- /dev/null +++ b/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp @@ -0,0 +1,117 @@ +#include "DesktopSelectViewStep.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +CALAMARES_PLUGIN_FACTORY_DEFINITION(DesktopSelectViewStepFactory, registerPlugin();) + +DesktopSelectViewStep::DesktopSelectViewStep(QObject* parent) + : Calamares::ViewStep(parent) + , m_backend(new DesktopBackend(this)) +{ + connect(m_backend, &DesktopBackend::selectionMade, this, [this]() { + emit nextStatusChanged(true); + }); +} + +DesktopSelectViewStep::~DesktopSelectViewStep() +{ + if (m_widget && m_widget->parent() == nullptr) + delete m_widget; +} + +QString DesktopSelectViewStep::prettyName() const +{ + return tr("Desktop"); +} + +void DesktopSelectViewStep::buildWidget() +{ + m_widget = new QWidget(); + auto* layout = new QVBoxLayout(m_widget); + layout->setContentsMargins(0, 0, 0, 0); + + m_quickWidget = new QQuickWidget(); + m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); + + QString modulePath = QStringLiteral("/usr/lib/calamares/modules/desktopselect/ui"); + if (!QDir(modulePath).exists()) + modulePath = QDir::currentPath() + QStringLiteral("/desktopselect/ui"); + + m_quickWidget->engine()->addImportPath(modulePath); + m_quickWidget->rootContext()->setContextProperty("backend", m_backend); + + QString qmlPath = QStringLiteral("/usr/lib/calamares/modules/desktopselect/ui/desktopselect.qml"); + if (!QFile::exists(qmlPath)) + qmlPath = QDir::currentPath() + QStringLiteral("/desktopselect/ui/desktopselect.qml"); + + m_quickWidget->setSource(QUrl::fromLocalFile(qmlPath)); + layout->addWidget(m_quickWidget); +} + +QWidget* DesktopSelectViewStep::widget() +{ + if (!m_widget) + buildWidget(); + return m_widget; +} + +bool DesktopSelectViewStep::isNextEnabled() const +{ + return m_backend && m_backend->selectedIndex() >= 0; +} + +bool DesktopSelectViewStep::isBackEnabled() const { return true; } +bool DesktopSelectViewStep::isAtBeginning() const { return true; } +bool DesktopSelectViewStep::isAtEnd() const { return true; } + +Calamares::JobList DesktopSelectViewStep::jobs() const { return {}; } + +void DesktopSelectViewStep::onLeave() +{ + if (!m_backend || m_backend->selectedIndex() < 0) + return; + + // Merge mandatory + selected desktop packages, deduplicated + QStringList combined = m_mandatoryPackages + m_backend->selectedPackages(); + QStringList unique; + QSet seen; + for (const QString& pkg : combined) { + if (!seen.contains(pkg)) { + seen.insert(pkg); + unique << pkg; + } + } + + QVariantMap op; + op[QStringLiteral("install")] = unique; + QVariantList ops; + ops.append(op); + + if (!Calamares::JobQueue::instance()) + return; + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if (gs) + gs->insert(QStringLiteral("packageOperations"), ops); +} + +void DesktopSelectViewStep::setConfigurationMap(const QVariantMap& config) +{ + m_mandatoryPackages.clear(); + for (const auto& v : config.value("mandatory_packages").toList()) + m_mandatoryPackages << v.toString(); + + QVariantList desktops; + for (const auto& item : config.value("desktops").toList()) + desktops << item; + + m_backend->setDesktops(desktops); +} -- cgit v1.3