From 626142c312fbb3d32a8f481ffa6ac903724cac83 Mon Sep 17 00:00:00 2001 From: Baitinq Date: Thu, 15 Dec 2022 01:58:33 +0100 Subject: [PATCH] ClockSettings: Add a factory function for TimeZoneSettingsWidget This removes an unbelievable 4 FIXMEs :)) --- .../ClockSettings/TimeZoneSettingsWidget.cpp | 31 ++++++++++++------- .../ClockSettings/TimeZoneSettingsWidget.h | 4 ++- Userland/Applications/ClockSettings/main.cpp | 4 ++- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp b/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp index 0750eb042c..3b62cf51f2 100644 --- a/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp +++ b/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp @@ -40,6 +40,25 @@ static constexpr auto TIME_ZONE_TEXT_HEIGHT = 40; static constexpr auto TIME_ZONE_TEXT_PADDING = 5; static constexpr auto TIME_ZONE_TEXT_COLOR = Gfx::Color::from_rgb(0xeaf688); +ErrorOr> TimeZoneSettingsWidget::create() +{ + auto timezonesettings_widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) TimeZoneSettingsWidget)); + + auto time_zone_map_bitmap = TRY(Gfx::Bitmap::try_load_from_file("/res/graphics/map.png"sv)); + auto time_zone_rect = time_zone_map_bitmap->rect().shrunken(TIME_ZONE_MAP_NORTHERN_TRIM, 0, TIME_ZONE_MAP_SOUTHERN_TRIM, 0); + time_zone_map_bitmap = TRY(time_zone_map_bitmap->cropped(time_zone_rect)); + + timezonesettings_widget->m_time_zone_map = *timezonesettings_widget->find_descendant_of_type_named("time_zone_map"); + timezonesettings_widget->m_time_zone_map->set_bitmap(time_zone_map_bitmap); + + auto time_zone_marker = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/32x32/ladyball.png"sv)); + timezonesettings_widget->m_time_zone_marker = TRY(time_zone_marker->scaled(0.75f, 0.75f)); + + timezonesettings_widget->set_time_zone_location(); + + return timezonesettings_widget; +} + TimeZoneSettingsWidget::TimeZoneSettingsWidget() { load_from_gml(time_zone_settings_widget_gml); @@ -54,18 +73,6 @@ TimeZoneSettingsWidget::TimeZoneSettingsWidget() m_time_zone_combo_box->on_change = [&](auto, auto) { set_modified(true); }; - - auto time_zone_map_bitmap = Gfx::Bitmap::try_load_from_file("/res/graphics/map.png"sv).release_value_but_fixme_should_propagate_errors(); - auto time_zone_rect = time_zone_map_bitmap->rect().shrunken(TIME_ZONE_MAP_NORTHERN_TRIM, 0, TIME_ZONE_MAP_SOUTHERN_TRIM, 0); - time_zone_map_bitmap = time_zone_map_bitmap->cropped(time_zone_rect).release_value_but_fixme_should_propagate_errors(); - - m_time_zone_map = *find_descendant_of_type_named("time_zone_map"); - m_time_zone_map->set_bitmap(time_zone_map_bitmap); - - auto time_zone_marker = Gfx::Bitmap::try_load_from_file("/res/icons/32x32/ladyball.png"sv).release_value_but_fixme_should_propagate_errors(); - m_time_zone_marker = time_zone_marker->scaled(0.75f, 0.75f).release_value_but_fixme_should_propagate_errors(); - - set_time_zone_location(); } void TimeZoneSettingsWidget::second_paint_event(GUI::PaintEvent& event) diff --git a/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.h b/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.h index 4a8e0e8beb..b00c078ca0 100644 --- a/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.h +++ b/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.h @@ -14,7 +14,9 @@ #include class TimeZoneSettingsWidget final : public GUI::SettingsWindow::Tab { - C_OBJECT(TimeZoneSettingsWidget) + C_OBJECT_ABSTRACT(TimeZoneSettingsWidget) +public: + static ErrorOr> create(); private: TimeZoneSettingsWidget(); diff --git a/Userland/Applications/ClockSettings/main.cpp b/Userland/Applications/ClockSettings/main.cpp index 3c621654f9..84fc48ddad 100644 --- a/Userland/Applications/ClockSettings/main.cpp +++ b/Userland/Applications/ClockSettings/main.cpp @@ -37,7 +37,9 @@ ErrorOr serenity_main(Main::Arguments arguments) auto window = TRY(GUI::SettingsWindow::create("Clock Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); (void)TRY(window->add_tab("Clock"sv, "clock"sv)); - (void)TRY(window->add_tab("Time Zone"sv, "time-zone"sv)); + auto timezonesettings_widget = TRY(TimeZoneSettingsWidget::create()); + TRY(window->add_tab(timezonesettings_widget, "Time Zone"sv, "time-zone"sv)); + window->set_icon(app_icon.bitmap_for_size(16)); window->resize(540, 570); window->set_active_tab(selected_tab);