SettingsWindow.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * Copyright (c) 2020, Idan Horowitz <idan.horowitz@serenityos.org>
  3. * Copyright (c) 2021-2022, the SerenityOS developers.
  4. * Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause
  7. */
  8. #pragma once
  9. #include <LibGUI/Button.h>
  10. #include <LibGUI/TabWidget.h>
  11. #include <LibGUI/Window.h>
  12. namespace GUI {
  13. class SettingsWindow : public GUI::Window {
  14. C_OBJECT(SettingsWindow)
  15. public:
  16. class Tab : public GUI::Widget {
  17. public:
  18. virtual void apply_settings() = 0;
  19. virtual void cancel_settings() { }
  20. virtual void reset_default_values() { }
  21. };
  22. enum class ShowDefaultsButton {
  23. Yes,
  24. No,
  25. };
  26. static ErrorOr<NonnullRefPtr<SettingsWindow>> create(String title, ShowDefaultsButton = ShowDefaultsButton::No);
  27. virtual ~SettingsWindow() override = default;
  28. template<class T, class... Args>
  29. ErrorOr<NonnullRefPtr<T>> add_tab(String title, Args&&... args)
  30. {
  31. auto tab = TRY(m_tab_widget->try_add_tab<T>(move(title), forward<Args>(args)...));
  32. TRY(m_tabs.try_append(tab));
  33. return tab;
  34. }
  35. private:
  36. SettingsWindow() = default;
  37. RefPtr<GUI::TabWidget> m_tab_widget;
  38. NonnullRefPtrVector<Tab> m_tabs;
  39. RefPtr<GUI::Button> m_ok_button;
  40. RefPtr<GUI::Button> m_cancel_button;
  41. RefPtr<GUI::Button> m_apply_button;
  42. RefPtr<GUI::Button> m_reset_button;
  43. };
  44. }