diff --git a/Applications/Terminal/CMakeLists.txt b/Applications/Terminal/CMakeLists.txt index a9b6c9747b..1fb969546e 100644 --- a/Applications/Terminal/CMakeLists.txt +++ b/Applications/Terminal/CMakeLists.txt @@ -1,4 +1,7 @@ +compile_gml(TerminalSettingsWindow.gml TerminalSettingsWindowGML.h terminal_settings_window_gml) + set(SOURCES + TerminalSettingsWindowGML.h main.cpp ) diff --git a/Applications/Terminal/TerminalSettingsWindow.gml b/Applications/Terminal/TerminalSettingsWindow.gml new file mode 100644 index 0000000000..1ae37c7620 --- /dev/null +++ b/Applications/Terminal/TerminalSettingsWindow.gml @@ -0,0 +1,62 @@ +@GUI::Widget { + fill_with_background_color: true + + layout: @GUI::VerticalBoxLayout { + margins: [4, 4, 4, 4] + } + + @GUI::GroupBox { + title: "Bell mode" + fixed_height: 94 + + layout: @GUI::VerticalBoxLayout { + margins: [6, 16, 6, 6] + } + + @GUI::RadioButton { + name: "beep_bell_radio" + text: "System beep" + } + + @GUI::RadioButton { + name: "visual_bell_radio" + text: "Visual bell" + } + + @GUI::RadioButton { + name: "no_bell_radio" + text: "No bell" + } + } + + @GUI::GroupBox { + title: "Background opacity" + fixed_height: 50 + + layout: @GUI::VerticalBoxLayout { + margins: [6, 16, 6, 6] + } + + @GUI::OpacitySlider { + name: "background_opacity_slider" + min: 0 + max: 255 + orientation: "Horizontal" + } + } + + @GUI::GroupBox { + title: "Scrollback size (lines)" + + layout: @GUI::VerticalBoxLayout { + margins: [6, 16, 6, 6] + } + + @GUI::SpinBox { + name: "history_size_spinbox" + min: 0 + max: 40960 + orientation: "Horizontal" + } + } +} diff --git a/Applications/Terminal/main.cpp b/Applications/Terminal/main.cpp index 9f11b960fe..c7cc5b4c6d 100644 --- a/Applications/Terminal/main.cpp +++ b/Applications/Terminal/main.cpp @@ -24,6 +24,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -181,65 +182,43 @@ static RefPtr create_settings_window(TerminalWidget& terminal) window->set_title("Terminal settings"); window->set_resizable(false); window->resize(200, 210); - window->set_modal(true); auto& settings = window->set_main_widget(); - settings.set_fill_with_background_color(true); - settings.set_background_role(ColorRole::Button); - settings.set_layout(); - settings.layout()->set_margins({ 4, 4, 4, 4 }); + settings.load_from_gml(terminal_settings_window_gml); - auto& radio_container = settings.add("Bell mode"); - radio_container.set_layout(); - radio_container.layout()->set_margins({ 6, 16, 6, 6 }); - radio_container.set_fixed_height(94); - - auto& sysbell_radio = radio_container.add("Use (audible) system Bell"); - auto& visbell_radio = radio_container.add("Use (visual) bell"); - auto& nobell_radio = radio_container.add("Disable bell"); + auto& beep_bell_radio = static_cast(*settings.find_descendant_by_name("beep_bell_radio")); + auto& visual_bell_radio = static_cast(*settings.find_descendant_by_name("visual_bell_radio")); + auto& no_bell_radio = static_cast(*settings.find_descendant_by_name("no_bell_radio")); switch (terminal.bell_mode()) { case TerminalWidget::BellMode::Visible: - visbell_radio.set_checked(true); + visual_bell_radio.set_checked(true); break; case TerminalWidget::BellMode::AudibleBeep: - sysbell_radio.set_checked(true); + beep_bell_radio.set_checked(true); break; case TerminalWidget::BellMode::Disabled: - nobell_radio.set_checked(true); + no_bell_radio.set_checked(true); break; } - sysbell_radio.on_checked = [&terminal](const bool) { + beep_bell_radio.on_checked = [&terminal](bool) { terminal.set_bell_mode(TerminalWidget::BellMode::AudibleBeep); }; - visbell_radio.on_checked = [&terminal](const bool) { + visual_bell_radio.on_checked = [&terminal](bool) { terminal.set_bell_mode(TerminalWidget::BellMode::Visible); }; - nobell_radio.on_checked = [&terminal](const bool) { + no_bell_radio.on_checked = [&terminal](bool) { terminal.set_bell_mode(TerminalWidget::BellMode::Disabled); }; - auto& slider_container = settings.add("Background opacity"); - slider_container.set_layout(); - slider_container.layout()->set_margins({ 6, 16, 6, 6 }); - slider_container.set_fixed_height(50); - auto& slider = slider_container.add(); - + auto& slider = static_cast(*settings.find_descendant_by_name("background_opacity_slider")); slider.on_change = [&terminal](int value) { terminal.set_opacity(value); }; - - slider.set_range(0, 255); slider.set_value(terminal.opacity()); - auto& history_size_spinbox_container = settings.add("Maximum scrollback history lines"); - history_size_spinbox_container.set_layout(); - history_size_spinbox_container.layout()->set_margins({ 6, 16, 6, 6 }); - history_size_spinbox_container.set_fixed_height(46); - - auto& history_size_spinbox = history_size_spinbox_container.add(); - history_size_spinbox.set_range(0, 40960); + auto& history_size_spinbox = static_cast(*settings.find_descendant_by_name("history_size_spinbox")); history_size_spinbox.set_value(terminal.max_history_size()); history_size_spinbox.on_change = [&terminal](int value) { terminal.set_max_history_size(value);