From b5780f819344111407b48fbf2f6dbab3c831e13f Mon Sep 17 00:00:00 2001 From: Mateusz Grzegorzek Date: Mon, 18 Jan 2021 16:36:41 +0100 Subject: [PATCH] [EGD-5287] Add Languages window - add LanguagesWindow, - add GetCurrentDisplayLanguageRequest message used for sending request from LanguagesModel, - add GetCurrentDisplayLanguageResponse message sent by ApplicationManager and handled by ApplicationSettingsNew, - add setFocusOnElement method in ListView so current display language can be focused on when entering LanguagesWindow --- .../ApplicationSettings.cpp | 18 +++++ .../ApplicationSettings.hpp | 2 +- .../application-settings-new/CMakeLists.txt | 3 + .../data/LanguagesData.hpp | 20 ++++++ .../models/LanguagesModel.cpp | 13 ++++ .../models/LanguagesModel.hpp | 18 +++++ .../windows/LanguagesWindow.cpp | 67 +++++++++++++++++++ .../windows/LanguagesWindow.hpp | 29 ++++++++ .../windows/SystemMainWindow.cpp | 2 +- module-apps/windows/OptionWindow.hpp | 2 +- module-gui/gui/widgets/ListView.cpp | 5 ++ module-gui/gui/widgets/ListView.hpp | 1 + .../model/ApplicationManager.cpp | 3 + .../GetCurrentDisplayLanguageRequest.hpp | 12 ++++ .../GetCurrentDisplayLanguageResponse.hpp | 24 +++++++ .../service-appmgr/messages/Message.hpp | 2 + 16 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 module-apps/application-settings-new/data/LanguagesData.hpp create mode 100644 module-apps/application-settings-new/models/LanguagesModel.cpp create mode 100644 module-apps/application-settings-new/models/LanguagesModel.hpp create mode 100644 module-apps/application-settings-new/windows/LanguagesWindow.cpp create mode 100644 module-apps/application-settings-new/windows/LanguagesWindow.hpp create mode 100644 module-services/service-appmgr/service-appmgr/messages/GetCurrentDisplayLanguageRequest.hpp create mode 100644 module-services/service-appmgr/service-appmgr/messages/GetCurrentDisplayLanguageResponse.hpp diff --git a/module-apps/application-settings-new/ApplicationSettings.cpp b/module-apps/application-settings-new/ApplicationSettings.cpp index 1607cf063f4a783efc8d42fe2c958492662edc11..05727f18af91d0837f7c28d810ee0cdab97d8440 100644 --- a/module-apps/application-settings-new/ApplicationSettings.cpp +++ b/module-apps/application-settings-new/ApplicationSettings.cpp @@ -30,6 +30,7 @@ #include "windows/ChangePasscodeWindow.hpp" #include "windows/SystemMainWindow.hpp" #include "windows/NewApnWindow.hpp" +#include "windows/LanguagesWindow.hpp" #include "Dialog.hpp" @@ -42,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -49,6 +51,8 @@ #include #include #include +#include +#include namespace app { @@ -158,6 +162,17 @@ namespace app return sys::MessageNone{}; }); + connect(typeid(manager::GetCurrentDisplayLanguageResponse), [&](sys::Message *msg) { + if (gui::window::name::languages == getCurrentWindow()->getName()) { + auto response = dynamic_cast(msg); + if (response != nullptr) { + auto languagesData = std::make_unique(response->getLanguage()); + switchWindow(gui::window::name::languages, std::move(languagesData)); + } + } + return sys::MessageNone{}; + }); + createUserInterface(); setActiveWindow(gui::name::window::main_window); @@ -259,6 +274,9 @@ namespace app windowsFactory.attach(gui::window::name::new_apn, [](Application *app, const std::string &name) { return std::make_unique(app); }); + windowsFactory.attach(gui::window::name::languages, [](Application *app, const std::string &name) { + return std::make_unique(app); + }); } void ApplicationSettingsNew::destroyUserInterface() diff --git a/module-apps/application-settings-new/ApplicationSettings.hpp b/module-apps/application-settings-new/ApplicationSettings.hpp index 03b97c39cfb2bb0f3935d939337338e79a5967a0..efa7b65c7c90cd1dfb5b92194dae55a1f6b10de5 100644 --- a/module-apps/application-settings-new/ApplicationSettings.hpp +++ b/module-apps/application-settings-new/ApplicationSettings.hpp @@ -50,7 +50,7 @@ namespace gui::window::name inline constexpr auto dialog_settings = "DialogSettings"; inline constexpr auto change_passcode = "ChangePasscode"; - inline constexpr auto language = "Language"; + inline constexpr auto languages = "Languages"; inline constexpr auto date_and_time = "DateAndTime"; inline constexpr auto factory_reset = "FactoryReset"; inline constexpr auto about_your_pure = "AboutYourPure"; diff --git a/module-apps/application-settings-new/CMakeLists.txt b/module-apps/application-settings-new/CMakeLists.txt index 567aceec8697b31389d748e3ec49d6cf16e579ae..6daa1df9c15d6457a550a371f65f6d67bda0da8c 100644 --- a/module-apps/application-settings-new/CMakeLists.txt +++ b/module-apps/application-settings-new/CMakeLists.txt @@ -16,6 +16,7 @@ target_sources( ${PROJECT_NAME} PRIVATE ApplicationSettings.cpp models/ApnSettingsModel.cpp + models/LanguagesModel.cpp models/NewApnModel.cpp widgets/timeWidget.cpp widgets/ChangePasscodeLockHandler.cpp @@ -50,6 +51,7 @@ target_sources( ${PROJECT_NAME} widgets/SpinBox.cpp widgets/SpinBoxOptionSetting.cpp windows/SystemMainWindow.cpp + windows/LanguagesWindow.cpp PUBLIC ApplicationSettings.hpp @@ -71,6 +73,7 @@ target_sources( ${PROJECT_NAME} windows/WallpaperWindow.hpp windows/ChangePasscodeWindow.hpp windows/SystemMainWindow.hpp + windows/LanguagesWindow.hpp ) add_dependencies(${PROJECT_NAME} version) diff --git a/module-apps/application-settings-new/data/LanguagesData.hpp b/module-apps/application-settings-new/data/LanguagesData.hpp new file mode 100644 index 0000000000000000000000000000000000000000..775d3d84afd7a27aa96faea171f8a733f4a3a8b8 --- /dev/null +++ b/module-apps/application-settings-new/data/LanguagesData.hpp @@ -0,0 +1,20 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include + +class LanguagesData : public gui::SwitchData +{ + public: + explicit LanguagesData(Language currentDisplayLanguage) : currentDisplayLanguage(std::move(currentDisplayLanguage)) + {} + [[nodiscard]] auto getCurrentDisplayLanguage() const noexcept -> Language + { + return currentDisplayLanguage; + } + + private: + Language currentDisplayLanguage; +}; diff --git a/module-apps/application-settings-new/models/LanguagesModel.cpp b/module-apps/application-settings-new/models/LanguagesModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3ca22a35d9645b303233fa6387cf005c47d1dae3 --- /dev/null +++ b/module-apps/application-settings-new/models/LanguagesModel.cpp @@ -0,0 +1,13 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include +#include +#include "LanguagesModel.hpp" + +void LanguagesModel::requestCurrentDisplayLanguage() +{ + sys::Bus::SendUnicast(std::make_shared(), + app::manager::ApplicationManager::ServiceName, + application); +} diff --git a/module-apps/application-settings-new/models/LanguagesModel.hpp b/module-apps/application-settings-new/models/LanguagesModel.hpp new file mode 100644 index 0000000000000000000000000000000000000000..80243a1f97becca9b1a93d7886b1fa447bf5e3b7 --- /dev/null +++ b/module-apps/application-settings-new/models/LanguagesModel.hpp @@ -0,0 +1,18 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include + +class LanguagesModel +{ + public: + explicit LanguagesModel(app::Application *application) : application(application) + {} + + void requestCurrentDisplayLanguage(); + + private: + app::Application *application = nullptr; +}; diff --git a/module-apps/application-settings-new/windows/LanguagesWindow.cpp b/module-apps/application-settings-new/windows/LanguagesWindow.cpp new file mode 100644 index 0000000000000000000000000000000000000000..824b98185db4c85cc97eff4bd0ed6744c5c13eac --- /dev/null +++ b/module-apps/application-settings-new/windows/LanguagesWindow.cpp @@ -0,0 +1,67 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "application-settings-new/ApplicationSettings.hpp" +#include "application-settings-new/data/LanguagesData.hpp" +#include "LanguagesWindow.hpp" +#include "OptionSetting.hpp" +#include "service-appmgr/Controller.hpp" + +namespace gui +{ + LanguagesWindow::LanguagesWindow(app::Application *app) + : BaseSettingsWindow(app, window::name::languages), langList(loader.getAvailableDisplayLanguages()), + languagesModel(app) + { + setTitle(utils::localize.get("app_settings_title_languages")); + languagesModel.requestCurrentDisplayLanguage(); + } + + void LanguagesWindow::addOptions(std::list