From 5d5e32a6768290b8c3a2698c5028e3300857e231 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Thu, 20 Feb 2025 21:56:55 -0500 Subject: [PATCH] refactor: remove setupwizard --- src/apps/deskflow-gui/CMakeLists.txt | 2 - src/apps/deskflow-gui/MainWindow.h | 2 - src/apps/deskflow-gui/SetupWizard.cpp | 89 -------------------------- src/apps/deskflow-gui/SetupWizard.h | 35 ---------- src/apps/deskflow-gui/main.cpp | 12 ---- src/apps/res/deskflow.qrc | 1 - src/apps/res/image/welcome.png | Bin 11113 -> 0 bytes 7 files changed, 141 deletions(-) delete mode 100644 src/apps/deskflow-gui/SetupWizard.cpp delete mode 100644 src/apps/deskflow-gui/SetupWizard.h delete mode 100644 src/apps/res/image/welcome.png diff --git a/src/apps/deskflow-gui/CMakeLists.txt b/src/apps/deskflow-gui/CMakeLists.txt index 7723d0668..fa3f99ea7 100644 --- a/src/apps/deskflow-gui/CMakeLists.txt +++ b/src/apps/deskflow-gui/CMakeLists.txt @@ -67,8 +67,6 @@ add_executable(${target} WIN32 MACOSX_BUNDLE ScreenSetupModel.h ServerConfig.cpp ServerConfig.h - SetupWizard.cpp - SetupWizard.h VersionChecker.cpp VersionChecker.h dialogs/AboutDialog.cpp diff --git a/src/apps/deskflow-gui/MainWindow.h b/src/apps/deskflow-gui/MainWindow.h index 8b4addae5..c310baaa2 100644 --- a/src/apps/deskflow-gui/MainWindow.h +++ b/src/apps/deskflow-gui/MainWindow.h @@ -48,7 +48,6 @@ class QAbstractButton; class QLocalServer; class DeskflowApplication; -class SetupWizard; namespace Ui { class MainWindow; @@ -62,7 +61,6 @@ class MainWindow : public QMainWindow Q_OBJECT friend class DeskflowApplication; - friend class SetupWizard; friend class SettingsDialog; public: diff --git a/src/apps/deskflow-gui/SetupWizard.cpp b/src/apps/deskflow-gui/SetupWizard.cpp deleted file mode 100644 index 840219fe2..000000000 --- a/src/apps/deskflow-gui/SetupWizard.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2024 Chris Rizzitello - * SPDX-FileCopyrightText: (C) 2012 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "SetupWizard.h" - -#include -#include -#include - -#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(); -} diff --git a/src/apps/deskflow-gui/SetupWizard.h b/src/apps/deskflow-gui/SetupWizard.h deleted file mode 100644 index 30da428fb..000000000 --- a/src/apps/deskflow-gui/SetupWizard.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2024 Chris Rizzitello - * SPDX-FileCopyrightText: (C) 2012 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#include - -class AppConfig; -class QLabel; -class QLineEdit; - -class SetupWizard : public QDialog -{ - Q_OBJECT - -public: - explicit SetupWizard(AppConfig &appConfig); - ~SetupWizard() = default; - -protected: - void accept() override; - void reject() override; - -private: - void nameChanged(const QString &error); - - AppConfig &m_appConfig; - QLabel *m_lblError = nullptr; - QLineEdit *m_lineName = nullptr; - QPushButton *m_btnApply = nullptr; -}; diff --git a/src/apps/deskflow-gui/main.cpp b/src/apps/deskflow-gui/main.cpp index c02996705..46d9e19b3 100644 --- a/src/apps/deskflow-gui/main.cpp +++ b/src/apps/deskflow-gui/main.cpp @@ -7,7 +7,6 @@ */ #include "MainWindow.h" -#include "SetupWizard.h" #include "common/constants.h" #include "gui/Logger.h" #include "gui/config/AppConfig.h" @@ -148,17 +147,6 @@ int main(int argc, char *argv[]) &configScopes, &ConfigScopes::saving, &appConfig, [&appConfig]() { appConfig.commit(); }, Qt::DirectConnection ); - if (appConfig.wizardShouldRun()) { - SetupWizard wizard(appConfig); - auto result = wizard.exec(); - if (result != QDialog::Accepted) { - qInfo("wizard cancelled, exiting"); - return 0; - } - - configScopes.save(); - } - MainWindow mainWindow(configScopes, appConfig); mainWindow.open(); diff --git a/src/apps/res/deskflow.qrc b/src/apps/res/deskflow.qrc index 79dc38cdf..534207e10 100644 --- a/src/apps/res/deskflow.qrc +++ b/src/apps/res/deskflow.qrc @@ -107,6 +107,5 @@ icons/deskflow-light/status/64/security-low.svg icons/deskflow-light/status/64/security-medium.svg icons/deskflow-light/index.theme - image/welcome.png diff --git a/src/apps/res/image/welcome.png b/src/apps/res/image/welcome.png deleted file mode 100644 index 0c54917233e6f023aaf55788564d81695c259d3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11113 zcmV-vE0)xWP)Ib$_AKT~%FG-PK3Z&+pe%AJv_v z`l+{`_xRq|LNVwdSmf*SO=H`-a-MUp#42EH$7-Vto+`07l`1o8#xLgl;?J8sqHb82SyoCMT4_aDU zKy(Mipb0Tjdmu>6?oMMw27z-avfyC15_a3dNM0NxxiUI5sX=6`)mq31JdHi%l7gZK z4t6VM-+gULN=h-s(25R6YA+(&seQmfF@m?E!;reRw${${>0)X>L{@@>-IjJ_iPEk~ z?a|5e8JQoU=#mz}LQzMw-tCgqF*5t0nBCTcg0{&iz$7~AIL45NPivN)+@ zPzFx6{reBnf&B;Qz=4CbXV1s%q~&CHFmf*q6}h8|)a;;v$RKpkqy{9$0}srjeS1IU zq@6SOUVe)aI5=3p{x7ubx#gVP7MEqoiBqLZ$z((YsXf+tIR!bYalHIE{q!eybL$Ku zFMMo4jLaqg(&V1P`?&RXSuBMW6{Ty*L_|EP&C<@m^r^RU#}8!2O)Fq^@B=~LLQ@Jo zSzTS-s&}!iuCCGadD#+O?)zG{?)R7pw_lOQ|9ⅆgDup0RLe8_yQces``f70aXlS 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