From 90819e2d717d44bc119cc112ed0c949bc4719a84 Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Tue, 9 May 2023 22:44:43 +0200 Subject: [PATCH] MouseSettings: Convert setting widgets to a failable factory --- .../Applications/MouseSettings/HighlightWidget.cpp | 12 ++++++++++-- .../Applications/MouseSettings/HighlightWidget.h | 7 +++++-- .../Applications/MouseSettings/MouseWidget.cpp | 11 +++++++++-- Userland/Applications/MouseSettings/MouseWidget.h | 6 ++++-- .../Applications/MouseSettings/ThemeWidget.cpp | 14 +++++++++++--- Userland/Applications/MouseSettings/ThemeWidget.h | 6 ++++-- 6 files changed, 43 insertions(+), 13 deletions(-) diff --git a/Userland/Applications/MouseSettings/HighlightWidget.cpp b/Userland/Applications/MouseSettings/HighlightWidget.cpp index e7f3231cc9..4f874ba961 100644 --- a/Userland/Applications/MouseSettings/HighlightWidget.cpp +++ b/Userland/Applications/MouseSettings/HighlightWidget.cpp @@ -9,9 +9,16 @@ #include #include -HighlightWidget::HighlightWidget() +ErrorOr> HighlightWidget::try_create() { - load_from_gml(highlight_widget_gml).release_value_but_fixme_should_propagate_errors(); + auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) HighlightWidget())); + TRY(widget->setup()); + return widget; +} + +ErrorOr HighlightWidget::setup() +{ + TRY(load_from_gml(highlight_widget_gml)); m_highlight_preview = find_descendant_of_type_named("preview_frame")->add(palette()); @@ -41,6 +48,7 @@ HighlightWidget::HighlightWidget() m_highlight_preview->set_color(highlight_color()); m_highlight_preview->set_radius(highlight_radius()); + return {}; } Gfx::Color HighlightWidget::highlight_color() diff --git a/Userland/Applications/MouseSettings/HighlightWidget.h b/Userland/Applications/MouseSettings/HighlightWidget.h index 8dfd75fc3c..069156de4d 100644 --- a/Userland/Applications/MouseSettings/HighlightWidget.h +++ b/Userland/Applications/MouseSettings/HighlightWidget.h @@ -13,19 +13,22 @@ #include class HighlightWidget final : public GUI::SettingsWindow::Tab { - C_OBJECT(HighlightWidget) + C_OBJECT_ABSTRACT(HighlightWidget) public: + static ErrorOr> try_create(); virtual ~HighlightWidget() override = default; virtual void apply_settings() override; virtual void reset_default_values() override; private: + HighlightWidget() = default; + ErrorOr setup(); + Gfx::Color highlight_color(); int highlight_radius(); - HighlightWidget(); RefPtr m_highlight_preview; RefPtr m_highlight_color_input; RefPtr m_highlight_opacity_slider; diff --git a/Userland/Applications/MouseSettings/MouseWidget.cpp b/Userland/Applications/MouseSettings/MouseWidget.cpp index 71a3410d14..08c630381a 100644 --- a/Userland/Applications/MouseSettings/MouseWidget.cpp +++ b/Userland/Applications/MouseSettings/MouseWidget.cpp @@ -19,10 +19,16 @@ constexpr double speed_slider_scale = 100.0; constexpr int default_scroll_length = 4; constexpr int double_click_speed_default = 250; -MouseWidget::MouseWidget() +ErrorOr> MouseWidget::try_create() { - load_from_gml(mouse_widget_gml).release_value_but_fixme_should_propagate_errors(); + auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) MouseWidget())); + TRY(widget->setup()); + return widget; +} +ErrorOr MouseWidget::setup() +{ + TRY(load_from_gml(mouse_widget_gml)); m_speed_label = *find_descendant_of_type_named("speed_label"); m_speed_slider = *find_descendant_of_type_named("speed_slider"); m_speed_slider->set_range(WindowServer::mouse_accel_min * speed_slider_scale, WindowServer::mouse_accel_max * speed_slider_scale); @@ -70,6 +76,7 @@ MouseWidget::MouseWidget() update_double_click_speed_label(); update_switch_buttons_image_label(); m_double_click_arrow_widget->set_double_click_speed(m_double_click_speed_slider->value()); + return {}; } void MouseWidget::apply_settings() diff --git a/Userland/Applications/MouseSettings/MouseWidget.h b/Userland/Applications/MouseSettings/MouseWidget.h index 269e3fdfc2..1de402036e 100644 --- a/Userland/Applications/MouseSettings/MouseWidget.h +++ b/Userland/Applications/MouseSettings/MouseWidget.h @@ -12,15 +12,17 @@ #include class MouseWidget final : public GUI::SettingsWindow::Tab { - C_OBJECT(MouseWidget) + C_OBJECT_ABSTRACT(MouseWidget) public: + static ErrorOr> try_create(); virtual ~MouseWidget() override = default; virtual void apply_settings() override; virtual void reset_default_values() override; private: - MouseWidget(); + MouseWidget() = default; + ErrorOr setup(); void update_speed_label(); void update_double_click_speed_label(); diff --git a/Userland/Applications/MouseSettings/ThemeWidget.cpp b/Userland/Applications/MouseSettings/ThemeWidget.cpp index 39d708a138..d71566cea7 100644 --- a/Userland/Applications/MouseSettings/ThemeWidget.cpp +++ b/Userland/Applications/MouseSettings/ThemeWidget.cpp @@ -97,9 +97,16 @@ void ThemeModel::invalidate() Model::invalidate(); } -ThemeWidget::ThemeWidget() +ErrorOr> ThemeWidget::try_create() { - load_from_gml(theme_widget_gml).release_value_but_fixme_should_propagate_errors(); + auto widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) ThemeWidget())); + TRY(widget->setup()); + return widget; +} + +ErrorOr ThemeWidget::setup() +{ + TRY(load_from_gml(theme_widget_gml)); m_cursors_tableview = find_descendant_of_type_named("cursors_tableview"); m_cursors_tableview->set_highlight_selected_rows(true); m_cursors_tableview->set_alternating_row_colors(false); @@ -108,7 +115,7 @@ ThemeWidget::ThemeWidget() m_cursors_tableview->set_highlight_key_column(false); m_mouse_cursor_model = MouseCursorModel::create(); - auto sorting_proxy_model = MUST(GUI::SortingProxyModel::create(*m_mouse_cursor_model)); + auto sorting_proxy_model = TRY(GUI::SortingProxyModel::create(*m_mouse_cursor_model)); sorting_proxy_model->set_sort_role(GUI::ModelRole::Display); m_cursors_tableview->set_model(sorting_proxy_model); @@ -127,6 +134,7 @@ ThemeWidget::ThemeWidget() m_theme_name_box->set_model(ThemeModel::create()); m_theme_name_box->model()->invalidate(); m_theme_name_box->set_text(theme_name, GUI::AllowCallback::No); + return {}; } void ThemeWidget::apply_settings() diff --git a/Userland/Applications/MouseSettings/ThemeWidget.h b/Userland/Applications/MouseSettings/ThemeWidget.h index 6868df4364..07fda847be 100644 --- a/Userland/Applications/MouseSettings/ThemeWidget.h +++ b/Userland/Applications/MouseSettings/ThemeWidget.h @@ -63,15 +63,17 @@ private: }; class ThemeWidget final : public GUI::SettingsWindow::Tab { - C_OBJECT(ThemeWidget) + C_OBJECT_ABSTRACT(ThemeWidget) public: + static ErrorOr> try_create(); virtual ~ThemeWidget() override = default; virtual void apply_settings() override; virtual void reset_default_values() override; private: - ThemeWidget(); + ThemeWidget() = default; + ErrorOr setup(); RefPtr m_cursors_tableview; RefPtr m_theme_name_box;