diff options
Diffstat (limited to 'raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp')
| -rw-r--r-- | raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp | 191 |
1 files changed, 150 insertions, 41 deletions
diff --git a/raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp b/raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp index c2d58c7..2f7c1ea 100644 --- a/raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp +++ b/raveos-calamares-module/welcome/RaveWelcomeViewStep.cpp @@ -1,25 +1,64 @@ #include "RaveWelcomeViewStep.h" -#include <QComboBox> +#include "RaveBillentyuzet.h" + +#include <QButtonGroup> #include <QFrame> +#include <QGridLayout> #include <QHBoxLayout> #include <QLabel> #include <QLocale> #include <QPainter> #include <QProcess> #include <QPixmap> -#include <QResizeEvent> +#include <QPushButton> #include <QVBoxLayout> #include <Branding.h> #include <GlobalStorage.h> #include <JobQueue.h> +#include <ViewManager.h> #include <locale/Translation.h> -#include <locale/TranslationsModel.h> #include <utils/Retranslator.h> CALAMARES_PLUGIN_FACTORY_DEFINITION(RaveWelcomeViewStepFactory, registerPlugin<RaveWelcomeViewStep>();) +namespace +{ +struct LanguageTexts +{ + QString title; + QString next; + QString installer; +}; + +LanguageTexts textsFor(const QString& localeId) +{ + if (localeId.startsWith(QLatin1String("hu"))) + return { QStringLiteral("VÁLASSZ NYELVET"), QStringLiteral("Tovább"), QStringLiteral("TELEPÍTŐ") }; + if (localeId.startsWith(QLatin1String("de"))) + return { QStringLiteral("SPRACHE WÄHLEN"), QStringLiteral("Weiter"), QStringLiteral("INSTALLATION") }; + return { QStringLiteral("CHOOSE YOUR LANGUAGE"), QStringLiteral("Next"), QStringLiteral("INSTALLER") }; +} + +QString fullLocaleName(const QString& localeId) +{ + QString lang = QLocale(localeId).name(); + if (lang.isEmpty()) + lang = localeId; + return lang.contains('.') ? lang : lang + ".UTF-8"; +} + +QString nativeName(const QString& localeId) +{ + QString name = QLocale(localeId).nativeLanguageName(); + if (name.isEmpty()) + return localeId; + name[0] = name[0].toUpper(); + return name; +} +} + class BgWidget : public QWidget { public: @@ -30,9 +69,16 @@ public: protected: void paintEvent(QPaintEvent*) override { - if (m_pixmap.isNull()) return; QPainter p(this); - p.drawPixmap(rect(), m_pixmap); + p.fillRect(rect(), QColor(0x1a, 0x1b, 0x1d)); + if (m_pixmap.isNull()) return; + const QSize scaled = m_pixmap.size().scaled(size(), Qt::KeepAspectRatioByExpanding); + const QRect target((width() - scaled.width()) / 2, + (height() - scaled.height()) * 4 / 10, + scaled.width(), + scaled.height()); + p.setRenderHint(QPainter::SmoothPixmapTransform); + p.drawPixmap(target, m_pixmap); } private: @@ -42,7 +88,8 @@ private: RaveWelcomeViewStep::RaveWelcomeViewStep(QObject* parent) : Calamares::ViewStep(parent) { - m_localeIds = { "de", "en", "en_GB", "hu" }; + RaveBillentyuzet::regisztral(); + m_localeIds = { "hu", "en", "en_GB", "de" }; } RaveWelcomeViewStep::~RaveWelcomeViewStep() @@ -56,13 +103,13 @@ QString RaveWelcomeViewStep::prettyName() const const QString locale = getLocale(); if (locale.startsWith("hu")) { - return QStringLiteral("Üdvözlés"); + return QStringLiteral("Nyelv"); } if (locale.startsWith("de")) { - return QStringLiteral("Willkommen"); + return QStringLiteral("Sprache"); } - return tr("Welcome"); + return tr("Language"); } QString RaveWelcomeViewStep::getLocale() const @@ -103,53 +150,114 @@ void RaveWelcomeViewStep::buildWidget() if (!imgPath.isEmpty()) bg->setPixmap(QPixmap(imgPath)); - auto* bar = new QFrame(); - bar->setObjectName("ravewelcomeBar"); - bar->setFixedHeight(58); + m_tag = new QLabel(); + m_tag->setObjectName("ravewelcomeTag"); - m_langCombo = new QComboBox(bar); - m_langCombo->setObjectName("ravewelcomeCombo"); - m_langCombo->setFixedHeight(40); - m_langCombo->setMinimumWidth(300); + auto* panel = new QFrame(); + panel->setObjectName("ravewelcomeBar"); - auto* model = new Calamares::Locale::TranslationsModel(m_localeIds, m_langCombo); - m_langCombo->setModel(model); + m_title = new QLabel(); + m_title->setObjectName("ravewelcomeTitle"); + m_localeLabel = new QLabel(); + m_localeLabel->setObjectName("ravewelcomeLocale"); - QLocale sys = QLocale::system(); - QString sysName = sys.name(); - m_currentLocaleIndex = 0; + auto* headerLayout = new QHBoxLayout(); + headerLayout->setContentsMargins(0, 0, 0, 0); + headerLayout->addWidget(m_title); + headerLayout->addStretch(); + headerLayout->addWidget(m_localeLabel, 0, Qt::AlignBottom); + + m_langButtons = new QButtonGroup(panel); + m_langButtons->setExclusive(true); + auto* langLayout = new QGridLayout(); + langLayout->setContentsMargins(0, 0, 0, 0); + langLayout->setHorizontalSpacing(8); for (int i = 0; i < m_localeIds.size(); ++i) { - if (m_localeIds[i] == sysName || sysName.startsWith(m_localeIds[i].left(2))) - { - m_currentLocaleIndex = i; - break; - } + auto* button = new QPushButton(nativeName(m_localeIds[i])); + button->setObjectName("ravewelcomeLang"); + button->setCheckable(true); + button->setMinimumHeight(48); + button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + m_langButtons->addButton(button, i); + langLayout->addWidget(button, 0, i); + } + + m_next = new QPushButton(); + m_next->setObjectName("ravewelcomeNext"); + m_next->setMinimumHeight(48); + connect(m_next, &QPushButton::clicked, this, []() + { + if (auto* vm = Calamares::ViewManager::instance()) + vm->next(); + }); + + auto* actionLayout = new QHBoxLayout(); + actionLayout->setContentsMargins(0, 0, 0, 0); + actionLayout->setSpacing(12); + actionLayout->addLayout(langLayout, 1); + actionLayout->addWidget(m_next); + + auto* panelLayout = new QVBoxLayout(panel); + panelLayout->setContentsMargins(24, 20, 24, 20); + panelLayout->setSpacing(14); + panelLayout->addLayout(headerLayout); + panelLayout->addLayout(actionLayout); + + const QString sysName = QLocale::system().name(); + int exact = -1; + int prefix = -1; + for (int i = 0; i < m_localeIds.size(); ++i) + { + if (m_localeIds[i] == sysName) + exact = i; + else if (prefix < 0 && sysName.startsWith(m_localeIds[i].left(2))) + prefix = i; } - int enIdx = m_localeIds.indexOf("en"); - if (enIdx >= 0 && m_currentLocaleIndex == 0 && m_localeIds[0] != "en") - m_currentLocaleIndex = enIdx; + if (exact >= 0) + m_currentLocaleIndex = exact; + else if (prefix >= 0) + m_currentLocaleIndex = prefix; + else + m_currentLocaleIndex = qMax(0, m_localeIds.indexOf("en")); - m_langCombo->setCurrentIndex(m_currentLocaleIndex); + if (auto* button = m_langButtons->button(m_currentLocaleIndex)) + button->setChecked(true); applyLiveKeyboardLayout(m_localeIds.value(m_currentLocaleIndex)); - connect(m_langCombo, QOverload<int>::of(&QComboBox::activated), + connect(m_langButtons, &QButtonGroup::idClicked, this, &RaveWelcomeViewStep::onLanguageChanged); - auto* barLayout = new QHBoxLayout(bar); - barLayout->setContentsMargins(16, 0, 16, 0); - barLayout->addStretch(); - barLayout->addWidget(m_langCombo); - barLayout->addStretch(); - auto* mainLayout = new QVBoxLayout(bg); - mainLayout->setContentsMargins(0, 0, 0, 0); mainLayout->setSpacing(0); + mainLayout->addWidget(m_tag, 0, Qt::AlignLeft | Qt::AlignTop); mainLayout->addStretch(); - mainLayout->addWidget(bar); + mainLayout->addWidget(panel); m_widget = bg; + updateTexts(); +} + +void RaveWelcomeViewStep::updateTexts() +{ + const QString localeId = m_localeIds.value(m_currentLocaleIndex); + const LanguageTexts texts = textsFor(localeId); + + QString version; + if (Calamares::Branding::instance()) + version = Calamares::Branding::instance()->string(Calamares::Branding::Version); + const QString product = version.isEmpty() ? QStringLiteral("RAVEOS") : QStringLiteral("RAVEOS ") + version; + + m_tag->setText(product + QStringLiteral(" · ") + texts.installer); + m_title->setText(texts.title); + m_localeLabel->setText(fullLocaleName(localeId)); + m_next->setText(texts.next); +} + +QSize RaveWelcomeViewStep::widgetMargins(Qt::Orientations) +{ + return QSize(28, 24); } QWidget* RaveWelcomeViewStep::widget() @@ -172,10 +280,10 @@ void RaveWelcomeViewStep::onLanguageChanged(int index) Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if (gs) { - QString lang = QLocale(localeId).name(); // e.g. "hu" -> "hu_HU" + QString lang = QLocale(localeId).name(); if (lang.isEmpty()) lang = localeId; - QString fullLocale = lang.contains('.') ? lang : lang + ".UTF-8"; + const QString fullLocale = fullLocaleName(localeId); const char* lcKeys[] = { "LANG", "LC_NUMERIC", "LC_TIME", "LC_MONETARY", "LC_PAPER", @@ -195,6 +303,7 @@ void RaveWelcomeViewStep::onLanguageChanged(int index) Calamares::installTranslator(tid, brandingTranslationsPrefix()); applyLiveKeyboardLayout(localeId); + updateTexts(); } QString RaveWelcomeViewStep::brandingTranslationsPrefix() const |