Explorar o código

Calendar: Add setting to choose default view

This commit adds an entry to the Calendar Settings to allow the user to
select between the month and year views as the startup default.
Olivier De Cannière %!s(int64=2) %!d(string=hai) anos
pai
achega
a1d98b825d

+ 3 - 0
Userland/Applications/Calendar/main.cpp

@@ -99,6 +99,9 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
     view_type_action_group->set_exclusive(true);
     view_type_action_group->set_exclusive(true);
     view_type_action_group->add_action(*view_month_action);
     view_type_action_group->add_action(*view_month_action);
     view_type_action_group->add_action(*view_year_action);
     view_type_action_group->add_action(*view_year_action);
+    auto default_view = Config::read_string("Calendar"sv, "View"sv, "DefaultView"sv, "Month"sv);
+    if (default_view == "Year")
+        view_year_action->set_checked(true);
 
 
     (void)TRY(toolbar->try_add_action(prev_date_action));
     (void)TRY(toolbar->try_add_action(prev_date_action));
     (void)TRY(toolbar->try_add_action(next_date_action));
     (void)TRY(toolbar->try_add_action(next_date_action));

+ 11 - 0
Userland/Applications/CalendarSettings/CalendarSettingsWidget.cpp

@@ -13,16 +13,19 @@
 void CalendarSettingsWidget::apply_settings()
 void CalendarSettingsWidget::apply_settings()
 {
 {
     Config::write_string("Calendar"sv, "View"sv, "FirstDayOfWeek"sv, m_first_day_of_week_combobox->text());
     Config::write_string("Calendar"sv, "View"sv, "FirstDayOfWeek"sv, m_first_day_of_week_combobox->text());
+    Config::write_string("Calendar"sv, "View"sv, "DefaultView"sv, m_default_view_combobox->text());
 }
 }
 
 
 void CalendarSettingsWidget::reset_default_values()
 void CalendarSettingsWidget::reset_default_values()
 {
 {
     m_first_day_of_week_combobox->set_text("Sunday");
     m_first_day_of_week_combobox->set_text("Sunday");
+    m_default_view_combobox->set_text("Month");
 }
 }
 
 
 CalendarSettingsWidget::CalendarSettingsWidget()
 CalendarSettingsWidget::CalendarSettingsWidget()
 {
 {
     load_from_gml(calendar_settings_widget_gml);
     load_from_gml(calendar_settings_widget_gml);
+
     m_first_day_of_week_combobox = *find_descendant_of_type_named<GUI::ComboBox>("first_day_of_week");
     m_first_day_of_week_combobox = *find_descendant_of_type_named<GUI::ComboBox>("first_day_of_week");
     m_first_day_of_week_combobox->set_text(Config::read_string("Calendar"sv, "View"sv, "FirstDayOfWeek"sv, "Sunday"sv));
     m_first_day_of_week_combobox->set_text(Config::read_string("Calendar"sv, "View"sv, "FirstDayOfWeek"sv, "Sunday"sv));
     m_first_day_of_week_combobox->set_only_allow_values_from_model(true);
     m_first_day_of_week_combobox->set_only_allow_values_from_model(true);
@@ -30,4 +33,12 @@ CalendarSettingsWidget::CalendarSettingsWidget()
     m_first_day_of_week_combobox->on_change = [&](auto, auto) {
     m_first_day_of_week_combobox->on_change = [&](auto, auto) {
         set_modified(true);
         set_modified(true);
     };
     };
+
+    m_default_view_combobox = *find_descendant_of_type_named<GUI::ComboBox>("default_view");
+    m_default_view_combobox->set_text(Config::read_string("Calendar"sv, "View"sv, "DefaultView"sv, "Month"sv));
+    m_default_view_combobox->set_only_allow_values_from_model(true);
+    m_default_view_combobox->set_model(*GUI::ItemListModel<StringView, Array<StringView, 2>>::create(m_view_modes));
+    m_default_view_combobox->on_change = [&](auto, auto) {
+        set_modified(true);
+    };
 }
 }

+ 34 - 3
Userland/Applications/CalendarSettings/CalendarSettingsWidget.gml

@@ -30,9 +30,40 @@
                 fixed_width: 70
                 fixed_width: 70
             }
             }
 
 
-           @GUI::ComboBox {
-               name: "first_day_of_week"
-           }
+            @GUI::ComboBox {
+                name: "first_day_of_week"
+            }
+        }
+    }
+
+    @GUI::GroupBox {
+        title: "Default view"
+        fixed_height: 72
+        layout: @GUI::VerticalBoxLayout {
+            margins: [6]
+            spacing: 2
+        }
+
+        @GUI::Label {
+            text: "Show the month or the year view when Calendar is started."
+            word_wrap: true
+            text_alignment: "CenterLeft"
+        }
+
+        @GUI::Widget {
+            layout: @GUI::HorizontalBoxLayout {
+                spacing: 16
+            }
+
+            @GUI::Label {
+                text: "Default view:"
+                text_alignment: "CenterLeft"
+                fixed_width: 70
+            }
+
+            @GUI::ComboBox {
+                name: "default_view"
+            }
         }
         }
     }
     }
 }
 }

+ 2 - 0
Userland/Applications/CalendarSettings/CalendarSettingsWidget.h

@@ -18,6 +18,8 @@ public:
 
 
 private:
 private:
     CalendarSettingsWidget();
     CalendarSettingsWidget();
+    static constexpr Array<StringView, 2> const m_view_modes = { "Month"sv, "Year"sv };
 
 
     RefPtr<GUI::ComboBox> m_first_day_of_week_combobox;
     RefPtr<GUI::ComboBox> m_first_day_of_week_combobox;
+    RefPtr<GUI::ComboBox> m_default_view_combobox;
 };
 };

+ 8 - 0
Userland/Libraries/LibGUI/Calendar.cpp

@@ -45,6 +45,14 @@ Calendar::Calendar(Core::DateTime date_time, Mode mode)
         }
         }
     }
     }
 
 
+    auto default_view = Config::read_string("Calendar"sv, "View"sv, "DefaultView"sv, "Month"sv);
+    if (default_view == "Year") {
+        m_mode = Year;
+        m_show_days = false;
+        m_show_year = true;
+        m_show_month_year = true;
+    }
+
     update_tiles(m_selected_date.year(), m_selected_date.month());
     update_tiles(m_selected_date.year(), m_selected_date.month());
 }
 }