Files
deskflow/src/apps/deskflow-gui/SetupWizard.cpp
sithlord48 1085df54ed refactor: Reuse compliance
build files and documentation: MIT
  images / sources: GPL-2.0-only
  breeze icons: LGPL-2.0-only
  Microsoft MSM file, vc redist license
2025-01-27 17:05:47 -05:00

90 lines
2.9 KiB
C++

/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2024 Chris Rizzitello <sithlord48@gmail.com>
* SPDX-FileCopyrightText: (C) 2012 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "SetupWizard.h"
#include <QApplication>
#include <QFormLayout>
#include <QPushButton>
#include "common/constants.h"
#include "gui/config/AppConfig.h"
#include "gui/styles.h"
#include "gui/validators/ScreenNameValidator.h"
#include "gui/validators/ValidationError.h"
SetupWizard::SetupWizard(AppConfig &appConfig)
: m_appConfig{appConfig},
m_lblError{new QLabel(this)},
m_lineName{new QLineEdit(this)},
m_btnApply{new QPushButton(tr("Continue"), this)}
{
setWindowTitle(tr("Setup %1").arg(kAppName));
setFixedSize(740, 550);
auto headerFont = QFont(QStringLiteral("Cantarell"), 18, 600);
auto labelTitle = new QLabel(this);
labelTitle->setFont(headerFont);
labelTitle->setText(tr("Name your computer"));
labelTitle->setAlignment(Qt::AlignHCenter | Qt::AlignHCenter);
auto labelName = new QLabel(this);
labelName->setText(tr("Computer Name"));
auto formLayout = new QFormLayout();
formLayout->addRow(labelName, m_lineName);
formLayout->addWidget(m_lblError);
formLayout->addWidget(new QLabel(tr("Call your computer something short and meaningful, but it must have:"), this));
formLayout->addWidget(new QLabel(tr("\t⬤ No spaces"), this));
formLayout->addWidget(new QLabel(tr("\t⬤ Only these special characters: _ - ."), this));
formLayout->addWidget(new QLabel(tr("\t⬤ Only English characters and numbers"), this));
formLayout->addWidget(new QLabel(tr("\t⬤ A different name from other computers"), this));
auto labelImage = new QLabel(this);
labelImage->setPixmap(QPixmap(QStringLiteral(":/image/welcome.png")));
auto mainLayout = new QVBoxLayout();
mainLayout->setContentsMargins(9, 30, 9, 9);
mainLayout->addWidget(labelImage, 0, Qt::AlignHCenter);
mainLayout->addWidget(labelTitle);
mainLayout->addLayout(formLayout);
mainLayout->addSpacerItem(new QSpacerItem(0, 25, QSizePolicy::Fixed, QSizePolicy::Fixed));
mainLayout->addWidget(m_btnApply);
setLayout(mainLayout);
m_lblError->setStyleSheet(deskflow::gui::kStyleErrorActiveLabel);
m_lineName->setText(appConfig.screenName());
m_lineName->setValidator(
new validators::ScreenNameValidator(m_lineName, new validators::ValidationError(this, m_lblError))
);
connect(m_btnApply, &QPushButton::clicked, this, &SetupWizard::accept);
connect(m_lineName, &QLineEdit::textChanged, this, &SetupWizard::nameChanged);
}
void SetupWizard::accept()
{
m_appConfig.setWizardHasRun();
m_appConfig.setScreenName(m_lineName->text());
QDialog::accept();
}
void SetupWizard::nameChanged(const QString &error)
{
m_btnApply->setEnabled(m_lineName->hasAcceptableInput());
}
void SetupWizard::reject()
{
QDialog::reject();
QApplication::exit();
}