From 1f25b07162a3683faf417c882ca16ca7c99de6ea Mon Sep 17 00:00:00 2001 From: arm64v8a <48624112+arm64v8a@users.noreply.github.com> Date: Mon, 10 Apr 2023 15:44:02 +0900 Subject: [PATCH] feat: first time setup --- CMakeLists.txt | 4 ++ main/main.cpp | 61 +++++++++++++++++----- translations/fa_IR.ts | 21 ++++++++ translations/zh_CN.ts | 19 +++++++ ui/dialog_first_setup.cpp | 23 +++++++++ ui/dialog_first_setup.h | 23 +++++++++ ui/dialog_first_setup.ui | 106 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 243 insertions(+), 14 deletions(-) create mode 100644 ui/dialog_first_setup.cpp create mode 100644 ui/dialog_first_setup.h create mode 100644 ui/dialog_first_setup.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index eabf7f1..f9bb4ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -238,6 +238,10 @@ set(PROJECT_SOURCES ui/dialog_hotkey.h ui/dialog_hotkey.ui + ui/dialog_first_setup.cpp + ui/dialog_first_setup.h + ui/dialog_first_setup.ui + ui/widget/ProxyItem.cpp ui/widget/ProxyItem.h ui/widget/ProxyItem.ui diff --git a/main/main.cpp b/main/main.cpp index fe8dc1d..a093598 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1,5 +1,3 @@ -#include "ui/mainwindow_interface.h" - #include #include @@ -13,6 +11,9 @@ #include "3rdparty/RunGuard.hpp" #include "main/NekoRay.hpp" +#include "ui/mainwindow_interface.h" +#include "ui/dialog_first_setup.h" + #ifdef Q_OS_WIN #include "sys/windows/MiniDump.h" #endif @@ -24,9 +25,32 @@ void signal_handler(int signum) { } } +QTranslator* trans = nullptr; +QTranslator* trans_qt = nullptr; + +void loadTranslate(const QString& locale) { + if (trans != nullptr) { + trans->deleteLater(); + } + if (trans_qt != nullptr) { + trans_qt->deleteLater(); + } + // + trans = new QTranslator; + trans_qt = new QTranslator; + QLocale::setDefault(QLocale(locale)); + // + if (trans->load(":/translations/" + locale + ".qm")) { + QCoreApplication::installTranslator(trans); + } + if (trans_qt->load(QApplication::applicationDirPath() + "/qtbase_" + locale + ".qm")) { + QCoreApplication::installTranslator(trans_qt); + } +} + #define LOCAL_SERVER_PREFIX "nekoraylocalserver-" -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { // Core dump #ifdef Q_OS_WIN Windows_SetCrashHandler(); @@ -121,7 +145,25 @@ int main(int argc, char *argv[]) { } // Load coreType - NekoRay::coreType = ReadFileText("groups/coreType").toInt(); // default to 0 + auto coreLoaded = ReadFileText("groups/coreType"); + if (coreLoaded.isEmpty()) { + loadTranslate(QLocale().name()); + auto dialogFirstSetup = new DialogFirstSetup; + auto coreSelected = dialogFirstSetup->exec(); + dialogFirstSetup->deleteLater(); + if (coreSelected < 0) { + return 0; + } else { + NekoRay::coreType = coreSelected; + QFile file; + file.setFileName("groups/coreType"); + file.open(QIODevice::ReadWrite | QIODevice::Truncate); + file.write(Int2String(coreSelected).toUtf8()); + file.close(); + } + } else { + NekoRay::coreType = coreLoaded.toInt(); + } // Dir QDir dir; @@ -182,16 +224,7 @@ int main(int argc, char *argv[]) { locale = QLocale().name(); } QGuiApplication::tr("QT_LAYOUT_DIRECTION"); - QLocale::setDefault(QLocale(locale)); - // - QTranslator trans; - if (trans.load(":/translations/" + locale + ".qm")) { - QCoreApplication::installTranslator(&trans); - } - QTranslator trans_qt; - if (trans_qt.load(QApplication::applicationDirPath() + "/qtbase_" + locale + ".qm")) { - QCoreApplication::installTranslator(&trans_qt); - } + loadTranslate(locale); // Signals signal(SIGTERM, signal_handler); diff --git a/translations/fa_IR.ts b/translations/fa_IR.ts index 67cbee5..4d12dd4 100644 --- a/translations/fa_IR.ts +++ b/translations/fa_IR.ts @@ -412,6 +412,27 @@ + + DialogFirstSetup + + First time setup + + + + It looks like you are using this software for the first time, please select a core. + +These settings can be changed later. + + + + Exit + خروج + + + Quit + + + DialogHotkey diff --git a/translations/zh_CN.ts b/translations/zh_CN.ts index d040c37..2a59eff 100644 --- a/translations/zh_CN.ts +++ b/translations/zh_CN.ts @@ -402,6 +402,25 @@ 自定义 (%1 完整配置) + + DialogFirstSetup + + First time setup + 首次设置 + + + It looks like you are using this software for the first time, please select a core. + +These settings can be changed later. + 看来您是第一次使用该软件,请选择内核。 + +这些设置可以稍后更改。 + + + Quit + 退出 + + DialogHotkey diff --git a/ui/dialog_first_setup.cpp b/ui/dialog_first_setup.cpp new file mode 100644 index 0000000..23b5e49 --- /dev/null +++ b/ui/dialog_first_setup.cpp @@ -0,0 +1,23 @@ +#include "dialog_first_setup.h" +#include "ui_dialog_first_setup.h" + +#include "main/NekoRay.hpp" + +DialogFirstSetup::DialogFirstSetup(QWidget *parent) : QDialog(parent), ui(new Ui::DialogFirstSetup) { + ui->setupUi(this); +} + +DialogFirstSetup::~DialogFirstSetup() { + delete ui; +} + +void DialogFirstSetup::onButtonClicked() { + auto s = sender(); + if (s == ui->v2ray) { + done(NekoRay::CoreType::V2RAY); + } else if (s == ui->singbox) { + done(NekoRay::CoreType::SING_BOX); + } else { + done(-1); + } +} diff --git a/ui/dialog_first_setup.h b/ui/dialog_first_setup.h new file mode 100644 index 0000000..ac244b5 --- /dev/null +++ b/ui/dialog_first_setup.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { + class DialogFirstSetup; +} +QT_END_NAMESPACE + +class DialogFirstSetup : public QDialog { + Q_OBJECT + +public: + explicit DialogFirstSetup(QWidget *parent = nullptr); + ~DialogFirstSetup() override; + +private: + Ui::DialogFirstSetup *ui; + +private slots: + void onButtonClicked(); +}; diff --git a/ui/dialog_first_setup.ui b/ui/dialog_first_setup.ui new file mode 100644 index 0000000..27177ae --- /dev/null +++ b/ui/dialog_first_setup.ui @@ -0,0 +1,106 @@ + + + DialogFirstSetup + + + + 0 + 0 + 400 + 300 + + + + First time setup + + + + + + It looks like you are using this software for the first time, please select a core. + +These settings can be changed later. + + + true + + + + + + + V2Ray + + + + + + + sing-box + + + + + + + Quit + + + + + + + + + v2ray + clicked() + DialogFirstSetup + onButtonClicked() + + + 199 + 196 + + + 199 + 149 + + + + + singbox + clicked() + DialogFirstSetup + onButtonClicked() + + + 199 + 236 + + + 199 + 149 + + + + + quit + clicked() + DialogFirstSetup + onButtonClicked() + + + 199 + 276 + + + 199 + 149 + + + + + + onButtonClicked() + +