aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2022-05-09 16:33:50 +0000
committerSaturneric <[email protected]>2022-05-09 16:33:50 +0000
commit47abca2607c8ec0ee50a67001707cabdf2b6608e (patch)
tree46a0235ea8bc33794d248e1916060321fb2c3750
parentfix: modified init order (diff)
downloadGpgFrontend-47abca2607c8ec0ee50a67001707cabdf2b6608e.tar.gz
GpgFrontend-47abca2607c8ec0ee50a67001707cabdf2b6608e.zip
feat: improve UI library's encapsulation
-rw-r--r--.gitignore1
-rw-r--r--src/init.cpp84
-rw-r--r--src/main.cpp62
-rw-r--r--src/ui/CMakeLists.txt4
-rw-r--r--src/ui/GpgFrontendUI.h2
-rw-r--r--src/ui/GpgFrontendUIInit.cpp138
-rw-r--r--src/ui/GpgFrontendUIInit.h7
7 files changed, 155 insertions, 143 deletions
diff --git a/.gitignore b/.gitignore
index d1ac8c97..7b2c01dc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@ src/GpgFrontend.h
src/GpgFrontendBuildInfo.h
src/GpgFrontendBuildInstallInfo.h
src/core/GpgFrontendCoreExport.h
+src/core/GpgFrontendUIExport.h
docs/
# gettext
diff --git a/src/init.cpp b/src/init.cpp
index 7aefc00f..2f4955f5 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -47,86 +47,4 @@ std::vector<std::filesystem::path> get_files_of_directory(
}
}
return path_list;
-}
-
-/**
- * @brief setup the locale and load the translations
- *
- */
-void init_locale() {
- // get the instance of the GlobalSettingStation
- auto& settings =
- GpgFrontend::GlobalSettingStation::GetInstance().GetUISettings();
-
- // create general settings if not exist
- if (!settings.exists("general") ||
- settings.lookup("general").getType() != libconfig::Setting::TypeGroup)
- settings.add("general", libconfig::Setting::TypeGroup);
-
- // set system default at first
- auto& general = settings["general"];
- if (!general.exists("lang"))
- general.add("lang", libconfig::Setting::TypeString) = "";
-
- // sync the settings to the file
- GpgFrontend::GlobalSettingStation::GetInstance().SyncSettings();
-
- LOG(INFO) << "current system locale" << setlocale(LC_ALL, nullptr);
-
- // read from settings file
- std::string lang;
- if (!general.lookupValue("lang", lang)) {
- LOG(ERROR) << _("could not read properly from configure file");
- };
-
- LOG(INFO) << "lang from settings" << lang;
- LOG(INFO) << "project name" << PROJECT_NAME;
- LOG(INFO) << "locales path"
- << GpgFrontend::GlobalSettingStation::GetInstance()
- .GetLocaleDir()
- .c_str();
-
-#ifndef WINDOWS
- if (!lang.empty()) {
- std::string lc = lang.empty() ? "" : lang + ".UTF-8";
-
- // set LC_ALL
- auto* locale_name = setlocale(LC_ALL, lc.c_str());
- if (locale_name == nullptr) LOG(WARNING) << "set LC_ALL failed" << lc;
- auto language = getenv("LANGUAGE");
- // set LANGUAGE
- std::string language_env = language == nullptr ? "en" : language;
- language_env.insert(0, lang + ":");
- LOG(INFO) << "language env" << language_env;
- if (setenv("LANGUAGE", language_env.c_str(), 1)) {
- LOG(WARNING) << "set LANGUAGE failed" << language_env;
- };
- }
-#else
- if (!lang.empty()) {
- std::string lc = lang.empty() ? "" : lang;
-
- // set LC_ALL
- auto* locale_name = setlocale(LC_ALL, lc.c_str());
- if (locale_name == nullptr) LOG(WARNING) << "set LC_ALL failed" << lc;
-
- auto language = getenv("LANGUAGE");
- // set LANGUAGE
- std::string language_env = language == nullptr ? "en" : language;
- language_env.insert(0, lang + ":");
- language_env.insert(0, "LANGUAGE=");
- LOG(INFO) << "language env" << language_env;
- if (putenv(language_env.c_str())) {
- LOG(WARNING) << "set LANGUAGE failed" << language_env;
- };
- }
-#endif
-
- bindtextdomain(PROJECT_NAME,
- GpgFrontend::GlobalSettingStation::GetInstance()
- .GetLocaleDir()
- .u8string()
- .c_str());
- bind_textdomain_codeset(PROJECT_NAME, "utf-8");
- textdomain(PROJECT_NAME);
-}
+} \ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index 6a03f5ea..24f2b7fa 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -57,12 +57,6 @@ jmp_buf recover_env;
/**
* @brief
*
- */
-extern void init_locale();
-
-/**
- * @brief
- *
* @param sig
*/
extern void handle_signal(int sig);
@@ -125,9 +119,6 @@ int main(int argc, char* argv[]) {
file.close();
#endif
- // init ui library
- GpgFrontend::UI::InitGpgFrontendUI();
-
/**
* internationalisation. loop to restart main window
* with changed translation when settings change.
@@ -144,56 +135,13 @@ int main(int argc, char* argv[]) {
#ifdef RELEASE
try {
#endif
- // init the i18n support
- init_locale();
-
- // create the thread to load the gpg context
- auto* init_ctx_thread = new GpgFrontend::CtxCheckThread();
- QApplication::connect(init_ctx_thread, &QThread::finished, init_ctx_thread,
- &QThread::deleteLater);
-
- // create and show loading window before starting the main window
- auto* waiting_dialog = new QProgressDialog();
- waiting_dialog->setMaximum(0);
- waiting_dialog->setMinimum(0);
- auto waiting_dialog_label =
- new QLabel(QString(_("Loading Gnupg Info...")) + "<br /><br />" +
- _("If this process is too slow, please set the key "
- "server address appropriately in the gnupg configuration "
- "file (depending "
- "on the network situation in your country or region)."));
- waiting_dialog_label->setWordWrap(true);
- waiting_dialog->setLabel(waiting_dialog_label);
- waiting_dialog->resize(420, 120);
- QApplication::connect(init_ctx_thread, &QThread::finished, [=]() {
- waiting_dialog->finished(0);
- waiting_dialog->deleteLater();
- });
- QApplication::connect(waiting_dialog, &QProgressDialog::canceled, [=]() {
- LOG(INFO) << "cancel clicked";
- if (init_ctx_thread->isRunning()) init_ctx_thread->terminate();
- QCoreApplication::quit();
- exit(0);
- });
-
- // show the loading window
- waiting_dialog->show();
- waiting_dialog->setFocus();
-
- // start the thread to load the gpg context
- init_ctx_thread->start();
- QEventLoop loop;
- QApplication::connect(init_ctx_thread, &QThread::finished, &loop,
- &QEventLoop::quit);
- loop.exec();
-
QApplication::setQuitOnLastWindowClosed(true);
- // create main window and show it
- auto main_window = std::make_unique<GpgFrontend::UI::MainWindow>();
- main_window->Init();
- main_window->show();
- return_from_event_loop_code = QApplication::exec();
+ // init ui library
+ GpgFrontend::UI::InitGpgFrontendUI();
+
+ // create main window
+ return_from_event_loop_code = GpgFrontend::UI::RunGpgFrontendUI();
#ifdef RELEASE
} catch (...) {
// catch all unhandled exceptions and notify the user
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index c23fa8ed..6e3ee4be 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -39,7 +39,11 @@ aux_source_directory(import_export UI_SOURCE)
aux_source_directory(dialog UI_SOURCE)
# define libgpgfrontend_ui
+set(CMAKE_CXX_VISIBILITY_PRESET hidden)
+set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
add_library(gpgfrontend_ui SHARED ${UI_SOURCE})
+set(_export_file "${CMAKE_CURRENT_SOURCE_DIR}/GpgFrontendUIExport.h")
+generate_export_header(gpgfrontend_ui EXPORT_FILE_NAME "${_export_file}")
# link Qt
target_link_libraries(gpgfrontend_ui
diff --git a/src/ui/GpgFrontendUI.h b/src/ui/GpgFrontendUI.h
index df6d891f..b355ec85 100644
--- a/src/ui/GpgFrontendUI.h
+++ b/src/ui/GpgFrontendUI.h
@@ -45,6 +45,8 @@
#include "core/GpgFrontendCore.h"
#include "core/GpgModel.h"
+#include "ui/GpgFrontendUIExport.h"
+
/**
* 3rd party dependencies
*/
diff --git a/src/ui/GpgFrontendUIInit.cpp b/src/ui/GpgFrontendUIInit.cpp
index 49f16ec5..2a8ac8b4 100644
--- a/src/ui/GpgFrontendUIInit.cpp
+++ b/src/ui/GpgFrontendUIInit.cpp
@@ -28,9 +28,11 @@
#include "GpgFrontendUIInit.h"
-#include "SignalStation.h"
-#include "UserInterfaceUtils.h"
#include "core/function/GlobalSettingStation.h"
+#include "core/thread/CtxCheckThread.h"
+#include "ui/SignalStation.h"
+#include "ui/UserInterfaceUtils.h"
+#include "ui/main_window/MainWindow.h"
// init easyloggingpp library
INITIALIZE_EASYLOGGINGPP
@@ -38,11 +40,61 @@ INITIALIZE_EASYLOGGINGPP
namespace GpgFrontend::UI {
extern void init_logging();
+extern void init_locale();
void InitGpgFrontendUI() {
+ init_locale();
init_logging();
SignalStation::GetInstance();
CommonUtils::GetInstance();
+
+ // create the thread to load the gpg context
+ auto* init_ctx_thread = new GpgFrontend::CtxCheckThread();
+ QApplication::connect(init_ctx_thread, &QThread::finished, init_ctx_thread,
+ &QThread::deleteLater);
+
+ // create and show loading window before starting the main window
+ auto* waiting_dialog = new QProgressDialog();
+ waiting_dialog->setMaximum(0);
+ waiting_dialog->setMinimum(0);
+ auto waiting_dialog_label =
+ new QLabel(QString(_("Loading Gnupg Info...")) + "<br /><br />" +
+ _("If this process is too slow, please set the key "
+ "server address appropriately in the gnupg configuration "
+ "file (depending "
+ "on the network situation in your country or region)."));
+ waiting_dialog_label->setWordWrap(true);
+ waiting_dialog->setLabel(waiting_dialog_label);
+ waiting_dialog->resize(420, 120);
+ QApplication::connect(init_ctx_thread, &QThread::finished, [=]() {
+ waiting_dialog->finished(0);
+ waiting_dialog->deleteLater();
+ });
+ QApplication::connect(waiting_dialog, &QProgressDialog::canceled, [=]() {
+ LOG(INFO) << "cancel clicked";
+ if (init_ctx_thread->isRunning()) init_ctx_thread->terminate();
+ QCoreApplication::quit();
+ exit(0);
+ });
+
+ // show the loading window
+ waiting_dialog->show();
+ waiting_dialog->setFocus();
+
+ // start the thread to load the gpg context
+ init_ctx_thread->start();
+ QEventLoop loop;
+ QApplication::connect(init_ctx_thread, &QThread::finished, &loop,
+ &QEventLoop::quit);
+ loop.exec();
+}
+
+int RunGpgFrontendUI() {
+ // create main window and show it
+ auto main_window = std::make_unique<GpgFrontend::UI::MainWindow>();
+ main_window->Init();
+ main_window->show();
+ return QApplication::exec();
}
void init_logging() {
@@ -71,4 +123,86 @@ void init_logging() {
LOG(INFO) << _("log file path") << logfile_path;
}
+
+/**
+ * @brief setup the locale and load the translations
+ *
+ */
+void init_locale() {
+ // get the instance of the GlobalSettingStation
+ auto& settings =
+ GpgFrontend::GlobalSettingStation::GetInstance().GetUISettings();
+
+ // create general settings if not exist
+ if (!settings.exists("general") ||
+ settings.lookup("general").getType() != libconfig::Setting::TypeGroup)
+ settings.add("general", libconfig::Setting::TypeGroup);
+
+ // set system default at first
+ auto& general = settings["general"];
+ if (!general.exists("lang"))
+ general.add("lang", libconfig::Setting::TypeString) = "";
+
+ // sync the settings to the file
+ GpgFrontend::GlobalSettingStation::GetInstance().SyncSettings();
+
+ LOG(INFO) << "current system locale" << setlocale(LC_ALL, nullptr);
+
+ // read from settings file
+ std::string lang;
+ if (!general.lookupValue("lang", lang)) {
+ LOG(ERROR) << _("could not read properly from configure file");
+ };
+
+ LOG(INFO) << "lang from settings" << lang;
+ LOG(INFO) << "project name" << PROJECT_NAME;
+ LOG(INFO) << "locales path"
+ << GpgFrontend::GlobalSettingStation::GetInstance()
+ .GetLocaleDir()
+ .c_str();
+
+#ifndef WINDOWS
+ if (!lang.empty()) {
+ std::string lc = lang.empty() ? "" : lang + ".UTF-8";
+
+ // set LC_ALL
+ auto* locale_name = setlocale(LC_ALL, lc.c_str());
+ if (locale_name == nullptr) LOG(WARNING) << "set LC_ALL failed" << lc;
+ auto language = getenv("LANGUAGE");
+ // set LANGUAGE
+ std::string language_env = language == nullptr ? "en" : language;
+ language_env.insert(0, lang + ":");
+ LOG(INFO) << "language env" << language_env;
+ if (setenv("LANGUAGE", language_env.c_str(), 1)) {
+ LOG(WARNING) << "set LANGUAGE failed" << language_env;
+ };
+ }
+#else
+ if (!lang.empty()) {
+ std::string lc = lang.empty() ? "" : lang;
+
+ // set LC_ALL
+ auto* locale_name = setlocale(LC_ALL, lc.c_str());
+ if (locale_name == nullptr) LOG(WARNING) << "set LC_ALL failed" << lc;
+
+ auto language = getenv("LANGUAGE");
+ // set LANGUAGE
+ std::string language_env = language == nullptr ? "en" : language;
+ language_env.insert(0, lang + ":");
+ language_env.insert(0, "LANGUAGE=");
+ LOG(INFO) << "language env" << language_env;
+ if (putenv(language_env.c_str())) {
+ LOG(WARNING) << "set LANGUAGE failed" << language_env;
+ };
+ }
+#endif
+
+ bindtextdomain(PROJECT_NAME, GpgFrontend::GlobalSettingStation::GetInstance()
+ .GetLocaleDir()
+ .u8string()
+ .c_str());
+ bind_textdomain_codeset(PROJECT_NAME, "utf-8");
+ textdomain(PROJECT_NAME);
+}
+
} // namespace GpgFrontend::UI \ No newline at end of file
diff --git a/src/ui/GpgFrontendUIInit.h b/src/ui/GpgFrontendUIInit.h
index 6518256b..d7b6390d 100644
--- a/src/ui/GpgFrontendUIInit.h
+++ b/src/ui/GpgFrontendUIInit.h
@@ -37,7 +37,12 @@ namespace GpgFrontend::UI {
* @brief init the UI library
*
*/
-void InitGpgFrontendUI();
+void GPGFRONTEND_UI_EXPORT InitGpgFrontendUI();
+
+/**
+ * @brief run main window
+ */
+int GPGFRONTEND_UI_EXPORT RunGpgFrontendUI();
}; // namespace GpgFrontend::UI