MailSettingsWindow.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /*
  2. * Copyright (c) 2021, The SerenityOS developers
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "MailSettingsWindow.h"
  7. #include <Applications/MailSettings/MailSettingsWindowGML.h>
  8. #include <LibCore/ConfigFile.h>
  9. #include <LibGUI/Application.h>
  10. #include <LibGUI/BoxLayout.h>
  11. #include <LibGUI/Button.h>
  12. #include <LibGUI/CheckBox.h>
  13. #include <LibGUI/ComboBox.h>
  14. #include <LibGUI/ItemListModel.h>
  15. #include <LibGUI/Label.h>
  16. #include <LibGUI/TabWidget.h>
  17. #include <LibGUI/TextBox.h>
  18. #include <LibGUI/Widget.h>
  19. #include <unistd.h>
  20. void MailSettingsWindow::reset_default_values()
  21. {
  22. m_server_inputbox->set_text("");
  23. m_port_combobox->set_text("993");
  24. m_tls_checkbox->set_checked(false);
  25. m_email_inputbox->set_text("");
  26. }
  27. void MailSettingsWindow::write_values()
  28. {
  29. m_server = m_server_inputbox->get_text();
  30. m_port = m_port_combobox->text();
  31. m_tls = m_tls_checkbox->is_checked();
  32. m_email = m_email_inputbox->get_text();
  33. m_config->write_entry("Connection", "Server", m_server);
  34. m_config->write_entry("Connection", "Port", m_port);
  35. m_config->write_bool_entry("Connection", "TLS", m_tls);
  36. m_config->write_entry("User", "Username", m_email);
  37. m_config->sync();
  38. }
  39. MailSettingsWindow::MailSettingsWindow()
  40. {
  41. m_config = Core::ConfigFile::get_for_app("Mail");
  42. if (unveil(m_config->filename().characters(), "rwc") < 0) {
  43. perror("unveil");
  44. GUI::Application::the()->quit();
  45. }
  46. if (unveil("/res", "r") < 0) {
  47. perror("unveil");
  48. GUI::Application::the()->quit();
  49. }
  50. if (unveil(nullptr, nullptr)) {
  51. perror("unveil");
  52. GUI::Application::the()->quit();
  53. }
  54. //Common port values for email fetching
  55. m_common_ports.append("143");
  56. m_common_ports.append("993");
  57. auto& main_widget = set_main_widget<GUI::Widget>();
  58. main_widget.set_fill_with_background_color(true);
  59. main_widget.set_layout<GUI::VerticalBoxLayout>();
  60. main_widget.layout()->set_margins(4);
  61. main_widget.layout()->set_spacing(6);
  62. auto& tab_widget = main_widget.add<GUI::TabWidget>();
  63. auto& mail_widget = tab_widget.add_tab<GUI::Widget>("Mail");
  64. mail_widget.load_from_gml(mail_settings_window_gml);
  65. auto& server_settings_image_label = *main_widget.find_descendant_of_type_named<GUI::Label>("server_settings_image_label");
  66. server_settings_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/mail-server-settings.png"));
  67. auto& user_settings_image_label = *main_widget.find_descendant_of_type_named<GUI::Label>("user_settings_image_label");
  68. user_settings_image_label.set_icon(Gfx::Bitmap::try_load_from_file("/res/graphics/mail-user-settings.png"));
  69. m_server_inputbox = *main_widget.find_descendant_of_type_named<GUI::TextBox>("server_input");
  70. m_server_inputbox->set_text(m_config->read_entry("Connection", "Server", ""));
  71. m_port_combobox = *main_widget.find_descendant_of_type_named<GUI::ComboBox>("port_input");
  72. m_port_combobox->set_text(m_config->read_entry("Connection", "Port", "993"));
  73. m_port_combobox->set_only_allow_values_from_model(false);
  74. m_port_combobox->set_model(*GUI::ItemListModel<String>::create(m_common_ports));
  75. m_tls_checkbox = *main_widget.find_descendant_of_type_named<GUI::CheckBox>("tls_input");
  76. m_tls_checkbox->set_checked(m_config->read_bool_entry("Connection", "TLS", false));
  77. m_email_inputbox = *main_widget.find_descendant_of_type_named<GUI::TextBox>("email_input");
  78. m_email_inputbox->set_text(m_config->read_entry("User", "Username", ""));
  79. auto& button_container = main_widget.add<GUI::Widget>();
  80. button_container.set_shrink_to_fit(true);
  81. button_container.set_layout<GUI::HorizontalBoxLayout>();
  82. button_container.layout()->set_spacing(6);
  83. m_reset_button = button_container.add<GUI::Button>("Defaults");
  84. m_reset_button->set_fixed_width(75);
  85. m_reset_button->on_click = [this](auto) {
  86. reset_default_values();
  87. };
  88. button_container.layout()->add_spacer();
  89. m_ok_button = button_container.add<GUI::Button>("OK");
  90. m_ok_button->set_fixed_width(75);
  91. m_ok_button->on_click = [&](auto) {
  92. write_values();
  93. GUI::Application::the()->quit();
  94. };
  95. m_cancel_button = button_container.add<GUI::Button>("Cancel");
  96. m_cancel_button->set_fixed_width(75);
  97. m_cancel_button->on_click = [&](auto) {
  98. GUI::Application::the()->quit();
  99. };
  100. m_apply_button = button_container.add<GUI::Button>("Apply");
  101. m_apply_button->set_fixed_width(75);
  102. m_apply_button->on_click = [&](auto) {
  103. write_values();
  104. };
  105. }