From 3b73064497309eefb4d3f83826866e6595c9d0dc Mon Sep 17 00:00:00 2001 From: "Mr.UNIX" Date: Thu, 18 Jan 2024 14:42:23 +0100 Subject: [PATCH] TerminalSettings: Split TerminalSettingsWidget into different files --- .../TerminalSettings/CMakeLists.txt | 3 +- .../TerminalSettings/MainWidget.cpp | 126 ++++++++++++++++++ .../TerminalSettings/MainWidget.h | 37 +++++ ...minalSettingsWidget.cpp => ViewWidget.cpp} | 100 +------------- ...{TerminalSettingsWidget.h => ViewWidget.h} | 23 ---- .../Applications/TerminalSettings/main.cpp | 3 +- 6 files changed, 168 insertions(+), 124 deletions(-) create mode 100644 Userland/Applications/TerminalSettings/MainWidget.cpp create mode 100644 Userland/Applications/TerminalSettings/MainWidget.h rename Userland/Applications/TerminalSettings/{TerminalSettingsWidget.cpp => ViewWidget.cpp} (69%) rename Userland/Applications/TerminalSettings/{TerminalSettingsWidget.h => ViewWidget.h} (61%) diff --git a/Userland/Applications/TerminalSettings/CMakeLists.txt b/Userland/Applications/TerminalSettings/CMakeLists.txt index ddcab96e18..24786b7056 100644 --- a/Userland/Applications/TerminalSettings/CMakeLists.txt +++ b/Userland/Applications/TerminalSettings/CMakeLists.txt @@ -8,7 +8,8 @@ stringify_gml(TerminalSettingsMain.gml TerminalSettingsMainGML.h terminal_settin stringify_gml(TerminalSettingsView.gml TerminalSettingsViewGML.h terminal_settings_view_gml) set(SOURCES - TerminalSettingsWidget.cpp + MainWidget.cpp + ViewWidget.cpp main.cpp ) diff --git a/Userland/Applications/TerminalSettings/MainWidget.cpp b/Userland/Applications/TerminalSettings/MainWidget.cpp new file mode 100644 index 0000000000..878c76e34c --- /dev/null +++ b/Userland/Applications/TerminalSettings/MainWidget.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2018-2021, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "MainWidget.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ErrorOr> TerminalSettingsMainWidget::try_create() +{ + auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) TerminalSettingsMainWidget())); + TRY(widget->setup()); + return widget; +} + +ErrorOr TerminalSettingsMainWidget::setup() +{ + TRY(load_from_gml(terminal_settings_main_gml)); + + auto& beep_bell_radio = *find_descendant_of_type_named("beep_bell_radio"); + auto& visual_bell_radio = *find_descendant_of_type_named("visual_bell_radio"); + auto& no_bell_radio = *find_descendant_of_type_named("no_bell_radio"); + + m_bell_mode = parse_bell(Config::read_string("Terminal"sv, "Window"sv, "Bell"sv)); + m_original_bell_mode = m_bell_mode; + + switch (m_bell_mode) { + case VT::TerminalWidget::BellMode::Visible: + visual_bell_radio.set_checked(true, GUI::AllowCallback::No); + break; + case VT::TerminalWidget::BellMode::AudibleBeep: + beep_bell_radio.set_checked(true, GUI::AllowCallback::No); + break; + case VT::TerminalWidget::BellMode::Disabled: + no_bell_radio.set_checked(true, GUI::AllowCallback::No); + break; + } + + beep_bell_radio.on_checked = [this](bool) { + m_bell_mode = VT::TerminalWidget::BellMode::AudibleBeep; + Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); + set_modified(true); + }; + visual_bell_radio.on_checked = [this](bool) { + m_bell_mode = VT::TerminalWidget::BellMode::Visible; + Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); + set_modified(true); + }; + no_bell_radio.on_checked = [this](bool) { + m_bell_mode = VT::TerminalWidget::BellMode::Disabled; + Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); + set_modified(true); + }; + + m_confirm_close = Config::read_bool("Terminal"sv, "Terminal"sv, "ConfirmClose"sv, true); + m_orignal_confirm_close = m_confirm_close; + auto& confirm_close_checkbox = *find_descendant_of_type_named("terminal_confirm_close"); + confirm_close_checkbox.on_checked = [&](bool confirm_close) { + m_confirm_close = confirm_close; + Config::write_bool("Terminal"sv, "Terminal"sv, "ConfirmClose"sv, confirm_close); + set_modified(true); + }; + confirm_close_checkbox.set_checked(m_confirm_close, GUI::AllowCallback::No); + return {}; +} + +VT::TerminalWidget::BellMode TerminalSettingsMainWidget::parse_bell(StringView bell_string) +{ + if (bell_string == "AudibleBeep") + return VT::TerminalWidget::BellMode::AudibleBeep; + if (bell_string == "Visible") + return VT::TerminalWidget::BellMode::Visible; + if (bell_string == "Disabled") + return VT::TerminalWidget::BellMode::Disabled; + VERIFY_NOT_REACHED(); +} + +ByteString TerminalSettingsMainWidget::stringify_bell(VT::TerminalWidget::BellMode bell_mode) +{ + if (bell_mode == VT::TerminalWidget::BellMode::AudibleBeep) + return "AudibleBeep"; + if (bell_mode == VT::TerminalWidget::BellMode::Disabled) + return "Disabled"; + if (bell_mode == VT::TerminalWidget::BellMode::Visible) + return "Visible"; + VERIFY_NOT_REACHED(); +} + +void TerminalSettingsMainWidget::apply_settings() +{ + m_original_bell_mode = m_bell_mode; + m_orignal_confirm_close = m_confirm_close; + write_back_settings(); +} +void TerminalSettingsMainWidget::write_back_settings() const +{ + Config::write_bool("Terminal"sv, "Terminal"sv, "ConfirmClose"sv, m_orignal_confirm_close); + Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_original_bell_mode)); +} + +void TerminalSettingsMainWidget::cancel_settings() +{ + write_back_settings(); +} diff --git a/Userland/Applications/TerminalSettings/MainWidget.h b/Userland/Applications/TerminalSettings/MainWidget.h new file mode 100644 index 0000000000..5f8f25acea --- /dev/null +++ b/Userland/Applications/TerminalSettings/MainWidget.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2018-2021, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +class TerminalSettingsMainWidget final : public GUI::SettingsWindow::Tab { + C_OBJECT_ABSTRACT(TerminalSettingsMainWidget) +public: + static ErrorOr> try_create(); + + virtual void apply_settings() override; + virtual void cancel_settings() override; + +private: + TerminalSettingsMainWidget() = default; + ErrorOr setup(); + void write_back_settings() const; + + static VT::TerminalWidget::BellMode parse_bell(StringView bell_string); + static ByteString stringify_bell(VT::TerminalWidget::BellMode bell_mode); + + VT::TerminalWidget::BellMode m_bell_mode { VT::TerminalWidget::BellMode::Disabled }; + bool m_confirm_close { true }; + + VT::TerminalWidget::BellMode m_original_bell_mode; + bool m_orignal_confirm_close { true }; +}; diff --git a/Userland/Applications/TerminalSettings/TerminalSettingsWidget.cpp b/Userland/Applications/TerminalSettings/ViewWidget.cpp similarity index 69% rename from Userland/Applications/TerminalSettings/TerminalSettingsWidget.cpp rename to Userland/Applications/TerminalSettings/ViewWidget.cpp index bcfb6404c6..63f526f122 100644 --- a/Userland/Applications/TerminalSettings/TerminalSettingsWidget.cpp +++ b/Userland/Applications/TerminalSettings/ViewWidget.cpp @@ -4,11 +4,10 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include "TerminalSettingsWidget.h" +#include "ViewWidget.h" #include #include #include -#include #include #include #include @@ -29,64 +28,6 @@ #include #include -ErrorOr> TerminalSettingsMainWidget::try_create() -{ - auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) TerminalSettingsMainWidget())); - TRY(widget->setup()); - return widget; -} - -ErrorOr TerminalSettingsMainWidget::setup() -{ - TRY(load_from_gml(terminal_settings_main_gml)); - - auto& beep_bell_radio = *find_descendant_of_type_named("beep_bell_radio"); - auto& visual_bell_radio = *find_descendant_of_type_named("visual_bell_radio"); - auto& no_bell_radio = *find_descendant_of_type_named("no_bell_radio"); - - m_bell_mode = parse_bell(Config::read_string("Terminal"sv, "Window"sv, "Bell"sv)); - m_original_bell_mode = m_bell_mode; - - switch (m_bell_mode) { - case VT::TerminalWidget::BellMode::Visible: - visual_bell_radio.set_checked(true, GUI::AllowCallback::No); - break; - case VT::TerminalWidget::BellMode::AudibleBeep: - beep_bell_radio.set_checked(true, GUI::AllowCallback::No); - break; - case VT::TerminalWidget::BellMode::Disabled: - no_bell_radio.set_checked(true, GUI::AllowCallback::No); - break; - } - - beep_bell_radio.on_checked = [this](bool) { - m_bell_mode = VT::TerminalWidget::BellMode::AudibleBeep; - Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); - set_modified(true); - }; - visual_bell_radio.on_checked = [this](bool) { - m_bell_mode = VT::TerminalWidget::BellMode::Visible; - Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); - set_modified(true); - }; - no_bell_radio.on_checked = [this](bool) { - m_bell_mode = VT::TerminalWidget::BellMode::Disabled; - Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); - set_modified(true); - }; - - m_confirm_close = Config::read_bool("Terminal"sv, "Terminal"sv, "ConfirmClose"sv, true); - m_orignal_confirm_close = m_confirm_close; - auto& confirm_close_checkbox = *find_descendant_of_type_named("terminal_confirm_close"); - confirm_close_checkbox.on_checked = [&](bool confirm_close) { - m_confirm_close = confirm_close; - Config::write_bool("Terminal"sv, "Terminal"sv, "ConfirmClose"sv, confirm_close); - set_modified(true); - }; - confirm_close_checkbox.set_checked(m_confirm_close, GUI::AllowCallback::No); - return {}; -} - ErrorOr> TerminalSettingsViewWidget::try_create() { auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) TerminalSettingsViewWidget())); @@ -225,45 +166,6 @@ ErrorOr TerminalSettingsViewWidget::setup() return {}; } -VT::TerminalWidget::BellMode TerminalSettingsMainWidget::parse_bell(StringView bell_string) -{ - if (bell_string == "AudibleBeep") - return VT::TerminalWidget::BellMode::AudibleBeep; - if (bell_string == "Visible") - return VT::TerminalWidget::BellMode::Visible; - if (bell_string == "Disabled") - return VT::TerminalWidget::BellMode::Disabled; - VERIFY_NOT_REACHED(); -} - -ByteString TerminalSettingsMainWidget::stringify_bell(VT::TerminalWidget::BellMode bell_mode) -{ - if (bell_mode == VT::TerminalWidget::BellMode::AudibleBeep) - return "AudibleBeep"; - if (bell_mode == VT::TerminalWidget::BellMode::Disabled) - return "Disabled"; - if (bell_mode == VT::TerminalWidget::BellMode::Visible) - return "Visible"; - VERIFY_NOT_REACHED(); -} - -void TerminalSettingsMainWidget::apply_settings() -{ - m_original_bell_mode = m_bell_mode; - m_orignal_confirm_close = m_confirm_close; - write_back_settings(); -} -void TerminalSettingsMainWidget::write_back_settings() const -{ - Config::write_bool("Terminal"sv, "Terminal"sv, "ConfirmClose"sv, m_orignal_confirm_close); - Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_original_bell_mode)); -} - -void TerminalSettingsMainWidget::cancel_settings() -{ - write_back_settings(); -} - void TerminalSettingsViewWidget::apply_settings() { m_original_opacity = m_opacity; diff --git a/Userland/Applications/TerminalSettings/TerminalSettingsWidget.h b/Userland/Applications/TerminalSettings/ViewWidget.h similarity index 61% rename from Userland/Applications/TerminalSettings/TerminalSettingsWidget.h rename to Userland/Applications/TerminalSettings/ViewWidget.h index df0be97d1c..651fdfb0a8 100644 --- a/Userland/Applications/TerminalSettings/TerminalSettingsWidget.h +++ b/Userland/Applications/TerminalSettings/ViewWidget.h @@ -13,29 +13,6 @@ #include #include -class TerminalSettingsMainWidget final : public GUI::SettingsWindow::Tab { - C_OBJECT_ABSTRACT(TerminalSettingsMainWidget) -public: - static ErrorOr> try_create(); - - virtual void apply_settings() override; - virtual void cancel_settings() override; - -private: - TerminalSettingsMainWidget() = default; - ErrorOr setup(); - void write_back_settings() const; - - static VT::TerminalWidget::BellMode parse_bell(StringView bell_string); - static ByteString stringify_bell(VT::TerminalWidget::BellMode bell_mode); - - VT::TerminalWidget::BellMode m_bell_mode { VT::TerminalWidget::BellMode::Disabled }; - bool m_confirm_close { true }; - - VT::TerminalWidget::BellMode m_original_bell_mode; - bool m_orignal_confirm_close { true }; -}; - class TerminalSettingsViewWidget final : public GUI::SettingsWindow::Tab { C_OBJECT_ABSTRACT(TerminalSettingsViewWidget) public: diff --git a/Userland/Applications/TerminalSettings/main.cpp b/Userland/Applications/TerminalSettings/main.cpp index aede5e9599..819ec4e4cf 100644 --- a/Userland/Applications/TerminalSettings/main.cpp +++ b/Userland/Applications/TerminalSettings/main.cpp @@ -4,7 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include "TerminalSettingsWidget.h" +#include "MainWidget.h" +#include "ViewWidget.h" #include #include #include